cnpaf.net - 中国协议分析网

投递文章 投稿指南 RSS订阅 网站通告:
搜索: 您的位置主页>网络安全>工具使用>阅读文章

压缩与脱壳-自动脱壳 中

12-20 13:48 来源: 作者: 【 评论:0 浏览:
具体如下:

0137:0043D100  PUSHAD                 程序会中断于这里

0137:0043D101  MOV       ESI,0042B0D9

0137:0043D106  LEA       EDI,[ESI+FFFD5F27]

0137:0043D10C  PUSH      EDI

0137:0043D10D  OR        EBP,-01

0137:0043D110  JMP       0043D122          跳到解压程序

0137:0043D112  NOP

0137:0043D113  NOP

解压程序的入口:

0137:0043D122  8B1E                MOV       EBX,[ESI]

0137:0043D124  83EEFC            SUB        ESI,-04

0137:0043D127  11DB                ADC        EBX,EBX

0137:0043D129  72ED                JB           0043D118

0137:0043D12B  B801000000      MOV       EAX,00000001

0137:0043D130  01DB                ADD        EBX,EBX

0137:0043D132  7507                 JNZ         0043D13B

0137:0043D134  8B1E                MOV       EBX,[ESI]

好了在解压程序里面,程序会做无数次的循环,我没有必要了解它是如何进行加压的,所以就把光标一直向下走,一直走到这里:

0137:0043D250  EBD6                JMP       0043D228

0137:0043D252  61                    POPAD

0137:0043D253  C3                     RET

0137:0043D254  61                     POPAD

0137:0043D255  E9D6A1FDFF    JMP       00417430        这就是程序的真正入口了

0137:0043D25A  0000                 ADD       [EAX],AL

0137:0043D25C  0000                 ADD       [EAX],AL

0137:0043D25E  0000                 ADD       [EAX],AL

好开心啊!终于找到了入口地址,如果你只是针对某一个特定的程序而脱壳的,那么现在就可以TRWpedump命令直接脱壳了,但这不是我们所要的,我们现在是要研究UPX0.82的壳,要写一个通用的脱壳ini加入到Procdump1.50里面,那么,这样你以后就可以很方便脱掉UPX0.82的脱了,同时也很方便网上传播了,让别人也能分享你的成果,这才是真正的Cracker精神。

操作:

1.Ultraedit6.10打开Procdump1.50目录下的Script.ini文件;

它的格式如下:

[INDEX]

P1=Hasiuk/NeoLite

P2=PESHiELD

P3=Standard

P4=Shrinker 3.3

P5=Wwpack32 I

P6=Manolo

P7=Petite<1.3

P8=Wwpack32 II

P9=Vbox Dialog

PA=Vbox Std

PB=Petite 1.x

PC=Shrinker 3.2

PD=PEPack

PE=UPX                         修改为PE=UPX<0.7X

PF=Aspack<108

P10=SoftSentry

P11=CodeSafe 3.X

P12=Aspack108

P13=Neolite2

P14=Aspack108.2

P15=Petite 2.0

P16=Sentinel

P17=PKLiTE

P18=Petite 2.1

P19=PCShrink

P1A=PCGUARD v2.10

P1B=Aspack108.3

P1C=Shrinker 3.4

P1D=UPX0.7X-0.8X     加入这句

然后找到:

[UPX]                       修改为[UPX<0.7X]

然后在文件最下面加入:

[UPX0.7X-0.8X]

好了,准备功夫我们都做好了,现在可以写UPX0.82的脱壳扩展了,首先我们可以见到程序有两个跳动的地方,第一个是:

0137:0043D110  JMP       0043D122          跳到解压程序

所以我们马上把机器代码抄下来:

EB,10

第二个是:

0137:0043D255  E9D6A1FDFF    JMP       00417430        这就是程序的真正入口了

机器代码就是:

E9,D6,A1,FD,FF

好了,所有的要找到东西我们都已经找到了,我们就开始编写UPX0.82的脱壳扩展了。

我编写的具体如下:

[UPX0.7X-0.8X]

L1=OBJR                                    ;在扫描开始处设置初始的内存地址

L2=LOOK EB,10            ;查找第一个EB,10程序代码

L3=BP                                        ;在当前内存位置设置断点

L4=WALK                                    ;交还控制权到Procdump并且执行下一个指令

L5=OBJR                                    ;在扫描开始处设置初始的内存地址

L6=LOOK 61,E9                       ;查找第一个EB,10程序代码

L7=BP                                        ;在当前内存位置设置断点

L8=STEP                                    ;一步一步地跟踪分析程式

好了,以上的解释都很清楚了,没有什么不明白了,我们把文件保存后,再次运行Procdump1.50Choose Unpacker中可以见到多了一个UPX0.7X-0.8X项了,选择它,进行脱我们加了脱的程序,哈哈,叫我们保存了,你可以不要高兴得太早了,你试一试运行dump程序,哦不能运行,非法操作。不要心急,我们好象还有点东西要加上呢!那就是dump的可选参数了,Procdump1.50一共给我们提供了五组可选参数,如果你没有特别指出,就用默认值。好我们加上去试一试吧!

OPTL1=00000000

OPTL2=01010001

OPTL3=01010001

OPTL4=00030000

OPTL5=00000000

  以上这五参数是最常用的,你加参数时可要先试试,或者加了之后就可以用了,好我们加上,试一试。

以下文章所述,可能在有的机器上有不同的结果,请自行修正:

作者的机器是:

赛扬300A(超450

PC100-64M内存

当我再次运行Procdump1.50来脱壳程序时,竟然程序一下子就运行了,根本不象上次那样提示要我保存脱壳后的文件,所以我想,可能这些参数有些不合适我的机器,于是我认真分析了每一个参数的真正含义之后,就把参数作了如下的修改:

OPTL1=00000001        这是延迟时间,我设为1ms 

OPTL2=01010101        采用了快速dump的工作方式

OPTL3=01010001

OPTL4=00030000

OPTL5=00000000

今次再运行Procdump1.50进行脱壳,哈哈!!!可以脱了,然后再双击脱壳后的文件,咦,可以执行了,再用Wdasm8.93反汇编分析一下文件,发现基本和原文件相同,只是文件大小有点不同,大了一点,再用了一下软件的各种功能,一切正常,所以应该说脱壳是成功的,到此,文章也该在此结束了,不过好象还漏了点事,就是用MakePe1.27帮助脱壳后的文件作进一步的优化,这就不一一描述了,自己看帮助进行吧!好了,最后总结一下吧!

完整地加入:

[UPX0.7X-0.8X]

L1=OBJR

L2=LOOK EB,10

L3=BP

L4=WALK

L5=OBJR

L6=LOOK 61,E9

L7=BP

L8=STEP

OPTL1=00000001

OPTL2=01010101

OPTL3=01010001

OPTL4=00030000

OPTL5=00000000

By The Way

我发现对于使用UPX0.7xUPX0.8x加壳的软件,用我的方法都可以成功脱壳。

 

4、Procdump中文说明书 

  大家好!早两天放上了提高篇(10)后,大家的反应还不错,不过对于一些朋友来说,要想用好Procdump1.50,可能还有点问题,因为它的Script的说明书是英文的,对于英文不是太好的朋友,这就成为一个很大的问题了。昨晚,在白菜的聊天室内,我Ding Boy等高手一起聊天,Ding Boy就建议我把Procdump1.50的说明书翻译成中文,方便广大的朋友学习和使用Procdump1.50,本着我不入地狱,谁入地狱的决心,我就着手了翻译工作,由于本人的英文也不是太好!所以在Procdump1.50Script说明书的翻译过程中,难免会有一些错误的地方,同时我的语文水平也不见得好到那里去,有时英文了解什么意思,中文也不知如何表达,所以也难免有一些词不达意,还有一些地方,我只能根据意译的方法来完成了,因为如果一字一字的合并起来,句子的意思可能不知它说什么。花了三个小时的时间,终于完成了,但为了有点记念意义,就把译文放进了提高篇(11)当中了,希望大家喜欢!

读者要求:

你可以阅读和传播本文章,但不能对文章的内容作任何的修改,请尊重作者(译)的劳动

*********************************

ProcDump32Script扩展:

*********************************

  

A) 功能定义:

*************************

1) Look功能:

 这个Look功能是在被载入的程序中查找指定的HEX字串。它会把找到了的内存地址保存下来以便你可以方便在此内存地址设置断点。

例:

   Look OF,85将用于搜索一个JNE或一个长jump。你可以通过BP命令来设置断点。

2) ADD功能:

 允许你在当前内存地址上加一个变址值(例:出现于look命令或POS命令之后)。

3) DEC功能:

猜测;)

4) REPL功能

 这个功能用于在当前内存中修改内码(连续的HEX)(注:它出现在look命令之后)。

收藏此篇文章内容到:
Tags:
责任编辑:
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 密码: 匿名:
    评论总数:0 [ 查看全部 ] 网友评论
    关于我们 - 广告合作 - 网站地图 - 版权说明 - 网站历史 - 世界排名 - 加入收藏 - 设为首页 - 返回顶部