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

). PNG изображение можно «распознать» по «ключевым словам» — chunks, которые присутствуют в каждом из них.
Наиболее часто встречающиеся «слова» это PNG — начало файла, IEND — конец файла, IHDR — заголовок файла, IDAT — данные, а также PLTE, tRNS, sRGB и т.д. Подробнее можно узнать в документации по структуре / спецификации PNG файла (
см.). Всегда встречаются в файле PNG IHDR, IDAT и IEND.
Следующая картинка показывает PAK архив, в котором выделены символы одного из изображений:
Теперь расскажу кратко о структуре PNG файла:
1) В самом начале файла указывается, что это PNG файл, обязательно 8 байтов, обязательно такие: 89 50 4E 47 0D 0A 1A 0A
2) Далее идет заголовок файла, IHDR, в нем указываются размеры изображения
3) Далее могут идти сразу данные IDAT (само изображение)
4) В конце файла приписывается IEND ( IEND®B`‚ ), в hex байты: 49 45 4E 44 AE 42 60 82
И вот настает тот момент, когда необходимо рассказать о том, как же разработчики шифруют изображения. Приведу примеры, с которыми я столкнулся.
1) Самое простое — просто переименовать расширение *.png на любое другое
2) Изображение находится в PAK архиве. Иногда в этом же архиве находится индексный файл.
3) Размер изображения (4 байта) приписывается в начало его самого (в играх от CWA)
4) Изображение переворачивается, то есть сначала идут ‚`B®DNEI … GNP‰ (в игре GoF2, FishLabs)
5) Из изображения убираются строки PNG, IHDR и IEND (так как они не изменяются) и добавляются в программном коде при формировании изображения.
6) Применяется операция xor (чаще всего xor FF)
7) В изображение «подмешивается мусор», например, через каждые 20 символов выполняется операция xor или вычитание.
8 ) Выполняется вычитание из каждого символа какого-нибудь другого.
Для дешифровки изображений пишется дешифровщик (необходимо знать языки программирования) для ускорения процесса.
Автор урока -
wakko,
вот ссылка на его сайт.