Имеется код: Код (Text): format PE console include '%inc%/win32a.inc' entry start start: int3 (1) mov [s.cb], sizeof.STARTUPINFO invoke CreateProcess, 0, cmd, 0, 0, 0, CREATE_SUSPENDED, 0, 0, s, pi mov [ctx.ContextFlags], CONTEXT_FULL invoke GetThreadContext, [pi.hThread], ctx mov eax, [ctx.regEip] mov [retaddr], eax invoke VirtualAllocEx, [pi.hProcess], 0, CODE_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE mov [v], eax invoke WriteProcessMemory, [pi.hProcess], [v], code_start, CODE_SIZE, 0 mov eax, [v] mov [ctx.regEip], eax invoke SetThreadContext, [pi.hThread], ctx invoke ResumeThread, [pi.hThread] invoke WaitForSingleObject, [pi.hProcess], -1 invoke ExitProcess, 0 v dd ? cmd db 'cmd.exe', 0 pi PROCESS_INFORMATION <0> s STARTUPINFO <0> ctx CONTEXT <0> code_start: call .delta .delta: pop ebx int3 (2) jmp dword [ebx+retaddr-code_start] retaddr dd ? CODE_SIZE = $-code_start data import library kernel32, 'kernel32.dll' include '%inc%/APIA/kernel32.inc' end data Должен записывать кусок кода в создаваемый процесс. После перехода управления на этот код, дочерний процесс по идее должен упасть. Win2k SP3. При выполнении без дебаггера или под Olly - этого не происходит. GetThreadContext сообщает ERROR_NO_ACCESS. При запуске под сайсом с i3here on попадаем в сайс на ОБА int3 - т.е. внедренный код выполняется. Меня добило то, что если закомментировать int3 #1, то сайс не всплывает вовсе - хотя должен. Кто может - поясните, в чем ошибка.
1. Процесс вообще запускается CreateProcess? 2. STARTUPINFO инициируется полностью (хотябы нуликами), или только размер задается?
thnx. теперь все работает. Но нельзя ли поподробнее, почему так? и еще объясни plz, если не трудно, фишку с сайсом.
Код выполняется т.к. WriteProcessMemory, SetThreadContext нормально отрабатывают! соотв. ловится и второй int3 сайсом не пользуюсь, чтобы сказать почему не всплывает, а структуры похоже надо все выравнивать если в них предполагается запись из ядра