Исследование защиты программы WinNc
Скриншот программы WinNc
WinNc - ущербная попытка приблизиться к эталонным файловым менеджерам типа Total Commander или FAR. Даже от великого Norton Commander'а кусочек себе в название оттяпали. Гибрид ужа с ежом, объединенный убогим интерфейсом. Но зато коммерческий, все дела, куда ж без этого. Сестра, готовьте операционную.
Забираем с офсайта дистрибутив, устанавливаем, смотрим. Главный исполняемый файл ничем не упакован, отправляем его на разбор в дизассемблер.
Программа не зарегистрирована
При запуске появляется окно "О программе", где написано "Unregistered". Хорошая зацепка. Программа мультиязычная, большинство текстовых строчек находятся в ini-файлах. Посмотрим файл, соответствующий английскому языку.
Строка в языковом файле
Строке "Unregistered" соответствует числовой индекс 40219 или 9D1Bh, если считать в шестнадцатеричной системе счисления. Поищем в листинге дизассемблера, где это число может использоваться. Обнаружится единственное вхождение:
Code (Assembler) : Убрать нумерацию
- .text:009DC9D1 lea eax, [ebp+var_10]
- .text:009DC9D4 call sub_408D1C
- ; Получить адрес памяти с настройками
- .text:009DC9D9 call sub_9D371C
- ; Проверить байт в настройках
- .text:009DC9DE movzx eax, byte ptr [eax+80h]
- .text:009DC9E5 dec eax
- .text:009DC9E6 sub al, 2
- ; Если он меньше 2, то программа зарегистрирована
- .text:009DC9E8 jb short loc_9DCA15
- .text:009DC9EA jz short loc_9DCA68
- .text:009DC9EC dec eax
- .text:009DC9ED sub al, 2
- .text:009DC9EF jnb loc_9DCA9B
- .text:009DC9F5 lea edx, [ebp+var_20]
- ; Загрузить строку "Unregistered" и вывести ее на форму
- .text:009DC9F8 mov eax, 9D1Bh
- .text:009DC9FD call sub_638F00
- .text:009DCA02 mov edx, [ebp+var_20]
- .text:009DCA05 lea eax, [ebx+3B4h]
- .text:009DCA0B call sub_4090FC
- .text:009DCA10 jmp loc_9DCA9B
- .text:009DCA15 ; --------------------------------------------------
- .text:009DCA15 loc_9DCA15:
- .text:009DCA15 call sub_9D371C
- .text:009DCA1A mov edx, [eax+14h]
- .text:009DCA1D lea eax, [ebx+3B4h]
- ...
- ...
Code (Assembler) : Убрать нумерацию
- .text:00CCC4ED mov [ebp+var_9], 0
- .text:00CCC4F1 test bl, bl
- .text:00CCC4F3 jz short loc_CCC50F
- ; Точно такая же конструкция, как и в предыдущей проверке
- .text:00CCC4F5 call sub_9D371C
- .text:00CCC4FA cmp byte ptr [eax+80h], 0
- .text:00CCC501 jnz short loc_CCC50F
- .text:00CCC503 call sub_9D371C
- .text:00CCC508 xor edx, edx
- .text:00CCC50A call sub_9D5ABC
- .text:00CCC50F loc_CCC50F:
- .text:00CCC50F call sub_9D371C
- .text:00CCC514 movzx eax, byte ptr [eax+80h]
- .text:00CCC51B sub al, 1
Программа успешно "зарегистрирована"
Триального окна при запуске больше нет, все остальные функции зарегистрированной программы также стали доступны. Цель достигнута, тренировка закончена, теперь это нелепое поделие можно смело удалять с жесткого диска.
Просмотров: 1073 | Комментариев: 5
Метки: исследование защиты
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
gob
(14.10.2023 в 16:08):
ссылка сдохла ( стянул через web.archive
Руслан
(25.03.2022 в 12:38):
Сердечно благодарю за ответ!
ManHunter
(21.03.2022 в 11:40):
Просмотр переключить на hex, поиск F7, табуляцией переключить фокус ввода на поле "Hex", там уже вводить hex-кодами нужную последовательность байт. Ну и не забываем про little-endian.
Руслан
(21.03.2022 в 09:20):
Уважаемый автор блога!
Подскажите глупому новичку , как искать в HIEW значение 9D1Bh
Я нажимаю F7 , потом еще раз F7. Пробовал вводить какие-то комбинации , но ничего не находит. Как правильно задать маску для поиска этого значения? И извините заранее , что лезу с таким лузерским вопросом.
Подскажите глупому новичку , как искать в HIEW значение 9D1Bh
Я нажимаю F7 , потом еще раз F7. Пробовал вводить какие-то комбинации , но ничего не находит. Как правильно задать маску для поиска этого значения? И извините заранее , что лезу с таким лузерским вопросом.
voffka
(02.03.2022 в 01:40):
Для любителей лицезреть своё имя в абауте.
Тута смотрим серийник
009D5330 CALL <WinNc.DunesSerialCheck.TDunesSerialCheck.CreateCode_>
009D5335 MOV EAX,DWORD PTR SS:[EBP-1C]
009D5338 MOV EDX,DWORD PTR SS:[EBP-8]
009D533B CALL <WinNc.System.@UStrEqual_0040A1FC
009D5340 JNZ SHORT WinNc.009D5344
Тута без онлайн проверки записываем [eax+80h],1
009D5B84 JMP WinNc.009D5C63 -> NOP
Тута смотрим серийник
009D5330 CALL <WinNc.DunesSerialCheck.TDunesSerialCheck.CreateCode_>
009D5335 MOV EAX,DWORD PTR SS:[EBP-1C]
009D5338 MOV EDX,DWORD PTR SS:[EBP-8]
009D533B CALL <WinNc.System.@UStrEqual_0040A1FC
009D5340 JNZ SHORT WinNc.009D5344
Тута без онлайн проверки записываем [eax+80h],1
009D5B84 JMP WinNc.009D5C63 -> NOP
Добавить комментарий
Заполните форму для добавления комментария