Blog. Just Blog

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

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

Программа TextConverter предназначена для пакетной обработки текстовых файлов и документов. Возможности программы весьма обширны: замена текста, объединение файлов, изменение кодировки и переносов строк, поддержка регулярных выражений и еще много чего интересного. Бесплатный базовый вариант ограничен по функционалу, а за профессиональную редакцию надо выложить деньги, что, конечно же, неприемлемо.

Забираем с офсайта дистрибутив профессиональной версии, распаковываем куда-нибудь единственный исполняемый файл. Программа не требует установки, что очень хорошо. Зато при запуске сразу же требует активацию, без нее работать не хочет, что очень плохо. Зато есть оффлайновая активация, что очень хорошо. Но активация, по всей видимости, привязана к компьютеру, что очень плохо. Короче, отправляем файл на разбор в дизассемблер.

Для начала надо сделать так, чтобы программа принимала как минимум любой ключ активации, чтобы продвинуться дальше. Все сообщения о неправильном ключе появляются после вот этого блока кода:
  1. .text:0053FB47                 call    sub_40FABC
  2. .text:0053FB4C                 mov     edx, [ebp+var_18]
  3. .text:0053FB4F                 lea     eax, [ebp+var_4]
  4. ; Вызвать функцию проверки
  5. .text:0053FB52                 call    sub_4050A4
  6. ; Результат проверки
  7. .text:0053FB57                 mov     edx, [ebp+var_4]
  8. .text:0053FB5A                 mov     eax, edx
  9. .text:0053FB5C                 test    eax, eax
  10. .text:0053FB5E                 jz      short loc_53FB65
  11. .text:0053FB60                 sub     eax, 4
  12. .text:0053FB63                 mov     eax, [eax]
  13. .text:0053FB65 loc_53FB65:
  14. .text:0053FB65                 cmp     eax, 190h
  15. ; Проверка не пройдена
  16. .text:0053FB6A                 jnz     short loc_53FB70
  17. ; Проверка завершилась успешно, присвоить AL=1
  18. .text:0053FB6C                 mov     al, 1
  19. .text:0053FB6E                 jmp     short loc_53FB83
  20. .text:0053FB70 ; ---------------------------------------
  21. .text:0053FB70 loc_53FB70:
  22. .text:0053FB70                 mov     eax, edx
  23. .text:0053FB72                 test    eax, eax
  24. .text:0053FB74                 jz      short loc_53FB7B
  25. .text:0053FB76                 sub     eax, 4
  26. .text:0053FB79                 mov     eax, [eax]
  27. .text:0053FB7B loc_53FB7B:
  28. .text:0053FB7B                 cmp     eax, 1F4h
  29. .text:0053FB80                 setz    al
  30. .text:0053FB83 loc_53FB83:
  31. ; Если AL=0, то вывести сообщение о неправильном ключе активации
  32. .text:0053FB83                 test    al, al
  33. .text:0053FB85                 jz      loc_53FD7A
  34. ; Сохранить ключ в файл
  35. .text:0053FB8B                 lea     edx, [ebp+var_28]
  36. .text:0053FB8E                 xor     eax, eax
  37. .text:0053FB90                 call    sub_4031C8
  38. .text:0053FB95                 mov     edx, [ebp+var_28]
Если программа принимает ключ активации, то он будет записан в файл TKPRO.KEY. Файл может быть скрытым, если проставлена соответствующая галочка. Но этого недостаточно, программа просит перезапуска, чтобы проверить корректность сохраненного ключа активации. Переходим ко второй части нашего балета. Название ключа мы знаем, надо найти место в программе, где этот ключ обрабатывается и подтверждается его корректность.
  1. .itext:005600A4                 lea     edx, [ebp-14h]
  2. .itext:005600A7                 call    sub_48205C
  3. .itext:005600AC                 mov     edx, [ebp-14h]
  4. .itext:005600AF                 mov     eax, offset dword_56BD3C
  5. ; Обработать файл с ключом
  6. .itext:005600B4                 mov     ecx, offset aTkpro_key ; "TKPRO.KEY"
  7. .itext:005600B9                 call    sub_405A80
  8. .itext:005600BE                 mov     eax, ds:dword_56BD3C
  9. ; Проверить наличие файла
  10. .itext:005600C3                 call    sub_482214
  11. .itext:005600C8                 test    al, al
  12. ; Файл не найден
  13. .itext:005600CA                 jz      loc_56023C
  14. .itext:005600D0                 mov     eax, off_567E90
  15. .itext:005600D5                 mov     eax, [eax]
  16. .itext:005600D7                 mov     edx, ds:dword_56BD3C
  17. ; Проверить корректность сохраненного ключа активации
  18. .itext:005600DD                 call    sub_541E6C
  19. .itext:005600E2                 mov     edx, off_567AE4
  20. .itext:005600E8                 mov     [edx], eax
  21. .itext:005600EA                 mov     eax, off_567AE4
  22. ; В зависимости от результатов проверки установить тип лицензии
  23. .itext:005600EF                 cmp     dword ptr [eax], 0
  24. .itext:005600F2                 jle     loc_560232
  25. .itext:005600F8                 mov     eax, off_567AE4
  26. .itext:005600FD                 cmp     dword ptr [eax], 2
  27. .itext:00560100                 jz      short loc_56010C
  28. .itext:00560102                 mov     eax, off_567AE4
  29. .itext:00560107                 cmp     dword ptr [eax], 9
  30. .itext:0056010A                 jnz     short loc_560114
  31. .itext:0056010C loc_56010C:
  32. .itext:0056010C                 mov     eax, off_567B68
  33. .itext:00560111                 mov     byte ptr [eax], 1
  34. .itext:00560114 loc_560114:
  35. .itext:00560114                 mov     eax, off_567AE4
  36. .itext:00560119                 cmp     dword ptr [eax], 3
  37. .itext:0056011C                 jz      short loc_560128
  38. .itext:0056011E                 mov     eax, off_567AE4
  39. .itext:00560123                 cmp     dword ptr [eax], 9
  40. .itext:00560126                 jnz     short loc_560130
Сперва выполняется проверка наличия файла TKPRO.KEY, затем загружается его содержимое и выполняется следующая проверка, на основании которой принимается решение о типе профессиональной лицензии.
  1. .itext:00560130                 mov     eax, off_567AE4
  2. .itext:00560135                 cmp     dword ptr [eax], 1
  3. .itext:00560138                 jnz     short loc_560149
  4. .itext:0056013A                 mov     eax, offset dword_56BD3C
  5. .itext:0056013F                 mov     edx, offset aPro ; "Pro"
  6. .itext:00560144                 call    sub_405864
  7. .itext:00560149 loc_560149:
  8. .itext:00560149                 mov     eax, off_567AE4
  9. .itext:0056014E                 cmp     dword ptr [eax], 2
  10. .itext:00560151                 jnz     short loc_560162
  11. .itext:00560153                 mov     eax, offset dword_56BD3C
  12. .itext:00560158                 mov     edx, offset aCl ; "CL"
  13. .itext:0056015D                 call    sub_405864
  14. .itext:00560162 loc_560162:
  15. .itext:00560162                 mov     eax, off_567AE4
  16. .itext:00560167                 cmp     dword ptr [eax], 3
  17. .itext:0056016A                 jnz     short loc_56017B
  18. .itext:0056016C                 mov     eax, offset dword_56BD3C
  19. .itext:00560171                 mov     edx, offset aCsv_1 ; "CSV"
  20. .itext:00560176                 call    sub_405864
  21. .itext:0056017B loc_56017B:
  22. .itext:0056017B                 mov     eax, off_567AE4
  23. .itext:00560180                 cmp     dword ptr [eax], 9
  24. .itext:00560183                 jnz     short loc_560194
  25. .itext:00560185                 mov     eax, offset dword_56BD3C
  26. .itext:0056018A                 mov     edx, offset aFull ; "Full"
  27. .itext:0056018F                 call    sub_405864
Значения лицензии такие: 1 - Pro, 2 - CL, 3 - CSV и 9 - Full. Меньше чем на Full я не согласен, поэтому открываем функцию проверки лицензии по адресу 00541E6C и записываем в ее начало пару команд MOV EAX,9 и RET. Сохраняем изменения. Теперь программа запускается при любом содержимом ключевого файла, в заголовке окна красуется надпись "Full". А можно ли сделать так, чтобы и ключ был не нужен? Да, для этого надо забить NOP'ами условный переход по адресу 005600CA, который отвечает за наличие ключевого файла.

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

Сохраняем изменения, удаляем ключевой файл, запускаем программу. Все работает, цель достигнута. Подобным способом отучаются от жадности и другие программы этого разработчика.

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

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

Комментарии

Отзывы посетителей сайта о статье
user (26.02.2024 в 16:38):
.5421B4 ,а не .541E6C

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

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

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