Blog. Just Blog

Исследование защиты программы PDF To JPG

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы PDF To JPG
Скриншот программы PDF To JPG

Программа PDF To JPG предназначена для конвертирования PDF-файлов в изображения. Сложно сказать, насколько такая опция вообще востребована, но программа все равно есть. Да еще и денег просит. Ну тогда добро пожаловать на разделочный стол!

Любой процесс исследования начинается с загрузки дистрибутива. По умолчанию программа хочет создавать каталог установки в корне диска C:\, автор, похоже, не справился с настройками инсталлятора.

Сообщение об ограничениях триальной версии
Сообщение об ограничениях триальной версии

Исполняемый файл написан на Visual Basic и ничем не упакован. Отправляем его в дизассемблер. Параллельно посмотрим, как программа регистрируется и каким образом реагирует на введенные левые данные.

Сообщение о неправильной регистрации
Сообщение о неправильной регистрации

Поиск в файле по строке "Invalid Serial Code" приводит нас вот к такой милой картинке:

Заблокированный серийный номер
Заблокированный серийный номер

Рядом со строкой сообщения находится нечто, очень похожее на серийный номер или его часть. Посмотрим в дизассемблере, где эта строка используется:
  1. .text:0064BB57             lea     edx, [ebp-80h]
  2. .text:0064BB5A             push    edx
  3. .text:0064BB5B             call    ds:rtcTrimVar
  4. .text:0064BB61             mov     dword ptr [ebp-0B8h], offset a8hrduog0wv8q96
  5. ; "8HRDUOG0WV8Q963"
  6. .text:0064BB6B             mov     dword ptr [ebp-0C0h], 8008h
  7. .text:0064BB75             lea     eax, [ebp-80h]
  8. .text:0064BB78             push    eax
  9. .text:0064BB79             lea     ecx, [ebp-0C0h]
  10. .text:0064BB7F             push    ecx
  11. ; Сравнение строк
  12. .text:0064BB80             call    ds:__vbaVarTstEq
  13. ; Сохранить результат сравнения
  14. .text:0064BB86             mov     [ebp-0E4h], ax
  15. .text:0064BB8D             lea     edx, [ebp-80h]
  16. .text:0064BB90             push    edx
  17. .text:0064BB91             lea     eax, [ebp-70h]
  18. .text:0064BB94             push    eax
  19. .text:0064BB95             push    2
  20. .text:0064BB97             call    ds:__vbaFreeVarList
  21. .text:0064BB9D             add     esp, 0Ch
  22. .text:0064BBA0             movsx   ecx, word ptr [ebp-0E4h]
  23. ; Проверить результат сравнения
  24. .text:0064BBA7             test    ecx, ecx
  25. .text:0064BBA9             jz      loc_64BD14
  26. ; Сообщение о неправильном серийнике
  27. .text:0064BBAF             mov     dword ptr [ebp-4], 9
  28. .text:0064BBB6             mov     dword ptr [ebp-98h], 80020004h
  29. .text:0064BBC0             mov     dword ptr [ebp-0A0h], 0Ah
  30. .text:0064BBCA             mov     dword ptr [ebp-88h], 80020004h
  31. .text:0064BBD4             mov     dword ptr [ebp-90h], 0Ah
  32. .text:0064BBDE             mov     dword ptr [ebp-0B8h], offset aInvaild
  33. ; "Invaild"
  34. .text:0064BBE8             mov     dword ptr [ebp-0C0h], 8
  35. .text:0064BBF2             lea     edx, [ebp-0C0h]
  36. .text:0064BBF8             lea     ecx, [ebp-80h]
  37. .text:0064BBFB             call    ds:__vbaVarDup
  38. .text:0064BC01             mov     dword ptr [ebp-0A8h], offset aInvaildSerialC
  39. ; "Invaild Serial Code."
  40. .text:0064BC0B             mov     dword ptr [ebp-0B0h], 8
  41. .text:0064BC15             lea     edx, [ebp-0B0h]
Проверяется введенный код и строка "8HRDUOG0WV8Q963", если они равны, то выводится сообщение о неправильной регистрации. Что это значит? Это значит, что перед нами заблокированный серийник в чистом виде. Если забить нулями строку серийника в исполняемом файле, то программу можно зарегистрировать с его помощью. Такой вариант обхода защиты с разблокировкой забаненного серийника вполне имеет место быть. Можно даже сделать универсальный патч-unblacklister.

Ладно, с патчем понятно. А как на счет алгоритма проверки правильности серийных номеров? По условному переходу перепрыгиваем вывод сообщения, попадаем на дальнейшие проверки. Они представляют из себя цикличный перебор всех символов введенного серийного номера. Каждый символ поочередно проверяется на равенство одному из четырех символов: "W", "D", "8", "6".
  1. .text:0064BD8F                 mov     dword ptr [ebp-4], 0Eh
  2. .text:0064BD96                 mov     dword ptr [ebp-68h], 1
  3. .text:0064BD9D                 mov     dword ptr [ebp-70h], 2
  4. .text:0064BDA4                 lea     ecx, [ebp-44h]
  5. .text:0064BDA7                 mov     [ebp-0A8h], ecx
  6. .text:0064BDAD                 mov     dword ptr [ebp-0B0h], 4008h
  7. .text:0064BDB7                 lea     edx, [ebp-70h]
  8. .text:0064BDBA                 push    edx
  9. .text:0064BDBB                 lea     eax, [ebp-30h]
  10. .text:0064BDBE                 push    eax
  11. .text:0064BDBF                 call    ds:__vbaI4Var
  12. .text:0064BDC5                 push    eax
  13. .text:0064BDC6                 lea     ecx, [ebp-0B0h]
  14. .text:0064BDCC                 push    ecx
  15. .text:0064BDCD                 lea     edx, [ebp-80h]
  16. .text:0064BDD0                 push    edx
  17. .text:0064BDD1                 call    ds:rtcMidCharVar
  18. .text:0064BDD7                 mov     dword ptr [ebp-0C8h], offset aW ; "W"
  19. .text:0064BDE1                 mov     dword ptr [ebp-0D0h], 8008h
  20. .text:0064BDEB                 lea     eax, [ebp-80h]
  21. .text:0064BDEE                 push    eax
  22. .text:0064BDEF                 lea     ecx, [ebp-0D0h]
  23. .text:0064BDF5                 push    ecx
  24. .text:0064BDF6                 call    ds:__vbaVarTstEq
  25. .text:0064BDFC                 mov     [ebp-0E4h], ax
  26. .text:0064BE03                 lea     edx, [ebp-80h]
  27. .text:0064BE06                 push    edx
  28. .text:0064BE07                 lea     eax, [ebp-70h]
  29. .text:0064BE0A                 push    eax
  30. .text:0064BE0B                 push    2
  31. .text:0064BE0D                 call    ds:__vbaFreeVarList
  32. .text:0064BE13                 add     esp, 0Ch
  33. .text:0064BE16                 movsx   ecx, word ptr [ebp-0E4h]
  34. .text:0064BE1D                 test    ecx, ecx
  35. .text:0064BE1F                 jz      short loc_64BE2E
  36. .text:0064BE21                 mov     dword ptr [ebp-4], 0Fh
  37. .text:0064BE28                 mov     word ptr [ebp-3Ch], 0FFFFh
Если все четыре совпадения найдены, то серийник считается правильным. Говоря проще, в серийнике должны быть символы "W", "D", "8" и "6", и это единственное условие. Между ними могут быть другие символы, на правильность это никак не влияет, так как они в проверках не участвуют.

Программа успешно зарегистрирована
Программа успешно зарегистрирована

Валидным серийником будет, например, бредятина типа "WOODSTOCK1968" или вовсе минимальная строка "WD68". Кейген вы теперь можете написать самостоятельно.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 1013 | Комментариев: 3

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
pawel97 (03.11.2016 в 09:33):
И всё равно софт ни о чём. Отечественный stdu viewer умеет много чего помимо pdf2jpg, меньше по размеру и к тому же бесплатен для некоммерческого использования.
Да и защита такая себе. Из так любимых ManHunter'ом картинкоинструментов есть JPEGMini поинтереснее (не сочтите за запрос, ломанный есть в сети).
ManHunter (30.10.2016 в 22:45):
Ну как вариант да, принимается.
Tony (30.10.2016 в 17:17):
Опция перевода PDF в JPG полезна тем, кто пользуется электронной книгой. Картинки быстро открываются, перелистываются, возможность быстрого масштабирования. А PDF нажмешь и ждешь, нажмешь и ждешь.

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2018
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.11 сек. / MySQL: 2 (0.0078 сек.) / Память: 5 Mb
Наверх