Исследование защиты программы JPGToPDF
Скриншот программы JPGToPDF
Программа JPGToPDF предназначена для создания PDF-файла из отдельных изображений. Представляет собой полный набор антипаттернов для софта: ставится в корень диска C:\, использует попугайские скины, хранит регистрацию в фейковой dll в системной папке, на любой чих открывает свой сайт и всякое такое. Но, при всем этом, со своей основной задачей справляется неплохо. А с регистрацией сейчас быстренько разрулим, потому что в триальном режиме создаваемые файлы портятся вставкой мусорных страниц.
Забираем с сайта дистрибутив, устанавливаем. Главный исполняемый файл написан на бейсике и ничем не упакован, отправляем его на разбор в дизассемблер. Кода там совсем немного, весь процесс займет буквально несколько секунд. Теперь давайте попробуем зарегистрировать программу какими-нибудь левыми данными.
Сообщение о неправильной регистрации
У нас есть текст сообщения, который выводится при неправильной регистрации. Поищем его в файле. Найдется единственная юникодная строка:
Строка сообщения в файле
Чуть ниже по тексту лежит ответочка от аффтара. Ну-ну, посмотрим. Перефразируя известную поговорку, "Не говори фак, пока не перепрыгнешь".
Строка сообщения в файле
Вернемся в дизассемблерный листинг и посмотрим, где и как используется строка о неправильной регистрации. Будет найден вот такой кусочек кода:
Code (Assembler) : Убрать нумерацию
- .text:0052BFD0 push ecx
- .text:0052BFD1 lea edx, [ebp-90h]
- .text:0052BFD7 push edx
- ; Перевести строку в верхний регистр
- .text:0052BFD8 call ds:rtcUpperCaseVar
- .text:0052BFDE lea eax, [ebp-70h]
- .text:0052BFE1 push eax
- .text:0052BFE2 lea ecx, [ebp-90h]
- .text:0052BFE8 push ecx
- ; Сравнить две строки
- .text:0052BFE9 call ds:__vbaVarTstEq
- ; Сохранить результат проверки
- .text:0052BFEF mov [ebp-0E4h], ax
- .text:0052BFF6 lea edx, [ebp-90h]
- .text:0052BFFC push edx
- .text:0052BFFD lea eax, [ebp-70h]
- .text:0052C000 push eax
- .text:0052C001 lea ecx, [ebp-80h]
- .text:0052C004 push ecx
- .text:0052C005 push 3
- .text:0052C007 call ds:__vbaFreeVarList
- .text:0052C00D add esp, 10h
- ; Загрузить результат проверки
- .text:0052C010 movsx edx, word ptr [ebp-0E4h]
- .text:0052C017 test edx, edx
- ; Если строки ранее не совпали, то
- .text:0052C019 jz loc_52C17F
- .text:0052C01F mov dword ptr [ebp-4], 9
- .text:0052C026 mov dword ptr [ebp-98h], 80020004h
- .text:0052C030 mov dword ptr [ebp-0A0h], 0Ah
- .text:0052C03A mov dword ptr [ebp-88h], 80020004h
- .text:0052C044 mov dword ptr [ebp-90h], 0Ah
- .text:0052C04E mov dword ptr [ebp-0B8h], offset aInvaild
- ; "Invaild"
- .text:0052C058 mov dword ptr [ebp-0C0h], 8
- .text:0052C062 lea edx, [ebp-0C0h]
- .text:0052C068 lea ecx, [ebp-80h]
- .text:0052C06B call ds:__vbaVarDup
- .text:0052C071 mov dword ptr [ebp-0A8h], offset aInvaildSeri
- ; "Invaild Serial Code."
- .text:0052C07B mov dword ptr [ebp-0B0h], 8
- .text:0052C085 lea edx, [ebp-0B0h]
- .text:0052C08B lea ecx, [ebp-70h]
Указатели на строки в стеке
Это введенный неправильный серийник и юникодная строка 8HRDUOG0WV8Q963, с которой он сравнивается. Кстати, она прописана в файле и не меняется, то есть для регистрации используется один единственный серийный номер. Закрываем отладчик, запускаем программу и повторяем регистрацию с найденным серийником.
Программа успешно зарегистрирована
Программа сперва сообщает, что серийный номер неправильный, но следующим сообщением благодарит за регистрацию и просит перезапуститься. Не проблема, перезапускаем. Кнопка регистрации пропала, при сохранении PDF-файлы не портятся. Цель достигнута.
Просмотров: 1810 | Комментариев: 7
Метки: исследование защиты, PDF
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
???
(11.05.2023 в 20:50):
привет. Я не знаю русского. Я сделал это для вас на русском языке с помощью Google Translate, так что, пожалуйста, поймите.
?C:\Users\Login ID\AppData\Roaming\ папка файл jpsound.dll
Писать.
Напишите одну строку asdfasdfasdfaswkk в содержимом файла и сохраните ее.
Затем запустите его, чтобы завершить регистрацию.
Меня беспокоит безопасность многострочных фиктивных строк, поэтому я создаю только однострочные.
?C:\Users\Login ID\AppData\Roaming\ папка файл jpsound.dll
Писать.
Напишите одну строку asdfasdfasdfaswkk в содержимом файла и сохраните ее.
Затем запустите его, чтобы завершить регистрацию.
Меня беспокоит безопасность многострочных фиктивных строк, поэтому я создаю только однострочные.
Noobie
(26.09.2019 в 11:19):
Гм, прога от того же разработчика, что и куча подобных поделок. Давно было установлено, что никакие серийники, патчи и прочие умственные усилия не нужны. Достаточно добавить в самый конец текстового файла фейковой дллки (в данном случае это jpsound.dll) две буквы kk и желаемая рега будет достигнута.
voffka
(24.09.2019 в 13:56):
Про mov eax,1 тут столько статей, что зная где проверяется серийник, найти куда влепить mov eax,1 особого труда не составит.
Метод mov eax,1 нравится сектантам из церкви пришествия первого портабля. Серийник всегда интереснее.
Метод mov eax,1 нравится сектантам из церкви пришествия первого портабля. Серийник всегда интереснее.
ManHunter
(23.09.2019 в 22:49):
Вас, блин, граждане, не поймешь. Топишь за mov eax,1 - сразу "а где алгоритм генерации серийника??!111одинодин", выкладывешь как добыть серийник - "так проще mov eax,1". Ну елы-палы.
Vnv
(23.09.2019 в 19:20):
xussr,
А по мне, так лучше как можно меньше вмешиваться в приложение. Лодырь для нахождения серийника или кейген намного лучше, чем патч.
А по мне, так лучше как можно меньше вмешиваться в приложение. Лодырь для нахождения серийника или кейген намного лучше, чем патч.
xussr
(23.09.2019 в 18:29):
По мне так проще пропатчить начало процедуры командой xor eax,eax и ret для чего столько много писать про серийники )))!!!
Добавить комментарий
Заполните форму для добавления комментария
-- Как вы эти исключения обошли в OllyDbg?