• 标 题:Ollydbg手动脱壳得几点小结 (4千字)
  • 作 者:sxssl[BCG]
  • 时 间:2003-5-4 22:21:32
  • 链 接:http://bbs.pediy.com

Ollydbg手动脱壳得几点小结:
 
    引子:2002.5.5是我有生以来最最黑暗的日子,那段时间我正当高三班主任而且5月份已临近高考,学生很需要我,我正带着高三4个班的课,没人能顶替我的工作,学校也很需要我,而就在那个时候我妻子刚好近四个月的身孕,家庭也很需要我,就在紧要关头,我被查出甲肝住进了医院。住院一个多月,这段最黑暗的时间总算过去了,2002.12.12我为之激动和期待了很久的小生命了来到了这个世界,从此开始了品尝为人父的辛劳与幸福。我是一位crack爱好者,没有别的,在这特殊的日子里谨想以此文纪念那段黑暗的日子,并祝福可爱的小生命永远健康幸福,也祝贺自己正式加入DFCG。

  一般认为手动脱壳的关键是找到软件的真正入口OEP,但是用ollydbg脱壳知道软件的真正入口OEP并不能解决问题,因为ollydbg的工作原理和softice、trw2000等的有所不同,在OEP未解压以前是不能在OEP设断上的,因此用ollydbg脱壳的关键是让程序中断在OEP,一旦中断在OEP脱壳就告完成。当然能够用冲击波等软件知道软件的OEP在用ollydbg脱壳中还是有一定帮助的。那么如何让程序中断在OEP呢?这里小结几种方法。
    方法一、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP) ctrl+b  Hex中输入壳的入口特征代码(如upx  61 E9),回车
              popad
    看到入口点jmp xxxxxx
F2在此行设断(或者将光标移动到这一行上按f4),F9,F8走1-2下,来到入口点,用ollydbg的插件dump选中程序进程dump程序。但此法对于有些入口点附近代码被压缩的程序就无能为力了。对于这种程序有方法二。
    方法二、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,ctrl+b  Hex中输入壳的入口特征代码(如upx  61 E9),回车,找不到
          popad
    jmp  xxxxxx
对于这种情况在用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no时程序停在入口处EP(注意不是OEP),先用F9,F8走几下,使特征代码解压缩再用上面的方法搜索壳的特征代码。一般都能解决问题。对于那些不知到壳特征代码的那怎么办呢?于是有了方法三。
    方法三、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP),一般代码为pushad、  pushfd等。自己用眼睛向下搜索与pushad 、 pushfd对应的popad、popfd 。F2在此行设断(或者将光标移动到这一行上按f4),F9,F8走1-2下,来到入口点,用ollydbg的插件dump选中程序进程dump程序。那么怎么知道找到的popad、popfd是与程序EP对应的popad、popfd呢?一般情况,对于保护不是非常强悍的壳向下找十几行或几十行看到的第一个popad、popfd即为对应的popad、popfd。而且入口点附近popad往往在下面几行还有指令ret。有些壳如PECompact它的入口处EP有  xxxxxxx    pushad
                        xxxxxxx    pushfd

那么当你看到            xxxxxxx    popfd
                        xxxxxxx    popad    就找到了。如果向下找十几行或几十行找不到的popad、popfd那该怎么办呢?于是有了方法四。
    对方法三的补充:有些壳如果在ollydbg中找popad是行不通的,因为用ollydbg载入脱壳对象时第1个消息框,点yes,第2个消息框,点no,ollydbg没有中断在pushad上,我曾碰到过用ollydbg载入脱壳对象时第1个消息框,点yes,第2个消息框,点no,ollydbg没有中断在popad上,这样OEP应该在pashad附近,所以应该与之对应pushad。一般这样的壳保护比较弱。很容易脱的。
  方法四、用ollydbg载入程序,,第1个消息框,点yes,第2个消息框,点no,程序停在入口处EP(注意不是OEP),一般代码为pushad、  pushfd等。自己用眼睛向下搜索与pushad 、 pushfd对应的popad、popfd。向下找十几行或几十行找不到的popad、popfd那必须先用F9,F8走几下,使特征代码popad、popfd解压缩再搜索popad、popfd。
  方法五、对于大量使用SEH,保护非常强悍的壳,如aspr需采用以下方法。
        1、使程序运行到最后一次SHE,最后一次SHE如何确定?记下程序运行的shift+f9次数n,shift+f9            n-1就是。
        2、看堆践处SHE  handle  f2设断,shift+f9查找popad、popfd即可。
        3、如果能够知道OEP,此时步骤2也可用ctrl+g OEP按f4而且有些aspr版本必须用此法,否则非常麻烦
附表:壳名称、版本相应的特征代码
壳名称及版本    特征代码
Asprotect  1.0以下    EB 02 EB E8 61 EB 01
Asprotect  1.2    61 FF E0
ASPack 2.0以下    61 75 08 b8
PECompact 1.33    61 9D 50 68
Petite 2.1/2.2    61 66 9D 83 C4
PE-pack  all    89 44 24 1c 61 FF E0
Armadillo 2.51    03 F9 E8 A9 EE FF
Armadillo 2.52    03 F9 E8 2D EE FF
VBox 4.6.5    CD 20 FF E3
ASPack 2.12    B8 01 00 00 00 C2
UPX 1.20w    61 E9
Telock0.71    61 FF 64 24 DC
Exe32Pack 1.3x    E9 5E FE FF FF
有待补充    

                                                              转载请保持文章完整
                                                              sxssl[BCG][DFCG]
                                                                sxssl@163.com
                                                                2003.5.4晚