ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Взлом и исправление багов в WinNavigator v1.96
  #1  
Старый 02.01.2007, 23:37
ProTeuS
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме:
4226592

Репутация: 2175


Отправить сообщение для ProTeuS с помощью ICQ
По умолчанию Взлом и исправление багов в WinNavigator v1.96

Взлом и исправление багов в WinNavigator v1.96

Сегодня будем исследовать мой любимый файловый менеджер WinNavigator. Я лет 5 пользовался 1.95 версией, т.к.
1.96(последняя версия, доступна на wnsoft.com, жаль проэкт закрыт уже 4 года) имела один досадный баг,
времени на исследование которого никогда не хватало(по при4ине утери всех интсаллов это время теперь нашлось .
Все, кто еще с DOSa привык пользоваться горя4имы клавишами, как и я, плохо себя 4увствуют если какая-то из них не работает.
Так в 1.96 версии сабжа при нажатии хоткея "Ctrl + \" для перехода в корень текущего диска возникала ошибка вместо нужной операции:

Усугубляется проблема еще тем, 4то при попытке распаковки выполняемого файла программы
(как сказал PEID, он запротек4ен ASProtect 1.22 - 1.23 Beta 21 -> Alexey Solodovnikov) лицензия пропадает
даже при нали4ии валидной регистрации =(
Протестировать можно на этом клю4е(лу4ше вбивать клю4 непосредственно в редакторе реестра):
Код:
REGEDIT4
[HKEY_CURRENT_USER\Software\WinNavigator]
"Key"="0nhVQp5A+vUjiP4KIJsJtcqZ3t/LUFVBW0Fo3zUVIF5S
1ccGs9gkabulamlqLQLR33evIRSekR+JJP5f6VFNxh+i0NLD98q
RmczWjAQiP6QSlUOSOUi7AeK51MqPKDA3dmYWCI+1qJUGKTuR2M
MRJRQFOGzXMgrxeT16B7LYbZWI= "
"Reg"="313"
Приступим к распаковке навесного протектора. Загрузив подопытного в ольку, видим знакомые команды.

Код:
00401000 >/$ 68 01F06100    PUSH WN.0061F001
00401005  |. E8 01000000    CALL WN.0040100B
0040100A  \. C3             RETN
0040100B   $ C3             RETN
В "исклю4ениях" свойств отладки отклю4аем все 4екбоксы и (не забыв активировать плагин IsDebugPresent, либо вру4ную пропат4ив соответствующий флаг)
проходим 32 исклю4ения. Видим такой код:

Код:
012005CC   3100             XOR DWORD PTR DS:[EAX],EAX
012005CE   64:8F05 00000000 POP DWORD PTR FS:[0]
012005D5   58               POP EAX
012005D6   833D DC492001 00 CMP DWORD PTR DS:[12049DC],0
012005DD   74 14            JE SHORT 012005F3
Ставим бряк на 012005DD, жмем Ctrl + F9 и бряк на доступ к памяти секции кода екзешника. F9 и мы на OEP. Дампим, восстанавливаем импорт в Imprec
(воспользовавшись функциями DisAsm1 и плагом для аспра, 4тобы восстановить нерезолвящиеся функции).

Запустив распакованый файл на свое удивление полу4аем такое вот сообщение (даже при валидной регистрации):

Код:
005380B8   . B8 AC815300    MOV EAX,fixed.005381AC                   ; |ASCII "Dear registered user of WinNavigator!
We have changed registration mechanism, so you need a new registration key.
Please contact us (support@wnsoft.com) and get a new registration for FREE.

Sorry for some inconvenience."
и приставку
005380DC   . B9 94825300    MOV ECX,fixed.00538294                   ;  ASCII "  -  UNREGISTERED"
на главном окне программы + ку4у ограни4ений и нагов
Изменив выделенную команду на нопы, сообщении выдаваться не будет.
4тобы узнать логику срабатывания условного перехода делаем следующее.
Ставим бряк на соответсвующие строки и жмем F9. При отработке бряка смотрим в стек вызовов и самой верхней надфункцией в нем есть
00537ADB |. E8 D4040000 CALL fixed.00537FB4
Входим в нее и видим код:

Код:
00537FD6   > A1 B4F55600    MOV EAX,DWORD PTR DS:[56F5B4]
00537FDB   . 50             PUSH EAX                                 ; /ProcNameOrOrdinal => #5
00537FDC   . A1 B0F55600    MOV EAX,DWORD PTR DS:[56F5B0]            ; |
00537FE1   . 50             PUSH EAX                                 ; |hModule => FFFFFFFF
00537FE2   . E8 D9F2ECFF    CALL <JMP.&kernel32.GetProcAddress>      ; \GetProcAddress
00537FE7   . 85C0           TEST EAX,EAX
00537FE9   . 74 62          JE SHORT fixed.0053804D
Можно догадаться, 4то в пакованом (видимо это особенность мутации ли4ной версии спра с выполняемым файлом) файле функция .00537FE2
выдаст правильный результат, т.к ей аргументом передастся верный hModule, в нашем же слу4ае для подмены результатов проверки (в распакованной проге, понятное дело, они никогда не будут правильными)
достато4но занопить команду .00537FE9.

Нагов нет, вот только осталась надпись о незарегистрированности в окне "О программе". 4тобы ее по-быстрому снять, ищем строку
"NOT REGISTERED COPY" в перекрестных ссылках. Попадаем сюда:

Видим знакомый вызов. Поскольку GetProcAddress явно возвратит 0, а не нужный адрес искомой функции (которая потом будет вызываться call esi),
то во избежение переполнения удалим весь код непосредственно до .4FD37F

Теперь все зарегистрированно и красиво, можно приступать до главного вопроса - поиска бага и его устранения.

Самый быстрый способ - отклю4ить игнор в ольке на все эксепшены и просто нажать в запущеной проге Ктрл + \
Брякаемся на эксепшене

На 3 команды выше выполняется основная функция файлового менеджера по парсингу путей, которая выдаст в EDX
указатель на надпапку (EDX=0121A114, (ASCII ".."). Команда .53E92B постоянно возвращает нуль (DS:[012087CC]=00000000).
Таким образом, команда .53E931 будет ссылаться на несуществующий указатель. А поскольку команда пыталась записать в DL
байт по [EDX] (а EDX имел нулевое зна4ение), то можно предположить, 4то в DL надо просто записать нуль (либо ни4его не делать, т.к.
в нешем слу4ае он уже там). Тогда просто забиваем .53E931 нопами и радуемся полнофункциональности файлового менеджера и отсутствию
исследованого бага.

gl hhf!
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ