回到顶部

教你如何写UPX脱壳脚本

时间:4年前   作者:BattleHeart   浏览:740   [站内原创,转载请注明出处]

标签: 脱壳破解  

一、开篇
首先要写在前面本篇文章写的UPX脱壳脚本有可能不是所有的UPX都使用,仅供学如果,仅供学习怎样去一个简单地脚本节省劳动力,这里不多废话,俗话说的好:“工欲善其事必先利器”,那么我们今天要用的利器就是OllySubScript脚本编写工具,有很多这类的工具,找一个就好了!下面就是对写脚本的具体分析。
这里重点说明一点:写脚本其实就是对在OD中进行分析得来的,这句话说通俗点就是比如我们载入OD后我们都会F8单步走,那么对应翻译成脚本就是STO,我们在脚本中写STO就是单步走一下!
今天我们要写的加了UPX壳的DLL,顺便将DLL的重定位地址找到;着重讲的是一个思路,这里重点思路是UPX壳是开始都是pushad和结尾是popad,这里就算是我们找到的一个特征码,记录下来我们将DLL文件载入到OD中进行查看!首先用PEID查壳看一下壳的版本!
将DLL文件载入到OD中。相信大家手托过UPX的都知道往下拉看看结尾处!
    我们通过这个跳转到OEP的上面看到popad这个指令,那么我们就可以找到一个关键点,也就是这个popad这里,那么我们就从这里下手!进行写脚本!我们可以通过OD里面的搜索功能查找popad出现的次数,Ctrl+F查找popad;发现还有一个地方有这个指令,就是下面这里:
       既然我们已经找到了这个关键点Popad了,那么我们就来开始写脚本!
       首先我要在脚本中写找到popad这个指令的语句,用Find查找来进行,类似于OD里面的Ctrl+B查找61;如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0
Var cc                //这里声明一个变量用来保存$RESULT的值
FIND eip, #61#         //类似于Ctrl+B,结果保存在$RESULT当中
MOV cc,$RESULT        //将查找的61的地址保存在cc中,注意这里查找的popad是100A0A29地址处的popad,注意我们在这个地方下硬件执行断点时候OD停不下来,那么我们就可以ret后面进行下断点2F-29=6,那么我们就在这个cc基础上加6
ADD cc,6
BPHWS cc,”x”           //在指定地址,设置硬件断点。有三种模式: "r" - 读取, "w" - 写入 或者 "x" - 执行.
RUN                                //运行
MSG   $RESULT                //弹出地址下硬件执行断点的地址(用来做测试)
BPHWC  cc                        //清楚硬件执行断点

上面的代码就会运行到我们查找的第一个popad后面的100A0A2F处断下,代码是add edi,0x4,100A0A2F处下面再查找popad的时候就是到OEP的那个Jmp上面的Popad了!




FIND eip, #61#                         //类似于Ctrl+B,结果保存在$RESULT当中
BPHWS $RESULT, "x"
RUN  
MSG $RESULT   
BPHWC $RESULT

   这时候代码就会段在图一所示的100A0A60处的popad,那么我们接下来要做的只需要单步两下,再对代码进行分析就到了OEP

STO                                         //单步F8运行
STO                                        //单步F8运行
MSG "欢迎来到OEP,By:BattleHeart"
AN eip                                //对程序进行分析
RET




    这样初步的脚本就写完了,接下来就是我们所说的对DLL进行加壳之后比EXE多一个重定位的查找;
    这里我们说一个快速查到的UPX壳的DLL重定位地址的方法,那就是搜索下面这几条语句;
xchg ah,al
rol        eax,0x10
xchg ah,al
add eax,esi

    这几条指令上面会有moveax,dword ptr ds:[ebx]dword ptr ds:[ebx]存放的就是重定位的地址。
        那么我们就需要查找这几个指令,进行查找重定位地址
VAR tezhengma1                //用来存放重定位地址
VAR ee                        //用来存放$RESULT的结果
FIND eip,#86c4c1c010#        //查找上面指令
MOV ee,$RESULT
MSG $RESULT                        //这里地址是100A0A46
SUB ee,2                                //100A0A44这个位置
BP ee                                //断点到Mov eax,dword ptr ds:[ebx]
MOV tezhengma1,[ebx]        //既然已经断在了这个位置那么我们就可以取出这个值并弹出来
MSG tezhengma1
BC ee                                //清楚F2断点


分析完毕;
       整个脚本就是如下所示;
//UPX脱壳脚本之一
VAR cc
VAR tezhengma1
 
VAR ee
FIND eip,#86c4c1c010#
MOV ee,$RESULT
MSG $RESULT
SUB ee,2
BP ee
MOV tezhengma1,[ebx]
MSG tezhengma1
BC ee
FIND eip, #61#  
MOV cc,$RESULT
ADD cc,6
BPHWS cc, "x"
RUN 
MSG   $RESULT
BPHWC  cc
FIND eip, #61# 
BPHWS $RESULT, "x"
RUN  
MSG $RESULT   
BPHWC $RESULT 
STO 
STO
MSG "欢迎来到OEP,By:BattleHeart"
AN eip
RET


         运行结果:
     这个是重定位处断下的地址
      这个是重定位地址:别忘了减去基址哦!
      第一个Popad地址:
      断在了popad

8.png (64.83 KB, 下载次数: 0)

下载附件  保存到相册

图八

2014-10-18 22:09 上传

          OEP了!
程序下载地:链接: http://pan.baidu.com/s/1o6HmsrC 密码: a2b6


希望大家在看的时候别忘了给点热心值,写文章不易啊!!各位看官

请喊我大龙哥最后编辑于:3年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。