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
  • Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ встроСно β€” Ссли Π½ΡƒΠΆΠ½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ