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

Скриншот программы Secure Eraser
Программа Secure Eraser от компании ASCOMP предназначена для качественного и безопасного удаления информации с компьютера. Это могут быть временные файлы, данные браузеров, ненужные системные файлы, а также определенные пользователем данные и даже целые жесткие диски. Удаление выполняется с помощью многократной перезаписи информации по промышленным алгоритмам и военным стандартам. Программа вроде как бесплатна для личного использования, но вот "информационные окна" (по терминологии авторов) реально напрягают.
Забираем с офсайта дистрибутив последней версии, устанавливаем, смотрим. Для бесплатного использования требуется раскрыть свою почту и имя. Да ну нафиг, перебьются.

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

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

Сохраняем проект
Поиск строки в файлах проекта выводит нас на здоровенный файл "_Unit140.pas", в котором есть такие строки:
Code (Assembler) : Убрать нумерацию
- 0084D0FD lea edx,[ebp-9C]
- 0084D103 call LowerCase
- 0084D108 mov eax,dword ptr [ebp-9C]
- 0084D10E mov edx,84D898;'professional edition'
- ; Сравнить строки
- 0084D113 call @UStrEqual
- 0084D118 jne 0084D140
- ; Установить флаг регистрации
- 0084D11A mov dword ptr [ebx+0A0C],1;TFormMain.ProgramMode:Integer
- ; Скрыть триальные строки в интерфейсе
- 0084D124 mov eax,dword ptr [ebx+5EC];TFormMain.LabelPLUS:TLabel
- 0084D12A xor edx,edx
- 0084D12C call TControl.SetVisible
- 0084D131 mov eax,dword ptr [ebx+544];TFormMain.LabelPrivate:TLabel
- 0084D137 xor edx,edx
- 0084D139 call TControl.SetVisible
- 0084D13E jmp 0084D173
- ; Сбросить флаг регистрации
- 0084D140 xor eax,eax
- 0084D142 mov dword ptr [ebx+0A0C],eax;TFormMain.ProgramMode:Integer
- ; Отобразить триальные строки в интерфейсе
- 0084D148 mov edx,dword ptr [ebx+0A94];TFormMain.LangStrings::1
- 0084D14E mov eax,dword ptr [ebx+5EC];TFormMain.LabelPLUS:TLabel
- 0084D154 call TControl.SetText
- 0084D159 mov eax,dword ptr [ebx+5EC];TFormMain.LabelPLUS:TLabel
- 0084D15F mov dl,1
- 0084D161 call TControl.SetVisible
- 0084D166 mov eax,dword ptr [ebx+544];TFormMain.LabelPrivate:TLabel
- 0084D16C mov dl,1

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

Корректировка контрольной суммы
Сделать это также можно разными способами, я воспользуюсь PEiD с плагином FixCRC.

Программа успешно "зарегистрирована"
Запускаем программу, все работает. Никаких сообщений о битом файле, никаких окон при запуске и генерации отчета, никаких посторонних надписей в главном окне. Цель достигнута.
Просмотров: 295 | Комментариев: 9
Метки: исследование защиты, безопасность

Комментарии
Отзывы посетителей сайта о статье

ManHunter
(12.11.2023 в 08:42):
А фаерволы для чего придуманы? То, что изначально не заточено для работы с интернетом, там вообще появляться не должно. И без разницы, платное или бесплатное.

Илья
(12.11.2023 в 01:18):
Приятная программа, чувствуется немецкое качество и чёткость.
Скорее всего вы не выпускали программу в интернет. Если выпустить, то будет ещё одна проблема - появляется не пропадающее окно, в котором просят ввести ClientID. Я решил проблему просто: испортил все адреса (4 шт.), содержащие www.ascomp.de/api от греха подальше.
Скорее всего вы не выпускали программу в интернет. Если выпустить, то будет ещё одна проблема - появляется не пропадающее окно, в котором просят ввести ClientID. Я решил проблему просто: испортил все адреса (4 шт.), содержащие www.ascomp.de/api от греха подальше.

Noobie
(11.11.2023 в 16:36):
Весьма признателен за помощь, все скачал, нашел искомое место, буду разбираться.

ManHunter
(11.11.2023 в 13:50):
Noobie, вот целая коллекция подобных софтин: https://www.manhunter.ru/under..._faylah.html
Но они вряд ли помогут, если навскидку ничего из очевидного не найдено, значит автор все-таки заморочился на каком-то кастомном решении. А тут может быть что угодно.
Но они вряд ли помогут, если навскидку ничего из очевидного не найдено, значит автор все-таки заморочился на каком-то кастомном решении. А тут может быть что угодно.

Noobie
(11.11.2023 в 09:27):
Напомните мне, пожалуйста, название утилиты, которая позволяет определить всякого рода крипту и прочие заморочки в PE файлах. Точно была на компе, но начисто забыл имя, поиски дали только x3chun's Crypto Searcher [For Public Version], но вроде это не та. Гугление тоже не помогло. Если таковой в хозяйстве нет, то каким образом в дебаггере определить где сидит проверка чексуммы экзешника? Симптомы такие: если патчить хотя бы один байт, софт внешне никак не реагирует, но перестает работать как положено. Разумеется, лодырь помогает, но хотелось бы докопаться до сути :-)
P.S. Правка в PE заголовке не помогает, проверка более хитрая.
P.S. Правка в PE заголовке не помогает, проверка более хитрая.

Илья
(09.11.2023 в 17:18):
Спасибо за ответ. Так и не смог найти ничего подобного в оригинальном файле. Сделал лоадер (благодаря вашей статье про патчеры и лоадеры), где пропатчил все переходы в памяти, связанные с триалом. Цель достигнута.
Подозреваю, что игра была всё-таки частично упакована. Т.к. вылет происходит на том адресе, которого изначально нет, и который появляется уже при запуске программы (например в отладчике). Если интересно - игра MaxGammon v1.05.
Подозреваю, что игра была всё-таки частично упакована. Т.к. вылет происходит на том адресе, которого изначально нет, и который появляется уже при запуске программы (например в отладчике). Если интересно - игра MaxGammon v1.05.

ManHunter
(08.11.2023 в 21:20):
Проверка по сертификату WinVerifyTrust или MsiGetFileSignatureInformation, через MapFileAndCheckSum, через штатную криптографию, про кастомные подсчеты вообще можно сколько угодно говорить.
Реакцию тоже можно накрутить как угодно, например, пара переходов с использованием контрольной суммы в качестве целевого адреса. В нетронутом файле все идет куда надо, в патченном гарантированно перейдет не туда.
Реакцию тоже можно накрутить как угодно, например, пара переходов с использованием контрольной суммы в качестве целевого адреса. В нетронутом файле все идет куда надо, в патченном гарантированно перейдет не туда.

Илья
(08.11.2023 в 21:00):
А какие ещё бывают проверки целостности?
Симптомы: после пропатчинга хоть одного байта в любом месте программа загружается, но в течении 20 секунд (время может варьироваться) вылетает по исключению (обращение в недопустимую область памяти)
Симптомы: после пропатчинга хоть одного байта в любом месте программа загружается, но в течении 20 секунд (время может варьироваться) вылетает по исключению (обращение в недопустимую область памяти)

Добавить комментарий
Заполните форму для добавления комментария

p.s. Для лазаруса бы такой idr...