Blog. Just Blog

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

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

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

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

Триальное окно
Триальное окно

При запуске программы появляется сплэш-окно, в котором отображается информация об оставшемся триальном периоде. Это же окно по совместительству является также окном "О программе". Поищем в файле строку из надписи о триальном сроке.

Строка в файле
Строка в файле

Обнаружится юникодная строка об оставшемся периоде и об истечении триала. Теперь идем в дизассемблер, чтобы найти место в коде, где эта строка используется. Ну и, конечно же, выяснить условия, при которых этот код выполняется. Обнаружится единственное вхождение.
  1. .text:015DB719                 pop     edx
  2. .text:015DB71A                 pop     ecx
  3. ; Вызвать функцию проверки
  4. .text:015DB71B                 call    sub_15D9230
  5. ; Сохранить ее результат в сухое прохладное место
  6. .text:015DB720                 mov     [esi], al
  7. ; Если результат не нулевой, то перепрыгнуть все проверки триальности
  8. .text:015DB722                 cmp     byte ptr [esi], 0
  9. .text:015DB725                 jnz     short loc_15DB789
  10. ; Дальше уже не интересно
  11. .text:015DB727                 mov     al, 1
  12. .text:015DB729                 call    sub_15DB3B8
  13. .text:015DB72E                 mov     ebx, eax
  14. .text:015DB730                 cmp     ebx, 3
  15. .text:015DB733                 jge     short loc_15DB743
  16. .text:015DB735                 call    sub_15DB568
  17. .text:015DB73A                 test    al, al
  18. .text:015DB73C                 jz      short loc_15DB743
  19. .text:015DB73E                 mov     ebx, 3
  20. .text:015DB743 loc_15DB743:
  21. .text:015DB743                 test    ebx, ebx
  22. .text:015DB745                 setl    byte ptr [edi]
  23. .text:015DB748                 cmp     byte ptr [edi], 0
  24. .text:015DB74B                 jz      short loc_15DB75C
  25. .text:015DB74D                 mov     eax, [ebp+var_24]
  26. .text:015DB750                 mov     edx, offset aTrialPeriodExp
  27. ; "Trial period expired."
  28. .text:015DB755                 call    sub_40C244
  29. .text:015DB75A                 jmp     short loc_15DB781
  30. .text:015DB75C ; ---------------------------------------
  31. .text:015DB75C loc_15DB75C:
  32. .text:015DB75C                 lea     eax, [ebp+var_30]
  33. .text:015DB75F                 push    eax
  34. .text:015DB760                 mov     [ebp+var_38], ebx
  35. .text:015DB763                 mov     [ebp+var_34], 0
  36. .text:015DB767                 lea     edx, [ebp+var_38]
  37. .text:015DB76A                 xor     ecx, ecx
  38. .text:015DB76C                 mov     eax, offset aTrialVersionDD
  39. ; "Trial version, %d days remaining."
  40. .text:015DB771                 call    sub_459F84
  41. .text:015DB776                 mov     edx, [ebp+var_30]
  42. .text:015DB779                 mov     eax, [ebp+var_24]
  43. .text:015DB77C                 call    sub_40C244
Вызывается функция проверки sub_15D9230, ее результат из регистра AL сохраняется куда-то в память, по всей видимости это и есть ячейка для хранения состояния регистрации. Если результат не равен нулю, то всякая обработка и проверка триальности даже не выполняется, условный переход ее пропускает.

Заменяем начало функции проверки по адресу 015D9230 на команды MOV AL,1 и RET 30h, чтобы восстановить стек при возврате. Сохраняем изменения, запускаем.

Сообщение о поврежденном файле
Сообщение о поврежденном файле

Хех, знакомое окошко. Такая ошибка рассматривалась на сайте уже не один раз, решение для нее такое же знакомое - откорректировать контрольную сумму в PE-заголовке файла.

Корректировка контрольной суммы
Корректировка контрольной суммы

На помощью приходит PEiD с плагином FixCRC. Сохраняем новое значение контрольной суммы, повторяем запуск. Теперь сообщений о поврежденном файле нет.

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

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

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

Комментарии

Отзывы посетителей сайта о статье
ManHunter (01.08.2024 в 22:52):
Да уж, так отымели, что осталось только жениться :)
pawel97 (28.07.2024 в 15:13):
Ну всё уже разобрали и запатчили по всякому, для полного счастья только файлика не хватает - SQLiteExpertPro32.ini:
[Settings]
Portable=1
Лестер Глючный (27.07.2024 в 10:41):
Да можно тупо "заклееный" (вылеченый) exe`шник (без исправления контрольной суммы) закинуть в Resource Hacker и выкинуть им практически все встроенные в него обложки (освободив почти 30 мб), а то они все тормознутые (аж видны "рамки" при переключении вкладок, которые сразу же перерисовываются), и тупо заменить исполняемый файл. Но если выкинуть ещё и языки, то при запуске программы вылезет bugreport с подробным описанием :)
voffka (27.07.2024 в 00:16):
Или патчим проверку чексуммы
offset B89E4 01->00
user (26.07.2024 в 01:32):
Но по итогу в данном конкретном случае мудрить с пересчётами чексуммы не нужно вообще, достаточно её просто обнулить, и всё будет работать.
Таким образом окончательно кряк-файл таков:

;;------------------------------>8
SQLiteExpert 5.5.16.627

Unlimited trial
SQLiteExpertPro32.exe   
.015D8D2D: 0F 31
.015D8D2E: B6 C0
.015D8D2F: 45 B0
.015D8D30: E3 01

PE CheckSum must be fixed (or zeroed)
SQLiteExpertPro32.exe   
158: ? 00
159: ? 00
15A: ? 00
15B: ? 00
;;-------------------------------->8
user (26.07.2024 в 00:45):
Только та PEKS не апдэйтит сумму автоматически,
а только подсчитывает её, а апдейтит при задании в hex виде в командной строке ардсчитанного значения.
Потому и оказалась негодной для автоматической работы
user (26.07.2024 в 00:24):
Мда..
Делал нЕкогда такую утилитку для DOS, она вполне работает,
но это из тех случаев, когда программа делалась ну очень на скорую руку
и потому чтение файла в ней жутко неоптимальное.
На рассматриваемом файле (70+ Мб) программка можно сказать повисает.
Но нужнен был автоматически работающий из командной строки вариант,
и он себя оправдывал, на небольших файлах.
Потом всё собирался сделать WIN32 вариант, где учесть все косяки,
но так руки и не дошли.
Называется программка PE_FIX.COM
Это здесь (архив crc32_pe_fix) --
http://old-dos.ru/index.php?pa...show&id=3412

..кстати, там же есть ссылка на готовую WIN32 тулзу для этого самого - peeks
ManHunter (25.07.2024 в 23:38):
user, да ровно по той же причине, почему и сам HiEW, и eXeScope, и всякие другие утилиты. Дело привычки. Когда уже рука заточена под какие-то удобные для нее действия. Можно было бы даже нарисовать на FASM какую-нибудь крошечную софтинку на 20 строчек кода, которая будет фиксить CRC в заголовке, но вот привык к PEiD + FixCRC и ничего с этим сделать не могу.
user (25.07.2024 в 23:31):
А почему плагин PEID  FixCRC, eсли  это делает Hiew?
user (24.07.2024 в 18:06):
На всякий случай качнул дистрибутив пока ещё не пофиксили ))) Спасибо! Инструмент судя по всему очень толковый.
ManHunter (22.07.2024 в 21:38):
Это абсолютно нормально, что есть несколько вариантов патча.
Vnv (22.07.2024 в 19:03):
Упс, в оригинальном патче тоже нет подпункта регистрации, недосмотрел.
Vnv (22.07.2024 в 18:55):
А если пропатчить функцию по адресу 015D8334, то результат такой-же + в выпадающем меню "Help" пропадает подпункт регистрации (а может и еще что-то пропадает/появляется - не смотрел).
Я пропатчил тут:
015D8D2D 0F 31
015D8D2E B6 C0
015D8D2F 45 B0
015D8D30 E3 01
ну и конечно - правка чексуммы.

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

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

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