Skip to content

Instantly share code, notes, and snippets.

@haxelion
Last active October 25, 2016 13:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haxelion/2a5bf1aa00c013f82b3bdd75691615b5 to your computer and use it in GitHub Desktop.
Save haxelion/2a5bf1aa00c013f82b3bdd75691615b5 to your computer and use it in GitHub Desktop.
import sys
import os
import tempfile
import binascii
from PIL import Image
if __name__ == '__main__':
filename = sys.argv[1]
tempdir = tempfile.mkdtemp()
temppath = tempdir + os.path.basename(filename)
original = Image.open(filename)
original.load()
data = bytearray(open(filename, 'rb').read())
hidden_ranges = []
for i in range(0, len(data)):
data[i] = data[i] ^ 0xff
with open(temppath, 'wb') as f:
f.write(data)
data[i] = data[i] ^ 0xff
try:
modified = Image.open(temppath)
if modified.tobytes() == original.tobytes():
if len(hidden_ranges) == 0:
hidden_ranges.append([i, i+1])
else:
if hidden_ranges[-1][1] == i:
hidden_ranges[-1][1] = i+1
else:
hidden_ranges.append([i, i+1])
except Exception:
continue
sys.stdout.write('\r{:01.4}% '.format(100.0 * i / len(data)))
sys.stdout.flush()
sys.stdout.write('\r')
for h in hidden_ranges:
print('Useless range [{}:{}]: {}'.format(h[0], h[1], binascii.hexlify(data[h[0]:h[1]])))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment