Сейчас на форуме: -Sanchez-, barsik, vasilevradislav, vsv1, padad42664, kris_sexy (+6 невидимых) |
eXeL@B —› Крэки, обсуждения —› наткнулся на интересный глюк windows XP(sp2) |
Посл.ответ | Сообщение |
|
Создано: 14 сентября 2007 12:10 · Поправил: Xserg · Личное сообщение · #1 Писал защиту для своей проги, сделал ошибку, И наткнулся на интересный глюк windows. Исходный код для ХР .586 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\w2k\ntdll.inc includelib \masm32\lib\w2k\ntdll.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib ThreadHideFromDebugger equ 17 .data isDebug db ? Npass db ? TestStop db ? hThread dd ? USER32 db 'User32.dll',0 MBTA db 'MessageBoxTimeoutA',0 tTestg db ' Test',0 tTestb db ' Test',0 wdebug db 'with debug',0 ndebug db 'no debug',0 assume fs:nothing .code ;+++++++++++++++++++++ Check_SEH: .if Npass==0 xor eax,eax inc Npass int 3 ; 0cch in SEH +1 ntdll.Exception .elseif Npass==1 inc Npass invoke GetModuleHandle,offset USER32 invoke GetProcAddress,eax,offset MBTA ;Будем хакать M$ windows std ; <====== set D flag push 1 ;msec push 0 push 0 push offset tTestg push offset tTestb push 0 call EAX ;MessageBoxTimeoutA cld ;<------------ Debugger Present mov TestStop,-1 invoke ExitThread,0 ;<- Выход из потока dec Npass mov eax,-1 .elseif Npass==2 cld ;<------------ no Debugger mov isDebug,-1 mov TestStop,-1 invoke ExitThread,0 ;<- Выход из потока .endif ret ;+++++++++++++++++++++ ;------------------------------------------- ; Start Thread Thread proc mov isDebug,0 push offset Check_SEH push fs:[0] mov fs:[0],esp mov Npass,0 db 0ffh,0ffh,0ffh,0ffh Thread endp ;------------------------------------------- start: mov TestStop,0 invoke CreateThread,0,4000h,offset Thread,0,NORMAL_PRIORITY_CLASS,offset hThread _Wait: invoke Sleep,10 cmp TestStop,0 jz _Wait .if isDebug==-1 invoke MessageBoxA,0,offset ndebug,offset tTestg,0 .else invoke MessageBoxA,0,offset wdebug,offset tTestb,0 .endif invoke TerminateProcess,-1,0 invoke ZwSetInformationThread,-2,ThreadHideFromDebugger,0,0 end start Поспрашивал гугл, он похоже не читал про это. Под моей системой (sp2), работает как часы. Кто ни будь знает в чем прикол? Почему под отладчиком управление не передается на SEH? <img src="img/attach.gif"> <SCRIPT type=text/javascript>dfl("files/","f579_14.09.2007_CRACKLAB.rU.tgz");< /SCRIPT> - anti._exe |
|
Создано: 14 сентября 2007 14:36 · Личное сообщение · #2 |
|
Создано: 14 сентября 2007 15:24 · Личное сообщение · #3 bad_boy пишет: Потому что отладчик сам обрабатывает исключение Нет отладчик я запускаю по Shift-F9, значит контекст отлаживаемого процесса не меняется. И если поменять ; push 1 ; push 0 ; push 0 ; push offset tTestg ; push offset tTestb ; push 0 ; call EAX ;MessageBoxTimeoutA на xor ebx,ebx div ebx то все работает как обычно, т.е. управление передается на SEH |
|
Создано: 15 сентября 2007 00:34 · Личное сообщение · #4 |
|
Создано: 15 сентября 2007 05:52 · Личное сообщение · #5 |
|
Создано: 15 сентября 2007 06:53 · Личное сообщение · #6 Vadim Sergeevich пишет: Замени int 1 на типа db 0F1h помоему - короче неверный код операции. И протестируй заново Меня данный код интересует в качестве детектора отладчика. Я его немного поизучал. Система определяет критическую ошибку, и из кольца ring0 пытается сообщить об этом отладчику (она то знает что он есть). Если отладчик игнорирует, система сама завершает (в данном случае MessageBoxTimeoutA), и программа выполняется со следующей инструкции. Без отладчика обработку ошибки система доверяет SEH. |
|
Создано: 15 сентября 2007 07:28 · Личное сообщение · #7 |
|
Создано: 15 сентября 2007 07:48 · Поправил: Xserg · Личное сообщение · #8 Поправил (Убрал Int1) сути вопроса не меняет: Кто ни будь знает в чем прикол? Почему под отладчиком управление не передается на SEH? Или хотя бы потестите на ваших системах. Программа специально написана для удобства отладки в OllyDbg slil.ru/24857999 ps если пытаться отлаживать с ФантОм, вообще управление никуда не передается. |
|
Создано: 15 сентября 2007 10:55 · Поправил: Hellspawn · Личное сообщение · #9 хз чё у тя, у мну так: (мой миниотладчик) [Exception] Illegal Instruction [Address] 004010AA [dwThreadId]00000654 ----------------------- [Exception] Access Violation [Address] 77F1A159 [dwThreadId]00000654 под ольгой также... (no debug) з.ы. хватит кодить незнамо что) ----- [nice coder and reverser] |
|
Создано: 15 сентября 2007 15:28 · Личное сообщение · #10 |
eXeL@B —› Крэки, обсуждения —› наткнулся на интересный глюк windows XP(sp2) |
Эта тема закрыта. Ответы больше не принимаются. |