Blog. Just Blog

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

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

DWGSee Pro - программа для просмотра файлов проектов AutoCAD в формате DWG/DXF/DWF. Большинство полезного функционала доступно только в профессиональной редакции, и, как несложно догадаться, она приобретается за некоторую сумму.

Забираем с офсайта дистрибутив последней версии, устанавливаем, смотрим что и как. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер. Файл объемный, придется подождать. Пока идет анализ, поищем зацепки, касающиеся регистрации или триала.

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

Отличным кандидатом на эту роль будет окно сообщения, которое появляется при попытке установить защиту на файл проекта без регистрации. Поиском по строке "Pro" обнаруживается вот такой код.
  1. .text:01EE4E29                 push    offset aAxmag   ; "axmag"
  2. .text:01EE4E2E                 lea     ecx, [esp+520h+var_504]
  3. .text:01EE4E32                 call    ds:??4?$CStringT@DV?$StrTraitMFC_DLL
  4. .text:01EE4E38                 cmp     dword_2C1BA78, 2
  5. .text:01EE4E3F                 lea     ecx, [esp+51Ch+var_504]
  6. .text:01EE4E43                 jnz     short loc_1EE4E4C
  7. .text:01EE4E45                 push    offset aDwgseeDwgviewe
  8. ; "DWGSee DWGViewer Pro"
  9. .text:01EE4E4A                 jmp     short loc_1EE4E51
  10. .text:01EE4E4C ; ------------------------------------------------
  11. .text:01EE4E4C loc_1EE4E4C:
  12. .text:01EE4E4C                 push    offset aDwgseeDwgvie_0
  13. ; "DWGSee DWGViewer"
Классика. Проверяется значение переменной dword_2C1BA78, если оно равно 2, то где-то выводится "DWGSee DWGViewer Pro", иначе только "DWGSee DWGViewer". Отлично, теперь надо найти места в коде, где эта переменная инициализируется нужным значением. По перекрестным ссылкам обнаруживаем три таких вхождения:

Места инициализации переменной
Места инициализации переменной

Каждое из трех вхождений находится внутри функций, в которых выполняются какие-то манипуляции с реестром, кодированными строками и всяким таким подобным. Приводить их тут не буду в целях экономии места, тем более, что для понимания процесса они ничего не дадут. Зато при более внимательном просмотре их содержимого дополнительно обнаружится, что в случае установки правильного значения переменной они должны вернуть EAX=1. Тоже полезное знание. В начало каждой функции проверки по адресам 01EE2660, 01EE3720 и 01EE4AF0 впечатываем три команды MOV DWORD[2C1BA78],2, MOV EAX,1 и RET. Сохраняем изменения, но пока не запускаем.

При патче мы использовали абсолютные значения адресов в памяти. Так как образ программы может грузиться в память по разным адресам, эта память почти со стопроцентной вероятностью может оказаться за пределами досягаемости. Чтобы этого избежать, необходимо подкорректировать PE-заголовок файла на предмет отсутствия релоков. Это можно сделать, например, в PETools.

Убираем релоки из файла
Убираем релоки из файла

Вот теперь можно смело запускать программу. Сразу же видим, что в заголовке окна и в окне "О программе" появилась информация об однопользовательской лицензии.

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

Проверяем программу на предмет отсутствия ограничений. Функции экспорта, защиты, все доступно, никаких триальных надписей при просмотре тоже нет. Цель достигнута.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 460 | Комментариев: 7

Комментарии

Отзывы посетителей сайта о статье
ManHunter (14.06.2022 в 22:33):
Compiller, тоже ж вроде шароварный, если память не изменяет.
Compiller (13.06.2022 в 14:12):
Плагин wlx CADview для Total Commander IMHO малость удобнее...
Vnv (19.05.2022 в 22:11):
Новый патч:
.01EE46DA 83 C6
.01EE46DB 3D 05
.01EE46E0 01 02
.01EE46E1 7D EB
ManHunter (19.05.2022 в 22:04):
voffka, там понтами и количеством сетевых лицензий дело не ограничивается, по твоему патчу отваливается меню экспорта.
voffka (19.05.2022 в 21:56):
01EE2DA5    MOV AL,1
01EE45E6    MOV AL,1
Понты в заголовке и абауте:
из esi в eax кладется скокаюзеровая лицензия
01FC2912 NOP
01F6A0FC NOP
Vnv (19.05.2022 в 21:17):
Упс, для моих целей (в основном пользовался "DWG Compare") этого хватало. Для "Encrypt Drawing..." надо еще править.
Vnv (19.05.2022 в 21:05):
Начиная с версии 2018 года всегда пользовался однобайтным патчем.
Для DWGSeePro2022:
.01EE46C6 13 00
и не надо релоки выключать.

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

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

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