首页
社区
课程
招聘
请教一个PE病毒的小问题
2006-6-8 08:30 3910

请教一个PE病毒的小问题

2006-6-8 08:30
3910
当系统打开一个可执行文件的时候,它会调用Kernel32.dll中的CreateProcess函数;CreateProcess函数在完成装载应用程序后,会先将一个返回地址压入到堆栈顶端,然后转向执行刚才装载的应用程序。当该应用程序结束后,会将堆栈顶端数据弹出放到IP中,继续执行,其实栈顶数据就是在Kernal32.dll中的返回地址

1.这句话中的栈顶返回地址,为什么说是Kernal32.dll中的返回地址,我还是不明白

2.一个.exe文件在windows系统双击运行后,是怎么被载入系统的,如果是CreateProcess完成装载的,而CreateProcess又是Kernal32.dll的函数,那么如果是call CreateProcess,它会将call CreateProcess指令的下一条地址压栈,而被压栈的地址我感觉应该是系统程序的地址,怎么会是Kernal32.dll中的返回地址,难道CreateProcess函数执行完装载任务,而被装载的程序也执行完毕之后还要跳到Kernal32.dll去执行其它操作么?如果是,那又执行什么操作呢?

3.还有Kernal32.dll的实际装入地址是否和PE头结构中的IMAGE_NT_HEADERS.OptionalHeader.ImageBase相等?

请教高手帮我一下

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 291
活跃值: (208)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
thebutterfly 5 2006-6-8 10:49
2
0
是在被执行程序的堆栈中压入返回地址,这个地址位于Kernel32.dll中,确实是系统地址,这个地址和调用者程序没有任何关系
如果ret了这个地址,表明被装载程序执行完毕,会返回到kernel32.dll中,在这儿,系统会替应用程序调用ExitThread函数,如果是程序的最后一个线程还会自动调用ExitProcess终止进程
当然,被执行程序通常自己调用ExitProcess结束,这个返回地址很少用到
游客
登录 | 注册 方可回帖
返回