Исследование защиты программы SQLite Expert
Скриншот программы SQLite Expert
SQLite Expert - мощный инструмент для разработчиков и администраторов баз данных SQLite. С его помощью можно составлять запросы любой сложности, импортировать и экспортировать данные, редактировать структуру базы и ее содержимое, а также выполнять много-много других операций. Вся мощь SQLite Expert раскрывается в профессиональной версии приложения, но закрывается через 40 дней при отсутствии регистрации.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Весьма пухленький главный исполняемый файл ничем не упакован, отправляем его в дизассемблер и уходим пить кофе. Процесс дизассемблирования займет некоторое время даже на мощных машинах.
Триальное окно
При запуске программы появляется сплэш-окно, в котором отображается информация об оставшемся триальном периоде. Это же окно по совместительству является также окном "О программе". Поищем в файле строку из надписи о триальном сроке.
Строка в файле
Обнаружится юникодная строка об оставшемся периоде и об истечении триала. Теперь идем в дизассемблер, чтобы найти место в коде, где эта строка используется. Ну и, конечно же, выяснить условия, при которых этот код выполняется. Обнаружится единственное вхождение.
Code (Assembler) : Убрать нумерацию
- .text:015DB719 pop edx
- .text:015DB71A pop ecx
- ; Вызвать функцию проверки
- .text:015DB71B call sub_15D9230
- ; Сохранить ее результат в сухое прохладное место
- .text:015DB720 mov [esi], al
- ; Если результат не нулевой, то перепрыгнуть все проверки триальности
- .text:015DB722 cmp byte ptr [esi], 0
- .text:015DB725 jnz short loc_15DB789
- ; Дальше уже не интересно
- .text:015DB727 mov al, 1
- .text:015DB729 call sub_15DB3B8
- .text:015DB72E mov ebx, eax
- .text:015DB730 cmp ebx, 3
- .text:015DB733 jge short loc_15DB743
- .text:015DB735 call sub_15DB568
- .text:015DB73A test al, al
- .text:015DB73C jz short loc_15DB743
- .text:015DB73E mov ebx, 3
- .text:015DB743 loc_15DB743:
- .text:015DB743 test ebx, ebx
- .text:015DB745 setl byte ptr [edi]
- .text:015DB748 cmp byte ptr [edi], 0
- .text:015DB74B jz short loc_15DB75C
- .text:015DB74D mov eax, [ebp+var_24]
- .text:015DB750 mov edx, offset aTrialPeriodExp
- ; "Trial period expired."
- .text:015DB755 call sub_40C244
- .text:015DB75A jmp short loc_15DB781
- .text:015DB75C ; ---------------------------------------
- .text:015DB75C loc_15DB75C:
- .text:015DB75C lea eax, [ebp+var_30]
- .text:015DB75F push eax
- .text:015DB760 mov [ebp+var_38], ebx
- .text:015DB763 mov [ebp+var_34], 0
- .text:015DB767 lea edx, [ebp+var_38]
- .text:015DB76A xor ecx, ecx
- .text:015DB76C mov eax, offset aTrialVersionDD
- ; "Trial version, %d days remaining."
- .text:015DB771 call sub_459F84
- .text:015DB776 mov edx, [ebp+var_30]
- .text:015DB779 mov eax, [ebp+var_24]
- .text:015DB77C call sub_40C244
Заменяем начало функции проверки по адресу 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
[Settings]
Portable=1
Лестер Глючный
(27.07.2024 в 10:41):
Да можно тупо "заклееный" (вылеченый) exe`шник (без исправления контрольной суммы) закинуть в Resource Hacker и выкинуть им практически все встроенные в него обложки (освободив почти 30 мб), а то они все тормознутые (аж видны "рамки" при переключении вкладок, которые сразу же перерисовываются), и тупо заменить исполняемый файл. Но если выкинуть ещё и языки, то при запуске программы вылезет bugreport с подробным описанием :)
voffka
(27.07.2024 в 00:16):
Или патчим проверку чексуммы
offset B89E4 01->00
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
Таким образом окончательно кряк-файл таков:
;;------------------------------>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 виде в командной строке ардсчитанного значения.
Потому и оказалась негодной для автоматической работы
а только подсчитывает её, а апдейтит при задании в 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
Делал нЕкогда такую утилитку для 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
ну и конечно - правка чексуммы.
Я пропатчил тут:
015D8D2D 0F 31
015D8D2E B6 C0
015D8D2F 45 B0
015D8D30 E3 01
ну и конечно - правка чексуммы.
Добавить комментарий
Заполните форму для добавления комментария