1   1  /  1  页   跳转

[讲义] 基础脱壳教程-第二课 --视频教程

基础脱壳教程-第二课 --视频教程

讲义请参见Zapline大牛的帖子  http://bbs.ikaka.com/showtopic-8655071.aspx





视频收看地址  http://users4.jabry.com/mixer/aaa.htm





大家好,我是xiaomajia52,今天,我为大家演示Zapline牛发表的讲义的详细操作过程,今天的壳是UPX,UPX是老牌的压缩壳,压缩率非常不错。
NOTEPAD.EXE 这个是原来的程序
UPX 0.89.6 - 1.02  1.05 - 1.24.exe 这个是已经压缩过了的程序
我们先用PEid查看一些基本的信息吧,被压缩过了的程序,区段已经改变了,文件大小也已经改变了,好,我们进入OD看看。
刚才的那个窗口,意思就是“是否扫描被载入的文件”    1.什么叫做是否扫描被载入的文件,其实就是分析一些基本的结构特征,比如:循环体,API调用,字符串等等,
扫描之后,都将会表示在反汇编窗口中,调试的时候非常的方便和快捷,
对于脱壳,现在有很多中办法,比如说:用脚本脱壳,异常法,ESP定律法,找popad法等等,
根据Zapline牛的教程,我们可以知道
对于UPX,它会把代码和数据压缩后,放到UPX0区段里,运行时,先在UPX1区段把UPX0里的代码和数据解压,然后跳到OEP继续执行。
所以我们怎么样子才能知道他把代码和数据解压完毕,会跳到OEP执行呢?
我们要引入一个非常重要的概念: 断点(Break Point),何为断点,就像是一个护栏,你往前面走,但是我在你前方100米处设置护栏,你走过100米,就不能往前走了,
因为我设置了护栏= =;
01014240 >  60              pushad
01014241    BE 00000101    mov    esi, 01010000
01014246    8DBE 0010FFFF  lea    edi, dword ptr [esi+FFFF1000]
0101424C    57              push    edi
0101424D    83CD FF        or      ebp, FFFFFFFF
01014250    EB 10          jmp    short 01014262
我们看这个程序的头, 一个pushad, 在以前的讲义中,老师已经跟我说讲过了,pushad的作用就是把所有寄存器,eax,edx,ebx等的值保存下来,与pushad相对应的指令就是
popad,作用就是把刚才保存的值全部恢复出来,所以,对于普通的压缩壳,不会有太多的加密处理,所以我们可以跟着这一条思路,慢慢走下去,
我们可以先想到,既然有pushad,那么我们是不是可以找popad,来追踪一些蛛丝马迹呢?答案是肯定的,我们来看。
找到了一个popad,下面全部都是0000了,空白区域,
双击EIP,我们就又回到了起始地点,(EIP所指向的地方),对于搜索指令,我们可以使用快捷键 Ctrl+F,Find Command 搜索指令。Entire block就是整个块内搜索
我们只要找pushad下面的指令,所以把这个钩子去掉,我们输入要搜索的指令,popad,
找到了,我们下一个断点,对于下断点的方法,我来给大家说一下,我们今天先讲F2断点,我先来按一下F2
看见没,这行变成红色了,就是下断点成功了,再按一下,红色消失,就是取消了断点,在16进制代码行中双击鼠标左键,也可以下断点,Break Point-->toggle
这样也行,不过,最快速的方法就是直接按F2啦。下了断点,我们就要让程序运行,运行也就几种方法,
1.直接按F9
2.按一个小三角的箭头,
我们先来按F9试试看,

断下来了,EIP值已经指向了我们下断点的地方了。
要想重新载入被调试的程序,我们可以按这个按钮,是不是像是录音机的倒带建啊?
或者按Ctrl + F2 快捷键,要想熟练使用OD,还是得用快捷键,那样事半功倍。
我们重新载入
还有一点,就是关于系统断点和 WinMain断点,我现在停在了系统断点,有的同学的OD是停在了OEP
01014240 >  60              pushad
01014241    BE 00000101    mov    esi, 01010000
01014246    8DBE 0010FFFF  lea    edi, dword ptr [esi+FFFF1000]
0101424C    57              push    edi
0101424D    83CD FF        or      ebp, FFFFFFFF
01014250    EB 10          jmp    short 01014262
就是这,其实这个没有关系,以后的讲义中会详细介绍。我们暂时先不管,后面会讲解到。

pushad  保护场景,XXXXX            popad 恢复场景,那么中间他干什么了呢?中间复杂的过程,其实就是在解压数据,
我们单步跟踪,
单步跟踪有两个键,
F7  这个键就是叫做 步入 就是碰到 call 他就会跟踪进去
F8 这个键跟上面相同,不同的地方就是碰到 call,他不会跟踪进去
我们用F8单步
OK,这里就是OEP了,找到了OEp头,我们就要对期Dump和修复输入表,我们就使用OD的DUMP 插件直接Dump 吧
OD,Dump出来了,我们再用Peid查看一下,这个样子程序就已经脱壳了。
0100739D就是OEP,那么我们重新载入,看看刚刚载入的时候,这里是什么
全部都是0,数据被压缩了,OK,今天就为大家讲解到这,
本人水平有限,如果什么不对的地方,欢迎大家批评指正,谢谢观看~~~
最后编辑xiaomajia52 最后编辑于 2009-08-15 14:24:31
分享到:
gototop
 

回复:基础脱壳教程-第二课 --视频教程

8错8错,学习学习
没有生而知之,只有学而知之!
gototop
 

回复:基础脱壳教程-第二课 --视频教程

厉害  学习了 
期待更新  另外。。整一个汇总帖子吧 吧所有教程索引下
gototop
 

回复:基础脱壳教程-第二课 --视频教程

牛人是相当的多啊!
"安逸"比"成就"更实在!
gototop
 

回复:基础脱壳教程-第二课 --视频教程

视频很不错~~
gototop
 

回复:基础脱壳教程-第二课 --视频教程

整理下辛苦了~~~这个学习有用处的
gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT