Исследование защиты программы PixPlant
Скриншот программы PixPlant
PixPlant - одна из лучших, на мой взгляд, и самых удобных программ для создания и редактирования так называемых бесшовных текстур. Если вы занимаетесь web-строительством или трехмерной графикой, то вам этот термин должен быть знаком, для остальных на всякий случай поясню. Бесшовная текстура - это изображение какого-либо объекта, например, кирпичной стены, которая может повторяться необходимое число раз по вертикали и горизонтали без видимых швов или разрывов, при этом каждая грань изображения должна идеально совпадать с любой другой. Но с самим редактором дела обстоят не так гладко.
Редактор PixPlant распространяется в двух вариантах: полная версия, доступ к дистрибутиву которой предоставляется только после оплаты, и демо-версия, доступная для свободного скачивания. Слова "купить" и "софт" по моим жизненным принципам все также не могут находиться рядом, значит будем работать с тем, что есть. Кроме того, на офсайте теперь доступен для скачивания только дистрибутив PixPlant 3 для 64-битных систем. Мне этот вариант не подходит, поэтому придется извлечь из закромов Родины дистрибутив PixPlant 2.1.68, это последняя версия с поддержкой 32-битных версий Windows.
Водяной знак на изображении
Как написано на офсайте, единственное ограничение демо-версии - это водяной знак, который накладывается на готовые изображения. Ограничений по времени работы и функционалу нет. Если внимательно присмотреться к самому водяному знаку, то можно заметить, что выполнен он, скорее всего, не наложением текста на текстуру, а наложением картинки с полупрозрачным текстом. Значит можно предположить, что где-то в исполняемом файле или в какой-нибудь сопутствующей библиотеке находится эта картинка.
Для поиска всех изображений, хранящихся в исполняемом файле воспользуемся утилитой Image Extractor из моего комплекта Image Tools. Обычно я использую эту программу для мирных целей, но никто не мешает задействовать ее и на нужды Темной стороны Силы.
Извлекаем изображения из файла
Image Extractor нашел в исполняемом файле 10 изображений в разном формате. Просмотрев их, обнаруживаем аж целых три одинаковых файла с водяным знаком размером 188х38 пикселов, который и накладывается на готовое изображение в демо-версии редактора. Непонятно, на какой хер надо хранить в файле абсолютно одинаковые картинки, тут у аффтара при разработке явно дрогнула рука.
Теперь мы подходим ко ключевому моменту статьи. Если заменить в файле картинки водяного знака с текстом на прозрачные изображения, то они все так же будут накладываться на редактируемую текстуру, но при этом не испортят ее, так как будут прозрачными. Осталось создать изображение-пустышку, чтобы произвести такую замену. Вот так безобидный графический редактор Adobe Photoshop становится самым настоящим крякерским инструментом.
Создаем прозрачную картинку в Photoshop
Запускаем Photoshop, создаем в нем пустую картинку размером 188х38 пикселов, обязательно с прозрачным фоном. После этого сразу же экспортируем ее (меню "Сохранить для Web") в формате PNG-24 без оптимизации и с сохранением прозрачности. Для уменьшения размера прогоняем полученный файл через программу Total Exif Annihilator. Размер итогового файла-пустышки у меня получился всего 157 байт. Для удобства дальнейшей работы с файлом переименуем его во что-нибудь типа "dummy.png" и перенесем в папку с установленной программой PixPlant.
Выделяем блок для замены
При генерации имени файла Image Extractor записывает в него абсолютное смещение от начала файла, по которому это изображение было обнаружено. Воспользуемся этой информацией, чтобы быстренько пропатчить все три картинки с водяным знаком.
Впечатываем прозрачное изображение
Так, первая картинка с водяным знаком, извлеченная из исполняемого файла, носит имя PixPlant_exe_image_0002_00498DA8.png, значит она находится по абсолютному смещению 00498DA8 от начала файла. Устанавливаем указатель на этот адрес, выделяем блок, равный длине нашего файла-пустышки, то есть 157 байт. Ставим курсор на начало блока и загружаем в него данные из файла-пустышки. Точно так же патчим оставшиеся два водяных знака. Оставшийся мусор от оригинального PNG-файла на работоспособность программы никак не повлияет. Модуль обработки картинок в редакторе ориентируется на внутреннюю структуру PNG-файла, и будет работать только с данными файла-пустышки, игнорируя все, что окажется после его конца.
Водяной знак успешно нейтрализован
Теперь запускаем программу. Все водяные знаки пропали, программа работает, текстура сохраняется чистенькая. Точнее, фактически водяные знаки никуда не делись, но они стали прозрачными. При этом даже не пришлось пускать в бой никакие отладчики, дизассемблеры и прочую тяжелую артиллерию. Поскольку никаких других ограничений в редакторе нет, можно считать цель достигнутой. Этим же способом можно пропатчить любую демо-версию PixPlant для любой разрядности системы, в том числе и самую новую. Сделать универсальный патч тоже особого труда не составит.
Подобный способ замены триальных изображений и водяных знаков на прозрачные картинки-пустышки я уже неоднократно использовал на практике с различными программами, так что он вполне имеет место быть. Особенно это актуально с демо-версиями, которые изначально невозможно зарегистрировать.
Просмотров: 4562 | Комментариев: 14
Метки: исследование защиты, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Petya
(16.07.2020 в 12:55):
Почему?
ManHunter
(16.07.2020 в 12:31):
Нет
Petya
(16.07.2020 в 12:28):
А не поделитесь ли если не готовой прогой (ибо правила запрещают, хотя я видел нарушения Вами же), так хоть применённой картинкой? А то руки у меня, видимо, не оттуда растут.
Smith
(21.09.2016 в 22:42):
Что-то не получилось у меня найти картинку в крайней (3.0.11)версии.Но получилось вылечить другим способом.Нужно занопить процедуру,превращающую прогу в демку.Для этого в эксешнике перейти к смещению 069EF0h и заменить два байта (32С0)на 9090.
В сети можно найти пролеченную.3.0.8.На неё навешена энигма.Наверное для того, чтобы разработчики не смогли узнать,насколько легко отламывается их серьёзная защита:)
В сети можно найти пролеченную.3.0.8.На неё навешена энигма.Наверное для того, чтобы разработчики не смогли узнать,насколько легко отламывается их серьёзная защита:)
Evgenia
(13.03.2016 в 00:29):
Подскажите чайнику, пожалуйста) Что нужно нажать чтобы появилось синее окно где мы далее "Выделяем блок для замены". Очень хочется от водяных знаков избавиться)
4lex4
(23.02.2016 в 23:53):
Дак я сам не ас, потому и спрашиваю, как вы поступаете в таких случаях.
ManHunter
(23.02.2016 в 21:00):
4lex4, ну так напиши про сложные программы, кто удерживает? Я пишу для новичков, чтобы пробуждать и развивать интерес к реверсингу. Формат и тематика блога меня устраивает, ничего менять я не собираюсь.
4lex4
(23.02.2016 в 16:52):
ManHunter, чего то у тебя все програмки простенькие, я вот какую программу не возьму, всегда обфусцированая, все строки зашифрованы, причем в на каждый класс/модуль по своей функе расшифровки. :) Еще обфускаторы строки любят прятать массивами. Берут строку, фигачат ее отдельной функцией, а там массив с нулями заполняется по одному символу в перемешаном порядке, а дальше возвращается строка. Так что на поиск по строкам надеятся нельзя в таком случае. Я ищу по вызовам АПИ, а вот есть ли какие нибудь плагины для ИДА, чтоб после выполнения программы через деббагер записать все строки, которые были в программе с адресами? Дамп тут не годится естественно, ибо строки локальные и пишутся в стек, или в кучу, но быстро освобождаются. Нужно именно трассировщик какой-нибудь? Не знаете, как решить проблемку?
SHREEF
(13.01.2016 в 19:10):
Как всегда молодец! )
Vnv
(13.01.2016 в 14:13):
ManHunter, и на этой программке патч нулями сработал, так, для информации. Хотя ты прав насчет того, что программе надо давать то, что она хочет, т.е. прозрачный PNG будет корректнее.
ManHunter
(13.01.2016 в 12:50):
Ну мне же гораздо интереснее рекламировать свою "утилиту с одной кнопкой", чем какие-то посторонние сайты. Тем более, формат GIF одной картинкой описать можно только очень поверхностно, для понимания как минимум надо выкурить вот этот объем документации: http://rghost.ru/7P5Kfld7Q
PNG да, попроще. И заголовок, и маркер окончания найти легко. Но их так же легко посмотреть самому, открыв в HiEW любой доступный PNG.
PNG да, попроще. И заголовок, и маркер окончания найти легко. Но их так же легко посмотреть самому, открыв в HiEW любой доступный PNG.
brute
(13.01.2016 в 12:30):
Спасибо за новую методику! В образовательных целях, имхо, было бы полезнее в hex-редакторе показать поиск картинок по сигнатурам - с указанием байтов начала и конца картинки (для gif и png - которые поддерживают прозрачность и наиболее часто встречаются) и показать сайт с разбором структур многих типов файлов (https://github.com/corkami/pics), чем давать полезную утилиту с одной кнопкой:)
ManHunter
(13.01.2016 в 10:52):
Vnv, это зависит логики разработчика программы. Сам представь ситуацию со стороны программиста: в программу заложен водяной знак, который в нормальной обстановке (непатченная программа) всегда присутствует, гарантированно должен загружаться и накладываться на изображение, причем с фиксированными размерами. А тут фигак, пришел товарищ Vnv, пропатчил экзешник и теперь какой-нибудь GDI-шной API вместо картинки приходит строка с нулевым байтом в начале. В лучшем случае будет словлен какой-нибудь эксепшен, в худшем - падение всей софтины. Далеко не каждый программист будет предусматривать обработку возможных ошибок в такой ситуации.
Мое мнение, что раз уж программа ожидает картинку, то лучше ей дать именно картинку, причем в нужном формате и корректной структуры, хоть и прозрачную. Не придется думать, как программа воспримет такой патч. А для какого-нибудь универсального патча по большому счету без разницы, один байт впечатывать или 157.
Мое мнение, что раз уж программа ожидает картинку, то лучше ей дать именно картинку, причем в нужном формате и корректной структуры, хоть и прозрачную. Не придется думать, как программа воспримет такой патч. А для какого-нибудь универсального патча по большому счету без разницы, один байт впечатывать или 157.
Vnv
(13.01.2016 в 10:37):
А не проще ли вместо байта "89" поставить "00"? Я так исправляю каждую версию http://www.vextrasoft.com/rasterstitch.htm и никакой водяной знак не накладывается. Не знаю, как эта программа воспримет такой патч, но так без гемора создания файла-пустышки.
Добавить комментарий
Заполните форму для добавления комментария