首页
社区
课程
招聘
一个脱壳初学者的艰苦历程-基础太欠缺是搞不转脱壳的
发表于: 2006-11-21 11:17 4404

一个脱壳初学者的艰苦历程-基础太欠缺是搞不转脱壳的

2006-11-21 11:17
4404
前几天在论坛上问了个问题,就是关于ollydbg中Debugging options->Events->Make first pause at : System breakpoint,Entry point of main module和WiNMain 的区别,幸得forgot老大的指点,学到了不少东西,同时也感觉到自己基础知识的严重匮乏。于是开始查看一些相关的资料。
经过几天的查阅,误解了(之所以是误解,等会儿看到结论就晓得啦)一些东西:
(1) 操作系统运行程序时,先调用CreateProcessA函数,然后把eip设置为PE文件头中的AddressOfEntryPoint,这时才转入用户代码执行。
(2) 当我们写了一个程序,然后通过编译连接器生成PE文件时,这个文件的代码部分看起来像这样:
       _start_up
          ...
       call WinMain
          ...
        exit

PE文件头中的AddressOfEntryPoint被连接器设置为_start_up的地址,而非我们那个WinMain函数的地址。
(3) 一个PE被加壳后,还应该是一个合法的PE文件,其AddressOfEntryPoint被修改为进程执行的第一条用户代码,从这一条带码开始壳才获得控制权。

有了以上三点知识,我觉得应该可以了哈,于是找来了一个没有加过壳的PE可执行文件,用PE Explorer查看了其文件头信息,得知其AddressOfEntryPoint=00401638h,然后设置ollydbg的Make first pause at : Entry point of main module并载入,程序停在了00401638h处,然后再设置Make first pause at : WiNMain再重新载入,程序还是停在了00401638h处,这个应该是可以理解的,毕竟程序没有运行,所以他只能停在AddressOfEntryPoint处。
有了这个初试牛刀,我觉得还可以嘛,好像懂了耶。满心欢喜的从本版置顶的kanxue老大的那基础教学文章中下载了那个附件--notepad.upx.exe来分析,用PE Explorer得知其AddressOfEntryPoint=004010CC,可是我设置Make first pause at : Entry point of main module并载入却停在了0040E8C0处,我再设置Make first pause at : System breakpoint并载入,断在了系统空间,然后我一直F8回到了用户空间的第一条指令也是在0040E8C0处,这个是为何,难道PE文件头部中的这个AddressOfEntryPoint在加壳后的文件中无用?那么系统是怎么知道我该从用户空间的哪一条指令开始执行?
呵呵,罗嗦了这么多,到后头看来我这几天万全是白费阿,还是没有搞懂啊。看来还得请各位帮帮我咯,这到底是怎么回事哦。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
最初由 mhmdanger 发布
notepad.upx.exe来分析,用PE Explorer得知其AddressOfEntryPoint=004010CC


notepad.upx.exe的AddressOfEntryPoint是0000E8C0,你换个PE工具查查,如LordPE。

PE Explorer查的4010cc是脱壳后文件的入口点。
PE Explorer支持插件,你会在PLUGINS目录发现unupx.dll插件,当PE Explorer打开upx外壳程序,会自动脱壳,再打开其分析。
因此平时查PE信息时,建议用专门的PE工具。
2006-11-21 11:34
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢 kanxue 老大,真是一语点醒梦中人哈
2006-11-21 12:55
0
游客
登录 | 注册 方可回帖
返回
//