Use python3
.
python3 bin2png <binary> <destination>
# example -> python3 bin2png testbin .
#!/usr/bin/env python | |
# extract embedded PNG files from binaries. | |
import sys, os, re, binascii | |
if len(sys.argv) != 3: | |
print('Usage: ' + sys.argv[0] + ' <binary_file> <desination_dir>') | |
print('<binary_file> - the binary containing embedded PNG images') | |
print('<desination_dir> - the output directory where to save the images') | |
sys.exit(1) | |
PNG_HEADER = '89504e47' | |
PNG_FOOTER = '49454e44ae426082' | |
file_path = sys.argv[1] | |
desination_dir = sys.argv[2] | |
bin = open(file_path, 'rb') | |
hex = binascii.hexlify(bin.read()) | |
matches = re.findall(PNG_HEADER + "(.*?)" + PNG_FOOTER, hex.decode()) | |
i = 0 | |
for body in matches: | |
i = i + 1 | |
png = PNG_HEADER + body + PNG_FOOTER | |
png_raw = binascii.a2b_hex(png) | |
fname = 'carved_' + str(i) + '.png' | |
writer = open(os.path.join(desination_dir, fname), 'wb+') | |
writer.write(png_raw) | |
writer.close() | |
print('Wrote ' + fname) | |
print('Done! Total extracted: ' + str(i)) | |
bin.close() |