ebx为什么指向PEB_Win32系统中进程主线程初始化[菜鸟入门]
本文“ebx为什么指向PEB_Win32系统中进程主线程初始化[菜鸟入门]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Win32系统中进程主线程初始化时,ebx为什么指向PEB
阳光在阅读《脱壳的艺术》,此中阐述某些壳改正程序流程的办法,是利用CreateProcess(CREATE_SUSPENDED)成立新的被挂起的进程,此时其初始化线程上下文中,ebx即为其PEB指针.
于是阳光找我谈论这是为什么.我相信大家在用OD的历程中也早已发现,假如不利用CREATE_SUSPENDED,初始化线程在跑到进口点后,其ebx一样指向PEB构造.
明显,我们必须进入Win32系统新进程成立的历程来找这个本相.由于我们知道初始化线程被成立后(还没有Resume)ebx就已经指向PEB了,所以要不然就是在NtCreateThread历程中,要不然就是在它前面.同时也应当在NtCreatePeb之后.因此我就在这个范围内找寻.
应当说这里我犯了个错误,就是没有具体看CreateProcess的流程,而是用力往NtCreateThread的内核代码看去,N多函数调用关系看得我眼花,固然这些内核函数对线程的Context有诸多操作,但是均并不触及其Ebx.
最后终于回过头来看CreateProcessInternalW在NtCreateThread之前的历程.《Windows Internals 4th》在这里一句话带过了:
Before the thread can be created, it needs a stack and a context in which to run, so these are set up now.
本来是恰好在NtCreateThread之前,在用户态初始化了新线程的Context,再结合网上其他的文章,终于找到关键函数:kernel32!BaseInitializeContext.
BaseInitializeContext(PCONTEXT Context, // 0x200 bytes
PPEB Peb,
PVOID EntryPoint,
DWORD StackTop,
int Type // union (Process, Thread, Fiber)
);
IDA中看一下这个函数:
.text:7C810443
.text:7C810443 __stdcall BaseInitializeContext(x, x, x, x, x) proc near
.text:7C810443 ; CODE XREF: CreateRemoteThread(x,x,x,x,x,x,x)+84 p
.text:7C810443 ; CreateProcessInternalW(x,x,x,x,x,x,x,x,x,x,x,x)+690 p
.text:7C810443 ; CreateFiberEx(x,x,x,x,x)+82 p
.text:7C810443
.text:7C810443 Context = dword ptr 8
.text:7C810443 PPeb = dword ptr 0Ch
.text:7C810443 EntryPoint = dword ptr 10h
.text:7C810443 StackTop = dword ptr 14h
.text:7C810443 Type = dword ptr 18h
.text:7C810443
.text:7C810443 ; FUNCTION CHUNK AT .text:7C81508E SIZE 00000019 BYTES
.text:7C810443 ; FUNCTION CHUNK AT .text:7C82FF86 SIZE 0000000F BYTES
.text:7C810443
.text:7C810443 mov edi, edi
.text:7C810445 push ebp
.text:7C810446 mov ebp, esp
.text:7C810448 mov eax, [ebp+Context]
.text:7C81044B mov ecx, [ebp+EntryPoint]
.text:7C81044E and [eax+CONTEXT.SegGs], 0
.text:7C810455 cmp [ebp+Type], 1
.text:7C810459 mov [eax+CONTEXT.Eax], ecx
.text:7C81045F mov ecx, [ebp+PPeb]
.text:7C810462 mov [eax+CONTEXT.Ebx], ecx
.text:7C810468 push 20h
.text:7C81046A pop ecx
以上是“ebx为什么指向PEB_Win32系统中进程主线程初始化[菜鸟入门]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |