Здравствуйте! Нашел я недавно кейген к игрушке Ricochet Lost Worlds:Recharged от team ECLIPSE Красивый такой... решил посмотреть на чем написан. Оказалось чем-то упакован. Ну ладно, думаю, щас я тебя распакую. Открываю в Olly, нажимаю RUN, и тут Оля вылетает... Попробовал открыть в WinDasm'е(там тоже отладка есть ), но и его эта прога убивает... Пробовал ставить бряки(hardware и обычные) на TerminateProcess, TerminateThread, GetProcAddress итп, все равно не могу обойти эту ловушку. Внимание вопрос : как в принципе прога может убить свой отладчик? Я понимаю, зная определенные отладчики, можно поискать заголовок окна, ..., а потом прибить его, но это не то случай, да и застраховаться от всех отладчиков не получится. P.S. Я не риппер если что, мне чужого не надо. Спрашиваю для самообразования. Спасибо.
Можно только в системах класса НТ. Все завязано на DebugActiveProcessStop, была статья где-то но имхо ерунда это все. Написать можно минут за 20
CyberManiac В таком случае, если получится конечно же, вместе с отладчиком завершится и отлаживаемое приложение
CyberManiac А какой обработчик тогда изуродовать? И почему отладчик при этом должен издохнуть? Quantum Я разве не так сказал?
Quantum Ну, я предлагал несколько иное: путем изнасилования SEH и перехватчика необработанных исключений довести отлаживаемый процесс до безмолвного издыхания. Отчего издохнет и отладчик. С интегрированными в IDE отладчиками такое у меня как-то получилось, хотя и против моей воли Не думаю, что встроенный долбуггер W32Dasm (ему лет даже еще больше, чем я W32Dasm'ом пользуюсь, а я с него начинал) их сильно превосходит в области работы с исключениями.
...понял... Quantum Автор топика ставит вопрос о завершении отладчика без завершения работы отлаживаемого приложения. И это возможно только на НТях, при помощи деаттачинга отладчика. Эта фича реализуется через функцию DebugActiveProcessStop, после чего можно смело прикрывать отладчик функцией TerminateProcess и это не приведет к завершению отлаживаемого приложения.
.... а бряк у HuXTUS не выскакивает по той причине что дебуггер уже отключен от отлаживаемого приложения....
_Serega_ Вы умеете читать между строк Отсюда следует, что приложение продолжает работать? И, стало быть, не совершить при этом суицид?
К примеру, она может: 1. Удостоверится что есть ф-я DebugActiveProcessStop. 2. Попытаться DebugActiveProcess каждый процесс, в случае успеха сразу делать DebugActiveProcessStop. 3. Тот, который его отлаживает, не получился сделать DebugActiveProcess. 4. Сделать в него инжект, потом DebugActiveProcessStop для своего процесса и убить. Метод конечно извращенный, но "законный".
Я ничего такого не сказал. Прога умирает вместе с отладчиком! Меня просто заинтересовала любая реализация подобного поведения (для использования в своей защите/для обхода вражеской обороны).
ой позор на мою седую голову догадался сунуть прогу в PeID, и вот что он показал: tElock 1.0 (private) -> tE! Снял защиту автораспаковщиком...и...и все ))) все заработало, ничего не вылетает. Спасибо всем за ответы. С уважением.
Вот, что я смог сделать по этой теме. Код, приведенный ниже каким-то образом убивает Ольку(со всеми плагинами) и ВинДасм если надо. По крайней мере у меня Если чесно, то, что получилось, вышло скорее случайно, изначально я шел немного другим путем: находил отладчик и к нему цеплялся DebugActiveProcess, а параллельно запускался "левый" процесс, которому передавался PID отлаживаемого процесса и который должен был его TerminateProcess. Идея появилась так: Натравил две Оли друг на друга(File->Attach) и одну насильно завершил. Получил BSOD. (у меня WinXP Pro SP2) Вот. Но в итоге все сократилось и получился такой код. Недостаток: он сам не в состоянии определить кто его отлаживает, поэтому просто ищет либо окно Оли, либо дасма. Код: Код (Text): start: jmp @f szShellApi db 'Shell32',0 szProgram db 'killll.exe',0 szDebugger db 'OLLYDBG',0 ;dlja Olly ; szDebugger db 'OWL_Window',0 ;esli nado ubitj WinDasm szMutex db 'pizdez',0 @@: invoke OpenMutex, 1, TRUE, offset szMutex cmp eax, 0 jnz @f invoke CreateMutex, 0, 0, offset szMutex invoke WinExec, offset szProgram, SW_SHOW jmp @kill @@: ;POISK DEBUGGER'a @kill: invoke FindWindow, offset szDebugger, NULL push eax invoke GetWindowThreadProcessId, eax, esp pop eax ; invoke DebugActiveProcess, eax ;eax == PID debugger'a end start
Странно. Но у меня не падает ни на WinXP Pro SP2 ни на Vista 32bit Просто при втором аттаче они обе виснут, что очевидно.