Исследование защиты программы HTML Compiler
Скриншот программы HTML Compiler
Программа DecSoft HTML Compiler предназначена для создания стационарных исполняемых приложений из HTML-страниц. Это могут быть презентации, электронные книги, интерактивные справочники, браузерные игры и даже целые сайты. При этом на диск ничего не извлекается, все колдунство выполняется в памяти на современном движке Chromium. Размер готового файла, конечно, получается просто чудовищный, но кого это в наше время волнует. Если авторы программы не обманывают, то ограничений по времени и/или функционалу нет, а покупать лицензию надо только если программа понравится. Очень разумный подход. А как быть, если и программа понравилась, и платить не хочется?
Забираем с офсайта жирненький дистрибутив, устанавливаем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Пока тот работает, проверим функционал программы. Я немного потестировал, вроде бы действительно ограничений нет. Но все равно присутствует надпись "Unregistered" в заголовке программы и триальное окно с напоминанием, которое появляется при запуске.
Триальное окно
Поиском по юникодной строке "Unregistered" обнаруживаем следующие строки. Как видим, тут есть оба варианта. Осталось выяснить, при каких условиях они появляются.
Строки в файле
По перекрестным ссылкам в дизассемблере выходим на следующий код. Тут как раз меняется надпись в заголовке в зависимости от статуса программы.
Code (Assembler) : Убрать нумерацию
- .text:00A6EED0 push ebp
- .text:00A6EED1 push offset loc_A6EFC2
- .text:00A6EED6 push dword ptr fs:[eax]
- .text:00A6EED9 mov fs:[eax], esp
- .text:00A6EEDC mov eax, ds:off_858874
- ; Вызывать функцию проверки
- .text:00A6EEE1 call sub_858E24
- ; Если вернулось AL=0, то установить в заголовок "Unregistered"
- .text:00A6EEE6 test al, al
- .text:00A6EEE8 jz short loc_A6EF43
- .text:00A6EEEA mov eax, [ebx+404h]
- .text:00A6EEF0 xor edx, edx
- .text:00A6EEF2 mov ecx, [eax]
- .text:00A6EEF4 call dword ptr [ecx+8Ch]
- .text:00A6EEFA mov eax, off_AC37C0
- .text:00A6EEFF mov dword ptr [eax], 1
- .text:00A6EF05 lea eax, [ebp+var_4]
- .text:00A6EF08 push eax
- .text:00A6EF09 lea ecx, [ebp+var_8]
- .text:00A6EF0C mov eax, [ebx+400h]
- .text:00A6EF12 mov edx, offset aDecsoftHtmlC_0
- ; "DecSoft HTML Compiler %s"
- .text:00A6EF17 call sub_82C108
- .text:00A6EF1C mov eax, [ebp+var_8]
- .text:00A6EF1F push eax
- .text:00A6EF20 mov eax, offset a2022_10_4 ; "2022.10"
- .text:00A6EF25 mov [ebp+var_10], eax
- .text:00A6EF28 mov [ebp+var_C], 11h
- .text:00A6EF2C lea edx, [ebp+var_10]
- .text:00A6EF2F xor ecx, ecx
- .text:00A6EF31 pop eax
- .text:00A6EF32 call sub_42AE3C
- .text:00A6EF37 mov edx, [ebp+var_4]
- .text:00A6EF3A mov eax, ebx
- .text:00A6EF3C call sub_5855C4
- .text:00A6EF41 jmp short loc_A6EF9A
- .text:00A6EF43 ; ----------------------------------------
- .text:00A6EF43 loc_A6EF43:
- .text:00A6EF43 mov eax, [ebx+404h]
- .text:00A6EF49 mov dl, 1
- .text:00A6EF4B mov ecx, [eax]
- .text:00A6EF4D call dword ptr [ecx+8Ch]
- .text:00A6EF53 mov eax, off_AC37C0
- .text:00A6EF58 mov dword ptr [eax], 2
- .text:00A6EF5E lea eax, [ebp+var_14]
- .text:00A6EF61 push eax
- .text:00A6EF62 lea ecx, [ebp+var_18]
- .text:00A6EF65 mov eax, [ebx+400h]
- .text:00A6EF6B mov edx, offset aUnregisteredDe
- ; "Unregistered DecSoft HTML Compiler %s"
- .text:00A6EF70 call sub_82C108
- .text:00A6EF75 mov eax, [ebp+var_18]
- .text:00A6EF78 push eax
- .text:00A6EF79 mov eax, offset a2022_10_4 ; "2022.10"
- .text:00A6EF7E mov [ebp+var_10], eax
- .text:00A6EF81 mov [ebp+var_C], 11h
- .text:00A6EF85 lea edx, [ebp+var_10]
- .text:00A6EF88 xor ecx, ecx
Окно "О программе"
Если все-таки хотите видеть там свои регистрационные данные, то есть два пути: простой и сложный. При простом способе можно зайти в папку с установленной программой, открыть файл \About\en-US\index.html в любом блокнотике и отредактировать его содержимое на свое усмотрение:
Редактируем окно "О программе"
Теперь сложный путь. Откатываем все изменения в исполняемом файле, запускаем и пробуем зарегистрировать программу какой-нибудь левотой.
Окно регистрации
Как видим, кнопка ввода остается неактивной, то есть корректность введенных регистрационных данных проверяется непосредственно в процессе ввода. Нечто подобное у нас было не так давно. Как и предыдущем примере, эта программа написана на Дельфи, значит в анализе обработчиков нам поможет все тот же Interactive Delphi Reconstructor. Отправляем исполняемый файл на декомпиляцию. Придется подождать, файл большой. Когда процесс завершится, открываем в списке форм элемент TRegisterForm и переключаем его на режим просмотра формы и обработчиков. Нас интересует обработчик CheckLicenseActionUpdate, который забинден на изменение содержимого полей ввода.
Поиск скобок в регистрационном имени
По названиям методов и функций все становится ясно. Берется регистрационное имя, в нем последовательно проверяется наличие символов "(" и ")", если оба этих символа есть, то кнопка ввода активируется. Запускаем программу, проверяем регистрацию, убеждаемся, что это действительно так. Теперь посмотрим второй обработчик CheckLicenseActionExecute, который срабатывает при нажатии на кнопку ввода.
Проверка регистрации
Интересное название отмеченной функции явно намекает, что проверка регистрационных данных выполняется онлайн. Запускаем не модифицированную программу под отладчиком, ставим точку останова по адресу 00A62E64, отпускаем программу на выполнение и повторяем регистрацию с левыми данными, но правильного формата, то есть со скобочками в имени. Когда точка останова сработает, надо забить в отладчике NOP'ами все условные переходы в этой функции (00A62EAF, 00A62EE1 и 00A62F14), а затем пройти в пошаговом режиме до адреса 00A62F3F, по которому выполняется сохранение регистрационных данных. Можно обойтись и без патча, просто своевременно подменяя при трассировке значение флага ZF для подавления перехода. После этого в папке {USER}\Documents\DecSoft\HtmlCompiler\License появится файл license с зашифрованными регистрационными данными. Закрываем отладчик. Но теперь появилась другая проблема, ситуацию с полным отсутствием лицензии мы пропатчили в первой части статьи, а вот при ее наличии за корректность отвечает упомянутая серверная проверка. Открываем файл на редактирование и впечатываем в начало функции проверки по адресу 00A620A4 пару команд MOV EAX,1 и RET. Таким образом у нас есть файл лицензии и пропатченный в двух местах исполняемый файл.
Программа успешно "зарегистрирована"
Сохраняем окончательные изменения, запускаем, проверяем. Никаких триальных признаков нет, в окне "О программе" красуется введенное регистрационное имя. Вот теперь можно считать, что цель полностью достигнута.
Просмотров: 1327 | Комментариев: 8
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Grey
(06.09.2022 в 10:39):
ManHunter, я наивно полагал, что в моникер достаточно гуид другого движка вставить...)
ManHunter
(04.09.2022 в 02:02):
Grey, на офсайте https://cef-builds.spotifycdn....ml#windows32 демка на движке хромиума с dll размером в полторы сотни мегов. Вот тут документация и все остальное https://bitbucket.org/chromium.../src/master/ , если есть желание поковыряться. Мне такое счастье нафиг не уперлось.
ManHunter
(02.09.2022 в 10:59):
Я ж просто не знаю, как там все реализовано. Если все сводится к одной dll и парочке api, то конечно будет статья, а если там для вхождения надо неделю курить мануалы и потом месяц жить в отладчике, то нет, нафиг.
Grey
(02.09.2022 в 10:56):
ManHunter, спасибо, с годами ты становишься добрее))
Про "если - может быть" тоже увидел...
Про "если - может быть" тоже увидел...
ManHunter
(02.09.2022 в 10:46):
Если найду толковое описание по хромиуму, то посмотрю, может быть что-нибудь и напишу.
Grey
(02.09.2022 в 10:31):
ManHunter, наилучший вариант HTML в exe изложен в твоем блоге (диалоговые окна ассемблере). Там вроде движок IE.
Может быть наступило время выпустить версию 2 этой статьи, где прикручен хромиум или фаерфокс?
Может быть наступило время выпустить версию 2 этой статьи, где прикручен хромиум или фаерфокс?
ManHunter
(23.08.2022 в 10:31):
Так эту тоже с некоторой натяжкой можно назвать бесплатной. И приложения HTA, насколько я с ними работал и помню, используют только движок IE.
0101
(23.08.2022 в 08:25):
В состав Vbsedit входит прога htaedit.exe, которая может компилить HTML в exe. Прога бесплатная, весит 1,5Мб. Может, её будет достаточно.
https://drive.google.com/file/...?usp=sharing
https://drive.google.com/file/...?usp=sharing
Добавить комментарий
Заполните форму для добавления комментария