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

http://s019.radikal.ru/i608/1705/7e/520bd87aa431.jpg
Скриншот программы WinToFlash

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

Попробуем привести к нормальному бою самую максимальную Business-версию. Забираем с офсайта дистрибутив, устанавливаем, запускаем. Первоначальное предложение активировать просто игнорируем, при следующем старте программа запускается уже с главного окна. Признаков незарегистрированной программы предостаточно: надпись в заголовке окна, сообщение об отсутствующем файле лицензии в окне "О программе", а главное – ограничение по функционалу. Любая попытка создать загрузочную флешку однозначно заканчивается требованием зарегистрироваться.

http://i013.radikal.ru/1705/a9/a241d3964c7a.png
Сообщение незарегистрированной программы

Главный исполняемый файл ничем не упакован, отправляем его в дизассемблер. Поиск точек отсчета начнем с текста в окне "О программе".

http://s018.radikal.ru/i519/1705/3a/38b041457ca9.png
Строка в файле

Это не совсем сообщение, а индекс, который используется для загрузки строки в мультиязычном интерфейсе. Ну ничего, посмотрим, как и где он используется.

Цитата:

.text:00203875 lea eax, [ebp+var_C]
.text:00203878 push eax
.text:00203879 call AboutDialogDataUpdate
.text:0020387E lea eax, [ebp+var_4]
.text:00203881 xor edx, edx
.text:00203883 call sub_16C9C
; Указатель на блок настроек
.text:00203888 mov eax, off_237D4C
.text:0020388D mov eax, [eax]
; Проверить байт регистрации
.text:0020388F cmp byte ptr [eax+51h], 0
; Программа не зарегистрирована
.text:00203893 jz loc_203B3F
.text:00203899 mov eax, off_237D4C
.text:0020389E mov eax, [eax]
.text:002038A0 cmp byte ptr [eax+78h], 0
.text:002038A4 jnz loc_203995
.text:002038AA lea eax, [ebp+var_8]



.text:00203B3F loc_203B3F:
.text:00203B3F lea eax, [ebp+var_4]
.text:00203B42 push eax
.text:00203B43 mov eax, [ebx]
.text:00203B45 mov ecx, offset aAboutLicenseNo
; "About – License – No valid key file fou"…
.text:00203B4A xor edx, edx
.text:00203B4C call sub_1735D4

Что мы узнали? Параметры, отвечающие за регистрацию, хранятся в каком-то блоке настроек в байте с индексом 51h. Надо найти место, где этот байт инициализируется. Поиск будем выполнять по строке "+51h]," После нескольких совпадений поиск приведет нас к вот такому коду:

Цитата:

.text:001809B7 mov byte ptr [ebx+25h], 0
.text:001809BB mov byte ptr [ebx+51h], 0
.text:001809BF mov dword ptr [ebx+58h], 0
.text:001809C6 mov dword ptr [ebx+5Ch], 0
.text:001809CD mov dword ptr [ebx+60h], 0
.text:001809D4 mov dword ptr [ebx+64h], 0

Что характерно, перед этим блоком и после него идут какие-то манипуляции с датами и временем, пользовательскими данными и всякие подобные необычные штуки. Есть подозрение, что это как раз инициализация блока параметров регистрации. Заменим команду mov byte ptr [ebx+51h], 0 на аналогичную по длине команду mov byte ptr [ebx+51h], 1. Сохраняем изменения, запускаем.

http://s019.radikal.ru/i603/1705/3a/8a2c1e9318f5.png
Программа с регистрацией Lite

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

http://s018.radikal.ru/i506/1705/18/db1bb851a27c.png
Строка в файле

Строка найдена, по перекрестным ссылкам ищем место, где она используется. Обнаруживается следующий код:

Цитата:

; Проверить байт зарегистрированности
.text:001F87D7 movzx ebx, byte ptr [eax+51h]
.text:001F87DB test bl, bl
.text:001F87DD jz short loc_1F883A
; Проверить тип лицензии
.text:001F87DF mov eax, off_237D4C
.text:001F87E4 mov eax, [eax]
.text:001F87E6 mov eax, [eax+60h]
.text:001F87E9 sub eax, 1
.text:001F87EC jb short loc_1F87FB
.text:001F87EE jz short loc_1F880D
.text:001F87F0 dec eax
.text:001F87F1 jz short loc_1F881C
.text:001F87F3 dec eax
.text:001F87F4 jz short loc_1F882B
.text:001F87F6 jmp loc_1F888F
.text:001F87FB ; —————————————–
.text:001F87FB loc_1F87FB:
.text:001F87FB lea eax, [ebp+var_4]
.text:001F87FE mov edx, offset aLiteNonCommerc
; " Lite (non-commercial use only)"
.text:001F8803 call sub_16C9C
.text:001F8808 jmp loc_1F888F
.text:001F880D ; —————————————-
.text:001F880D loc_1F880D:
.text:001F880D lea eax, [ebp+var_4]
.text:001F8810 mov edx, offset aHome ; " Home"
.text:001F8815 call sub_16C9C
.text:001F881A jmp short loc_1F888F
.text:001F881C ; —————————————-
.text:001F881C loc_1F881C:
.text:001F881C lea eax, [ebp+var_4]
.text:001F881F mov edx, offset aProfessional
; " Professional"
.text:001F8824 call sub_16C9C
.text:001F8829 jmp short loc_1F888F
.text:001F882B ; —————————————-
.text:001F882B loc_1F882B:
.text:001F882B lea eax, [ebp+var_4]
.text:001F882E mov edx, offset aBusiness
; " Business"
.text:001F8833 call sub_16C9C
.text:001F8838 jmp short loc_1F888F

Мы видим уже знакомый нам байт регистрации из блока настроек по адресу 51h, а затем проверяется двойное слово по адресу 60h. Из него поочередно вычитается по единичке, и, в зависимости от результата, выводится тот или иной тип лицензии. Несложно посчитать, что для Business-лицензии требуется значение 3. Возвращаемся к коду инициализации, смотрим. DWORD с адресом 60h там тоже присутствует. Заменяем команду mov dword ptr [ebx+60h], 0 на mov dword ptr [ebx+60h], 3.

http://s16.radikal.ru/i191/1705/4f/55d05d4335ef.png
Программа успешно "зарегистрирована"

http://s04.radikal.ru/i177/1705/23/253e7e74ff54.png
Программа успешно "зарегистрирована"

Теперь в заголовке программы красуется максимально доступная версия Business, в окне "О программе" тоже, попытка повторной активации радует нас сообщением, что все уже активировано. Проверяем функционал, все работает без каких-либо ограничений. Цель достигнута. Спасибо автору за отличную программу!

• Author: ManHunter
• Source: manhunter.ru

Оставьте комментарий