当前位置:七道奇文章资讯安全技术菜鸟入门
日期:2009-12-19 13:25:00  来源:本站整理

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

[1] [2] [3]  下一页


  以上是“ebx为什么指向PEB_Win32系统中进程主线程初始化[菜鸟入门]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • ebx为什么指向PEB_Win32系统中进程主线程初始化
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .