Добрый день Столкнулся со следующей проблемой: при самостоятельном создании потока (с формированием контекста, выделением стека) не знаю какой адрес передавать в EIP. С XP вопрос решился просто: дизассемблирование kernel32.dll, в функции CreateRemoteThread заполняется контекст и можно легко увидеть адрес, который заносится в EIP. В семерке же контект формируется где-то в глубине нэйтивной функции NtCreateThreadEx, и где выцепить нужный адрес я не знаю. Подскажите, пожалуйста, направление поисков
Создаешь новый тред с Suspend для текущего процесс (А еще бесконечным циклов )... CONTEXT cntx; cntx.ContextFlags = CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS; GetThreadContext(hStubThread, &cntx); Коректироешь eax, на нужное тебе ... П.С Только посмотреть надо что компилер в StubRoutine для потока нак компилел ...
К сожалению, данный вариант невозможен - задача стоит так, что мне нужно создавать именно свой поток, полностью, вручную, с созданием контекста. И то верно. В итоге обнаружил PspUserThreadStart, которая есть RtlUserThreadStart, получаемая из ntdll. Когда помещаю ее в EIP и запускаю в семерке, при ResumeThread приложение-жертва валится, дебаггер выдает следующее: Код (Text): (166c.cbc): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=75fd28b2 ebx=01b70000 ecx=003f0d48 edx=50022080 esi=00000000 edi=00000000 eip=75f906e9 esp=01c8fff4 ebp=00000000 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00010202 kernel32!CreateSemaphoreExW+0xe18c: 75f906e9 61 popad 0:003> kv ffff Memory ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 00000000 00000000 00000000 00000000 00000000 kernel32!CreateSemaphoreExW+0xe18c С соответствующей функцией в ХР код работает. Подскажите, в чем может быть проблема? Возможно, с контекстом нужно еще что-то делать?..