png-zip β ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π²Π½ΡΡΡΡ PNG-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ PNG, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΡΠΈΠΊΠ΅, Π½ΠΎ Π²Π½ΡΡΡΠΈ Π½Π΅ΡΡΡ ΡΠΊΡΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ.
ΠΠ°ΠΏΠΈΡΠ°Π½Π° Π½Π° Python (ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π±Π΅Π· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ) Ρ Π΄ΡΠ±Π»ΠΈΡΡΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π½Π° PowerShell Π΄Π»Ρ Windows.
ΠΡΠ΅Π΄ΡΡΡΠΎΡΠΈΡ
ΠΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΈΠ· ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ: Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ°ΡΠΈΡΡ ΡΠ°ΠΉΠ»Ρ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ΅Π· Rocket.Chat ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΠ±ΡΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ, Π½ΠΎ PNG ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΡΠ³ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ β ΡΠΏΡΡΡΠ°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΎΡ Π»ΠΈΡΠ½ΠΈΡ Π³Π»Π°Π·. ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΎΠΉ, Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π½ΡΡΡΠΈ Π°ΡΡ ΠΈΠ² ΠΈΠ»ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ.
Π Π΅ΠΆΠΈΠΌΡ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ
Append (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) β Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΌΠ°ΡΠΊΠ΅ΡΠ° IEND. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Chunk β ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ PNG-ΡΠ°Π½ΠΊ pnZp. ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ PNG, ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°Π΅Ρ ΡΡΡΠΎΠ³ΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠ°.
LSB β Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ Π² ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π±ΠΈΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ (ΡΡΠ΅Π³Π°Π½ΠΎΠ³ΡΠ°ΡΠΈΡ). ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°, ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±ΡΡΠΌΡ: ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΈΡΠΈΠ½Π° Γ Π²ΡΡΠΎΡΠ° Γ ΠΊΠ°Π½Π°Π»Ρ / 8 Π±Π°ΠΉΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°:
python3 pack.py cover.png secret.tar.gz -o output.png
python3 pack.py -m chunk cover.png secret.tar.gz -o output.png
python3 pack.py -m lsb cover.png secret.tar.gz -o output.pngΠ Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°:
python3 unpack.py output.png
python3 unpack.py output.png -o ./extracted/
python3 unpack.py output.png -l # ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎBootstrap-ΡΠ΅ΠΆΠΈΠΌ
ΠΠ»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΠΊΡΠΎΠΌΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°. Π€Π»Π°Π³ --self-extract Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Python-ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ ΠΏΡΡΠΌΠΎ Π² PNG, Π° --self-extract-ps β PowerShell-Π²Π΅ΡΡΠΈΡ. ΠΠ΄Π½ΠΎΡΡΡΠΎΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (EXIF/tEXt ΡΠ°Π½ΠΊΠΈ).
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
- Π Π΅ΠΆΠΈΠΌΡ append ΠΈ chunk Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ PNG (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ Π² ΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ)
- LSB ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ 8-bit RGB/RGBA Π±Π΅Π· interlacing
- ΠΠ΅ΡΡ payload Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ β ΡΠ°ΠΉΠ»Ρ >500 ΠΠ ΠΏΠΎΡΡΠ΅Π±ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΡΠΌΠ° RAM
- Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π²ΡΡΡΠΎΠ΅Π½ΠΎ β Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ, ΡΠΈΡΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» ΠΏΠ΅ΡΠ΅Π΄ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ