Исследование защиты программы PDF To JPG
Скриншот программы PDF To JPG
Программа PDF To JPG предназначена для конвертирования PDF-файлов в изображения. Сложно сказать, насколько такая опция вообще востребована, но программа все равно есть. Да еще и денег просит. Ну тогда добро пожаловать на разделочный стол!
Любой процесс исследования начинается с загрузки дистрибутива. По умолчанию программа хочет создавать каталог установки в корне диска C:\, автор, похоже, не справился с настройками инсталлятора.
Сообщение об ограничениях триальной версии
Исполняемый файл написан на Visual Basic и ничем не упакован. Отправляем его в дизассемблер. Параллельно посмотрим, как программа регистрируется и каким образом реагирует на введенные левые данные.
Сообщение о неправильной регистрации
Поиск в файле по строке "Invalid Serial Code" приводит нас вот к такой милой картинке:
Заблокированный серийный номер
Рядом со строкой сообщения находится нечто, очень похожее на серийный номер или его часть. Посмотрим в дизассемблере, где эта строка используется:
Code (Assembler) : Убрать нумерацию
- .text:0064BB57 lea edx, [ebp-80h]
- .text:0064BB5A push edx
- .text:0064BB5B call ds:rtcTrimVar
- .text:0064BB61 mov dword ptr [ebp-0B8h], offset a8hrduog0wv8q96
- ; "8HRDUOG0WV8Q963"
- .text:0064BB6B mov dword ptr [ebp-0C0h], 8008h
- .text:0064BB75 lea eax, [ebp-80h]
- .text:0064BB78 push eax
- .text:0064BB79 lea ecx, [ebp-0C0h]
- .text:0064BB7F push ecx
- ; Сравнение строк
- .text:0064BB80 call ds:__vbaVarTstEq
- ; Сохранить результат сравнения
- .text:0064BB86 mov [ebp-0E4h], ax
- .text:0064BB8D lea edx, [ebp-80h]
- .text:0064BB90 push edx
- .text:0064BB91 lea eax, [ebp-70h]
- .text:0064BB94 push eax
- .text:0064BB95 push 2
- .text:0064BB97 call ds:__vbaFreeVarList
- .text:0064BB9D add esp, 0Ch
- .text:0064BBA0 movsx ecx, word ptr [ebp-0E4h]
- ; Проверить результат сравнения
- .text:0064BBA7 test ecx, ecx
- .text:0064BBA9 jz loc_64BD14
- ; Сообщение о неправильном серийнике
- .text:0064BBAF mov dword ptr [ebp-4], 9
- .text:0064BBB6 mov dword ptr [ebp-98h], 80020004h
- .text:0064BBC0 mov dword ptr [ebp-0A0h], 0Ah
- .text:0064BBCA mov dword ptr [ebp-88h], 80020004h
- .text:0064BBD4 mov dword ptr [ebp-90h], 0Ah
- .text:0064BBDE mov dword ptr [ebp-0B8h], offset aInvaild
- ; "Invaild"
- .text:0064BBE8 mov dword ptr [ebp-0C0h], 8
- .text:0064BBF2 lea edx, [ebp-0C0h]
- .text:0064BBF8 lea ecx, [ebp-80h]
- .text:0064BBFB call ds:__vbaVarDup
- .text:0064BC01 mov dword ptr [ebp-0A8h], offset aInvaildSerialC
- ; "Invaild Serial Code."
- .text:0064BC0B mov dword ptr [ebp-0B0h], 8
- .text:0064BC15 lea edx, [ebp-0B0h]
Ладно, с патчем понятно. А как на счет алгоритма проверки правильности серийных номеров? По условному переходу перепрыгиваем вывод сообщения, попадаем на дальнейшие проверки. Они представляют из себя цикличный перебор всех символов введенного серийного номера. Каждый символ поочередно проверяется на равенство одному из четырех символов: "W", "D", "8", "6".
Code (Assembler) : Убрать нумерацию
- .text:0064BD8F mov dword ptr [ebp-4], 0Eh
- .text:0064BD96 mov dword ptr [ebp-68h], 1
- .text:0064BD9D mov dword ptr [ebp-70h], 2
- .text:0064BDA4 lea ecx, [ebp-44h]
- .text:0064BDA7 mov [ebp-0A8h], ecx
- .text:0064BDAD mov dword ptr [ebp-0B0h], 4008h
- .text:0064BDB7 lea edx, [ebp-70h]
- .text:0064BDBA push edx
- .text:0064BDBB lea eax, [ebp-30h]
- .text:0064BDBE push eax
- .text:0064BDBF call ds:__vbaI4Var
- .text:0064BDC5 push eax
- .text:0064BDC6 lea ecx, [ebp-0B0h]
- .text:0064BDCC push ecx
- .text:0064BDCD lea edx, [ebp-80h]
- .text:0064BDD0 push edx
- .text:0064BDD1 call ds:rtcMidCharVar
- .text:0064BDD7 mov dword ptr [ebp-0C8h], offset aW ; "W"
- .text:0064BDE1 mov dword ptr [ebp-0D0h], 8008h
- .text:0064BDEB lea eax, [ebp-80h]
- .text:0064BDEE push eax
- .text:0064BDEF lea ecx, [ebp-0D0h]
- .text:0064BDF5 push ecx
- .text:0064BDF6 call ds:__vbaVarTstEq
- .text:0064BDFC mov [ebp-0E4h], ax
- .text:0064BE03 lea edx, [ebp-80h]
- .text:0064BE06 push edx
- .text:0064BE07 lea eax, [ebp-70h]
- .text:0064BE0A push eax
- .text:0064BE0B push 2
- .text:0064BE0D call ds:__vbaFreeVarList
- .text:0064BE13 add esp, 0Ch
- .text:0064BE16 movsx ecx, word ptr [ebp-0E4h]
- .text:0064BE1D test ecx, ecx
- .text:0064BE1F jz short loc_64BE2E
- .text:0064BE21 mov dword ptr [ebp-4], 0Fh
- .text:0064BE28 mov word ptr [ebp-3Ch], 0FFFFh
Программа успешно зарегистрирована
Валидным серийником будет, например, бредятина типа "WOODSTOCK1968" или вовсе минимальная строка "WD68". Кейген вы теперь можете написать самостоятельно.
Просмотров: 2365 | Комментариев: 3
Метки: исследование защиты, PDF
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Добавить комментарий
Заполните форму для добавления комментария
Да и защита такая себе. Из так любимых ManHunter'ом картинкоинструментов есть JPEGMini поинтереснее (не сочтите за запрос, ломанный есть в сети).