Доброе время суток. Возник вопрос по трассировке процессов. "Написал" следующий код... Код (Text): .data ofn OPENFILENAME <> FilterString db "Exe files",0,"*.exe",0 step dd 0h fb dword 0h combuffer dword 0h bRead dword 0h fbuffer dword 0h eip_ dword 0h .data? ho dword ? buffer db 512 dup (?) startinfo STARTUPINFO <> pi PROCESS_INFORMATION <> DBEvent DEBUG_EVENT <> align dword tCont CONTEXT <> .code start: mov ofn.lStructSize, sizeof ofn mov ofn.lpstrFilter, offset FilterString mov ofn.lpstrFile, offset buffer mov ofn.nMaxFile, 512 mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or \ OFN_EXPLORER or OFN_HIDEREADONLY invoke AllocConsole invoke GetOpenFileName, offset ofn .if eax!=TRUE jmp Exit .endif invoke GetStartupInfo, offset startinfo invoke CreateProcess, offset buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS,\ NULL, NULL, offset startinfo, offset pi .while TRUE invoke WaitForDebugEvent, offset DBEvent, INFINITE .if DBEvent.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT print "--Proc Exit", 0ah .break .elseif DBEvent.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT mov eax, DBEvent.u.CreateProcessInfo.hFile push eax print "hFile : " pop eax print uhex$(eax), 0ah mov eax, DBEvent.u.CreateProcessInfo.hProcess push eax print "hProcess: " pop eax print uhex$(eax), 0ah mov eax, DBEvent.u.CreateProcessInfo.hThread push eax print "hThread : " pop eax print uhex$(eax), 0ah mov eax, DBEvent.u.CreateProcessInfo.lpStartAddress push eax print "startAdd: " pop eax print uhex$(eax), 0ah invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE .continue .elseif DBEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT mov tCont.ContextFlags, CONTEXT_CONTROL invoke GetThreadContext, pi.hThread, addr tCont or tCont.regFlag, 100h invoke SetThreadContext, pi.hThread, offset tCont invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE .continue .elseif DBEvent.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_SINGLE_STEP inc step print str$(step)," --- eip:" print uhex$(tCont.regEip),0ah mov tCont.ContextFlags, CONTEXT_CONTROL invoke GetThreadContext, pi.hThread, addr tCont or tCont.regFlag, 100h invoke SetThreadContext, pi.hThread, offset tCont invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE .continue .endif .endif invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED .continue .endw mov ebx,input("Exit...") Exit: invoke ExitProcess, 0 end start Трассировка, насколько я понимаю, начинается с организации окружения процесса, загрузки Dll и т.п., и заканчивается на точке входа в программу. А как трассировать саму программу? Или я явно что то недопонимаю...Спасибо
В принципе все делаете правильно. Если вы ходите пошаговую трасировку сделать то надо ставить break на выполнения следующих команд(int 3, СС, или моно hardware breakpoint) Стандартное api для дебагинга http://msdn.microsoft.com/en-us/library/ms679303(VS.85).aspx Можно почитать Робинсона "Отладка приложения для .net и Windows" И посмотреть Статью "Об упаковщиках в последний раз" часть 3
Ox8BFF55 Трассировка исполняется аппаратно посредством 8-го бита регистра флагов. Точки останова ставятся если нужно пропустить некоторый код, например пропустить процедуру. Что понимать под программой ? Загрузчик это программа, в статически прилинкованных модулях тоже пользовательский код может быть, который есчо до начала исполнения основного экзешника будет выполнен, или например тлс..
Еще маленько поленюсь...то есть здесь трассируется код загрузчика? Который потом создает другой тред, создание которого надо перехватывать?
Любой юзермодный тред начинается с доставки ядерной апк, для которой контекст пользовательский, для обоих колец защиты рулит редирект на диспетчер исключений посредством трассировки(взвод TF), либо блокирование страницы(страница памяти в которой находится [KeUserApcDispatcher] помечается как сторожевая(GUARD)).
Clerk Эт ты борщанул Тип от нечего делать одну и ту же фразу пишет. Есть все шансы что ты задавил бота интеллектом