Blog. Just Blog

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

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

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

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

Сообщение незарегистрированной программы
Сообщение незарегистрированной программы

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

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

Это не совсем сообщение, а индекс, который используется для загрузки строки в мультиязычном интерфейсе. Ну ничего, посмотрим, как и где он используется.
  1. .text:00203875                 lea     eax, [ebp+var_C]
  2. .text:00203878                 push    eax
  3. .text:00203879                 call    AboutDialogDataUpdate
  4. .text:0020387E                 lea     eax, [ebp+var_4]
  5. .text:00203881                 xor     edx, edx
  6. .text:00203883                 call    sub_16C9C
  7. ; Указатель на блок настроек
  8. .text:00203888                 mov     eax, off_237D4C
  9. .text:0020388D                 mov     eax, [eax]
  10. ; Проверить байт регистрации
  11. .text:0020388F                 cmp     byte ptr [eax+51h], 0
  12. ; Программа не зарегистрирована
  13. .text:00203893                 jz      loc_203B3F
  14. .text:00203899                 mov     eax, off_237D4C
  15. .text:0020389E                 mov     eax, [eax]
  16. .text:002038A0                 cmp     byte ptr [eax+78h], 0
  17. .text:002038A4                 jnz     loc_203995
  18. .text:002038AA                 lea     eax, [ebp+var_8]
  19. ...
  20. ...
  21. ...
  22. .text:00203B3F loc_203B3F:
  23. .text:00203B3F                 lea     eax, [ebp+var_4]
  24. .text:00203B42                 push    eax
  25. .text:00203B43                 mov     eax, [ebx]
  26. .text:00203B45                 mov     ecx, offset aAboutLicenseNo
  27. ; "About - License - No valid key file fou"...
  28. .text:00203B4A                 xor     edx, edx
  29. .text:00203B4C                 call    sub_1735D4
Что мы узнали? Параметры, отвечающие за регистрацию, хранятся в каком-то блоке настроек в байте с индексом 51h. Надо найти место, где этот байт инициализируется. Поиск будем выполнять по строке "+51h]," После нескольких совпадений поиск приведет нас к вот такому коду:
  1. .text:001809B7                 mov     byte ptr [ebx+25h], 0
  2. .text:001809BB                 mov     byte ptr [ebx+51h], 0
  3. .text:001809BF                 mov     dword ptr [ebx+58h], 0
  4. .text:001809C6                 mov     dword ptr [ebx+5Ch], 0
  5. .text:001809CD                 mov     dword ptr [ebx+60h], 0
  6. .text:001809D4                 mov     dword ptr [ebx+64h], 0
Что характерно, перед этим блоком и после него идут какие-то манипуляции с датами и временем, пользовательскими данными и всякие подобные необычные штуки. Есть подозрение, что это как раз инициализация блока параметров регистрации. Заменим команду mov byte ptr [ebx+51h], 0 на аналогичную по длине команду mov byte ptr [ebx+51h], 1. Сохраняем изменения, запускаем.

Программа с регистрацией Lite
Программа с регистрацией Lite

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

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

Строка найдена, по перекрестным ссылкам ищем место, где она используется. Обнаруживается следующий код:
  1. ; Проверить байт зарегистрированности
  2. .text:001F87D7                 movzx   ebx, byte ptr [eax+51h]
  3. .text:001F87DB                 test    bl, bl
  4. .text:001F87DD                 jz      short loc_1F883A
  5. ; Проверить тип лицензии
  6. .text:001F87DF                 mov     eax, off_237D4C
  7. .text:001F87E4                 mov     eax, [eax]
  8. .text:001F87E6                 mov     eax, [eax+60h]
  9. .text:001F87E9                 sub     eax, 1
  10. .text:001F87EC                 jb      short loc_1F87FB
  11. .text:001F87EE                 jz      short loc_1F880D
  12. .text:001F87F0                 dec     eax
  13. .text:001F87F1                 jz      short loc_1F881C
  14. .text:001F87F3                 dec     eax
  15. .text:001F87F4                 jz      short loc_1F882B
  16. .text:001F87F6                 jmp     loc_1F888F
  17. .text:001F87FB ; -----------------------------------------
  18. .text:001F87FB loc_1F87FB:
  19. .text:001F87FB                 lea     eax, [ebp+var_4]
  20. .text:001F87FE                 mov     edx, offset aLiteNonCommerc
  21. ; " Lite (non-commercial use only)"
  22. .text:001F8803                 call    sub_16C9C
  23. .text:001F8808                 jmp     loc_1F888F
  24. .text:001F880D ; ----------------------------------------
  25. .text:001F880D loc_1F880D:
  26. .text:001F880D                 lea     eax, [ebp+var_4]
  27. .text:001F8810                 mov     edx, offset aHome ; " Home"
  28. .text:001F8815                 call    sub_16C9C
  29. .text:001F881A                 jmp     short loc_1F888F
  30. .text:001F881C ; ----------------------------------------
  31. .text:001F881C loc_1F881C:
  32. .text:001F881C                 lea     eax, [ebp+var_4]
  33. .text:001F881F                 mov     edx, offset aProfessional
  34. ; " Professional"
  35. .text:001F8824                 call    sub_16C9C
  36. .text:001F8829                 jmp     short loc_1F888F
  37. .text:001F882B ; ----------------------------------------
  38. .text:001F882B loc_1F882B:
  39. .text:001F882B                 lea     eax, [ebp+var_4]
  40. .text:001F882E                 mov     edx, offset aBusiness
  41. ; " Business"
  42. .text:001F8833                 call    sub_16C9C
  43. .text:001F8838                 jmp     short loc_1F888F
Мы видим уже знакомый нам байт регистрации из блока настроек по адресу 51h, а затем проверяется двойное слово по адресу 60h. Из него поочередно вычитается по единичке, и, в зависимости от результата, выводится тот или иной тип лицензии. Несложно посчитать, что для Business-лицензии требуется значение 3. Возвращаемся к коду инициализации, смотрим. DWORD с адресом 60h там тоже присутствует. Заменяем команду mov dword ptr [ebx+60h], 0 на mov dword ptr [ebx+60h], 3.

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

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

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

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

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
SendMessageA (06.05.2017 в 20:05):
:D "Профессиональные редакции этих недостатков лишены, но зато имеют более крупный недостаток - необходимость выкладывать бабло за лицензию."
wet (06.05.2017 в 19:57):
Загрузчик от Windows больше приспособлен и ориентирован на загрузку нескольких ОС Windows, если же есть несколько различных систем + Linux то наверно и GRUB может пригодиться, хотя я предпочитаю виртуальные машины, они гораздо удобнее.
"проверка накопителя" - чего его проверять если работает?
Исправление ошибки Windows XP/2003 Setup 0x6B - это видно что-то специфичное при установке ХР именно с флешки? Ибо с десяток раз ставил ХР с CD, ни какой ошибки ни когда не возникало. Но в любом случае, не актуально уже наверно ХР.
Я не спорю, на халяву можно активировать все эти фишки, пусть будут, такой запас лишнее место на HDD не просит.
Просто удивляюсь, что наверно находятся люди, которые за это платят???
ManHunter (06.05.2017 в 17:51):
А как же поддержка загрузчика GRUB, опция проверки накопителя и исправление ошибки Windows XP/2003 Setup 0x6B?
wet (06.05.2017 в 17:45):
Как можно прочитать, основное отличие лицензионной программы это :Вы получите свой собственный файл лицензии и WinToFlash будет отображать ваше имя в диалоге О Программе.
Значит, если реклама не парит, то в принципе, взлом программы ни чего не дает. Тем более, такой сомнительный пункт, за который просят $100, как "Разрешение на использование в бизнесе" :)
pawel97 (05.05.2017 в 13:24):
Аааа, Семён Семёныч! А я бессрочный акционный ключ когда-то разбанивал, по-другому не смог...

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

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

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