@NikoNaio

Что делает этот скрипт?

import PIL.Image # pip install pillow
import io

f = open('fimrin.jpg', 'rb')
content = f.read()
f.seek(content.index(bytes.fromhex('FFD9')) + 2)
PIL.Image.open(io.BytesIO(f.read())).save('better_fimrin.jpg')
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
FFD9 - последние байты изображения формата jpg.
Код вытаскивает второе изображение из файла fimrin.jpg и сохраняет в better_fimrin.jpg

Допустим у нас есть два jpg файла: orange.jpg и apple.jpg (апельсин и яблоко соответственно). Если мы их склеим в 1 файла таким кодом:
f1 = open('orange.jpg', 'rb')
f2 = open('apple.jpg', 'rb')

with open('out.jpg', 'wb') as out:
    out.write(f1.read()+f2.read())


то получим файл out.jpg, который в просмоторщике фото будет выглядеть как апельсин. Хотя на самом деле, после апельсина дописаны байты яблока. Очень упрощено
orangeblablablaFFD9applelalalalaFFD9

Код находит индекс FFD9, которые являются концом первого изображения (апельсина), смещает курсор до этих байт (f.seek), затем читает оставшиеся байты, которые являются байтами изображения с яблоком. И сохраняет эти байты в виде нового файла. В общем, вытаскивает скрытое второе изображение из файла. Может быть как часть какого нибудь легкого задания, связанного с криптографией.

В принципе, код легко ужимается до
f = open('fimrin.jpg', 'rb')
content = f.read()

with open('better_fimrin.jpg', 'wb') as out:
    out.write(content[content.index(bytes.fromhex('FFD9')) + 2:])
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы