# Build an APP2 marker: 0xFFE2 + length (2 bytes) + payload # Length includes the two length bytes themselves. length = len(payload_bytes) + 2 app2_marker = b'\xFF\xE2' + struct.pack('>H', length) + payload_bytes
# Usage payload = b'LovelyAlazaiPatchV1' # any bytes you want to embed add_app2('lovely_alazai.jpg', 'lovely_alazai_patched.jpg', payload) # Show all APP markers; you should see the new APP2 entry exiftool -a -G1 -s lovely_alazai_patched.jpg The output will list something like:
[APP2] LovelyAlazaiPatchV1 If you suspect a JPEG contains unwanted data after the EOI marker, you can strip everything beyond 0xFFD9 :
# Trim everything after the End‑of‑Image marker exiftool -b -FileData lovely_alazai.jpg | \ awk '/\xFF\xD9/ print; exit' > cleaned.jpg Alternatively, re‑encode the image (which automatically discards stray bytes):
# Build an APP2 marker: 0xFFE2 + length (2 bytes) + payload # Length includes the two length bytes themselves. length = len(payload_bytes) + 2 app2_marker = b'\xFF\xE2' + struct.pack('>H', length) + payload_bytes
# Usage payload = b'LovelyAlazaiPatchV1' # any bytes you want to embed add_app2('lovely_alazai.jpg', 'lovely_alazai_patched.jpg', payload) # Show all APP markers; you should see the new APP2 entry exiftool -a -G1 -s lovely_alazai_patched.jpg The output will list something like: filedot lovely alazai jpg patched
[APP2] LovelyAlazaiPatchV1 If you suspect a JPEG contains unwanted data after the EOI marker, you can strip everything beyond 0xFFD9 : # Build an APP2 marker: 0xFFE2 + length
# Trim everything after the End‑of‑Image marker exiftool -b -FileData lovely_alazai.jpg | \ awk '/\xFF\xD9/ print; exit' > cleaned.jpg Alternatively, re‑encode the image (which automatically discards stray bytes): payload) # Show all APP markers