Blog. Just Blog

Исследование защиты программы Screen GIF

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

Программа Screen GIF предназначена для записи участка экрана в виде анимированного GIF-файла. Таких программ достаточно, в том числе и бесплатных, поэтому очень странно смотрится ценник в несколько десятков евро. Это при том, что Screen GIF делает примерно то же самое, что и бесплатные аналоги. Добро пожаловать на разделочный стол.

Первым делом забираем с офсайта дистрибутив, устанавливаем. Мда, размерчик для нехитрой утилиты, мягко говоря, великоват. Главный исполняемый файл ничем не упакован, отправляем его на дизассемблирование.

В меню программы есть пункт регистрации, но на ввод левых данных никакой реакции нет, окно регистрации просто закрывается. Надо другую зацепку, например, надпись "Unregistered version" в окне "О программе", которое открывается при старте. Поиском по файлу обнаружится юникодная строка:

Строка сообщения в файле
Строка сообщения в файле

Как всегда бывает в таких случаях, посмотрим на код в листинге, где эта строка используется, и выясним условия, при которых она появляется.
  1. .text:0062FA25                 call    sub_618CAC
  2. ; Проверить значение по указателю на указатель DWORD 0x006ECA14
  3. .text:0062FA2A                 mov     eax, off_6ECA14
  4. .text:0062FA2F                 cmp     dword ptr [eax], 1
  5. ; Если оно не равно 1, то программа не зарегистрирована
  6. .text:0062FA32                 jnz     short loc_62FA54
  7. .text:0062FA34                 lea     edx, [ebp+var_8]
  8. .text:0062FA37                 mov     eax, ds:off_629810
  9. .text:0062FA3C                 call    sub_629AA8
  10. .text:0062FA41                 mov     edx, [ebp+var_8]
  11. .text:0062FA44                 mov     eax, [ebx+390h]
  12. .text:0062FA4A                 call    sub_4A44D0
  13. .text:0062FA4F                 jmp     loc_62FADD
  14. .text:0062FA54 ; ------------------------------------------------------
  15. .text:0062FA54 loc_62FA54:
  16. .text:0062FA54                 lea     ecx, [ebp+var_28]
  17. ; "Unregistered version"
  18. .text:0062FA57                 mov     edx, offset aUnregisteredVe
Берется указатель на переменную, по этому адресу проверяется значение переменной. Если оно не равно 1, то программа не зарегистрирована. Разбираем матрешку:
  1. ; Указатель на переменную
  2. .data:006ECA14 off_6ECA14      dd offset dword_77431C
Переходим по адресу, на который ссылается указатель, затем по перекрестным ссылкам смотрим, где и как меняется значение переменной:

Перекрестные ссылки на переменную
Перекрестные ссылки на переменную

Нас интересует тот участок кода, где переменной присваивается значение 1. И, судя по адресации, присвоение другого значения находится там же недалеко. Так и есть:
  1. .itext:006DAE3D                 mov     eax, ds:off_629810
  2. .itext:006DAE42                 call    sub_629DB0
  3. .itext:006DAE47                 test    al, al
  4. .itext:006DAE49                 jz      short loc_6DAE57
  5. ; Программа зарегистрирована
  6. .itext:006DAE4B                 mov     ds:dword_77431C, 1
  7. .itext:006DAE55                 jmp     short locret_6DAE61
  8. .itext:006DAE57 ; -----------------------------------------------------
  9. .itext:006DAE57 loc_6DAE57:
  10. ; Программа не зарегистрирована
  11. .itext:006DAE57                 mov     ds:dword_77431C, 2
  12. .itext:006DAE61 locret_6DAE61:
  13. .itext:006DAE61                 retn
Никаких хитрых разветвлений алгоритма тут нет, достаточно в команде присвоения по адресу 006DAE57 просто поменять значение 2 на 1. В этом случае в переменную, отвечающую за статус регистрации, будет всегда записываться правильное значение. Сохраняем изменения, запускаем.

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

Окно "О программе" при старте программы и при завершении ее работы больше не появляется, пункт регистрации из меню исчез, на готовую анимацию не накладывается водяной знак, а в уже упомянутом окне "О программе" нам объявляется огромная благодарность за поддержку. Да было б за что, обращайтесь :) Цель достигнута, все ограничения сняты.

Поделиться ссылкой ВКонтакте
Просмотров: 1628 | Комментариев: 5

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

Комментарии

Отзывы посетителей сайта о статье
TestLog (30.03.2019 в 13:09):
Печалька - код чекается на сайте аффторов(
Прога на дельфях - начинающим в помощь IDR, все как на ладони.
ManHunter (28.03.2019 в 14:04):
Оперативненько, однако...
https://www.upload.ee/files/97...gif.zip.html
user (28.03.2019 в 13:51):
...забираем с офсайта дистрибутив... - уже потерли, дайте то же глянуть, пжл.)
user (24.03.2019 в 08:43):
По сути ничего сложного предлагаю по нопить это для самых ленивых
CPU Disasm
Address   Hex dump          Command                                  Comments
0062FA2F  |.  8338 01       CMP DWORD PTR DS:[EAX],1
0062FA32      90            NOP
0062FA33      90            NOP
0062FA34  |.  8D55 F8       LEA EDX,[EBP-8]
0062FA37  |.  A1 10986200   MOV EAX,DWORD PTR DS:[629810]
SHREEF (24.03.2019 в 01:03):
Ворпос. А пробовал отучить программу RAMCACHEIII WIN10 от win10 ибо в коде она может работать и с младшими версиями виндос ?!

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

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

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