吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 7462|回复: 41

[原创逆向图文] 教你如何写UPX脱壳脚本

  [复制链接]
BattleHeart 发表于 2014-10-18 19:58 | 显示全部楼层 |阅读模式

本帖最后由 BattleHeart 于 2014-10-18 20:34 编辑

一、开篇
首先要写在前面本篇文章写的UPX脱壳脚本有可能不是所有的UPX都使用,仅供学如果,仅供学习怎样去一个简单地脚本节省劳动力,这里不多废话,俗话说的好:“工欲善其事必先利器”,那么我们今天要用的利器就是OllDbgScript脚本编写工具,有很多这类的工具,找一个就好了!下面就是对写脚本的具体分析。
这里重点说明一点:写脚本其实就是对在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

  1. Var cc                                                //这里声明一个变量用来保存$RESULT的值
  2.         FIND eip, #61#                                 //类似于Ctrl+B,结果保存在$RESULT当中
  3.         MOV cc,$RESULT                        //将查找的61的地址保存在cc中,注意这里查找的popad是100A0A29地址处的popad,注意我们在这个地方下硬件执行断点时候OD停不下来,那么我们就可以ret后面进行下断点2F-29=6,那么我们就在这个cc基础上加6
  4.         ADD cc,6
  5.         BPHWS cc,”x”                        //在指定地址,设置硬件断点。有三种模式: "r" - 读取, "w" - 写入 或者 "x" - 执行.
  6.         RUN                                                //运行
  7.         MSG   $RESULT                        //弹出地址下硬件执行断点的地址(用来做测试)
  8.         BPHWC  cc                                //清楚硬件执行断点
复制代码
上面的代码就会运行到我们查找的第一个popad后面的100A0A2F处断下,代码是add edi,0x4,100A0A2F处下面再查找popad的时候就是到OEP的那个Jmp上面的Popad了!
  1. FIND eip, #61#                         //类似于Ctrl+B,结果保存在$RESULT当中
  2. BPHWS $RESULT, "x"
  3. RUN  
  4. MSG $RESULT   
  5. BPHWC $RESULT
复制代码
     这时候代码就会段在图一所示的100A0A60处的popad,那么我们接下来要做的只需要单步两下,再对代码进行分析就到了OEP
  1. STO                                         //单步F8运行
  2. STO                                                //单步F8运行
  3. MSG "欢迎来到OEP,By:BattleHeart"
  4. AN eip                                        //对程序进行分析
  5. RET
复制代码
     这样初步的脚本就写完了,接下来就是我们所说的对DLL进行加壳之后比EXE多一个重定位的查找;

     这里我们说一个快速查到的UPX壳的DLL重定位地址的方法,那就是搜索下面这几条语句;
  1. xchg ah,al
  2. rol        eax,0x10
  3. xchg ah,al
  4. add eax,esi
复制代码
     这几条指令上面会有moveax,dword ptr ds:[ebx]dword ptr ds:[ebx]存放的就是重定位的地址。

图四

图四
图四
        那么我们就需要查找这几个指令,进行查找重定位地址:

  1. VAR tezhengma1                        //用来存放重定位地址
  2. VAR ee                                        //用来存放$RESULT的结果
  3. FIND eip,#86c4c1c010#                //查找上面指令
  4. MOV ee,$RESULT               
  5. MSG $RESULT                        //这里地址是100A0A46
  6. SUB ee,2                                        //100A0A44这个位置
  7. BP ee                                        //断点到Mov eax,dword ptr ds:[ebx]
  8. MOV tezhengma1,[ebx]                //既然已经断在了这个位置那么我们就可以取出这个值并弹出来
  9. MSG tezhengma1
  10. BC ee                                        //清楚F2断点
复制代码
        分析到此完毕;         整体脚本如下所示:

  1. //UPX脱壳脚本之一
  2. VAR cc
  3. VAR tezhengma1
  4. VAR ee
  5. FIND eip,#86c4c1c010#
  6. MOV ee,$RESULT
  7. MSG $RESULT
  8. SUB ee,2
  9. BP ee
  10. MOV tezhengma1,[ebx]
  11. MSG tezhengma1
  12. BC ee
  13. FIND eip, #61#  
  14. MOV cc,$RESULT
  15. ADD cc,6
  16. BPHWS cc, "x"
  17. RUN
  18. MSG   $RESULT
  19. BPHWC  cc
  20. FIND eip, #61#
  21. BPHWS $RESULT, "x"
  22. RUN  
  23. MSG $RESULT   
  24. BPHWC $RESULT
  25. STO
  26. STO
  27. MSG "欢迎来到OEP,By:BattleHeart"
  28. AN eip
  29. RET
复制代码
       运行结果截图查看:
     这个是重定位处搜索出来的地址:

图五

图五
图5
     这个是重定位地址:别忘了减去基址哦!
   

图六

图六
图六
          第一个Popad地址:

图七

图七


图七

      断在了popad

图八

图八

图八


          这里就是OEP了:

   

图九

图九

图九



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

点评

rain灿”点评说:
这个必须顶  发表于 2014-10-20 21:00

评分

参与人数 34威望 +2 HB +71 THX +17 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
29590 + 1
24567 + 1
Jawon + 2
创客者V2.0 + 1
一路走来不容易 + 1
Soul1999 + 1
仙仙猫 + 1
娄胖胖 + 1
yexing + 1
消逝的过去 + 1
a849814230 + 2
zyyujq + 1
hbyaojing + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
天使替我爱你 + 1
SmallEXpel + 1
叶落花开 + 1
hnymsh + 1
lies + 1
商都赵永强 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
海天一色001 + 1 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
梅川酷酷 + 2 + 1 吃水不忘打井人,给个评分懂感恩!
2250372869 + 1 分享精神,是最值得尊敬的!
万能的群主 + 1 评分=感恩!简单却充满爱!感谢您的作品!
haliyou001 + 1 评分=感恩!简单却充满爱!感谢您的作品!
亿联网络 + 3 + 1 热心人终将成为大牛!
123 + 3 + 1 论坛有你更精彩!感谢楼主!
lou121505 + 1 积极评分从我做起,感谢!
rain灿 + 3 + 1 积极评分从我做起,感谢!
王尼玛 + 8 + 1 积极评分从我做起,感谢!
codelive + 3 + 1 Get!Thanks!
冰X糖 + 3 + 1 对于UPX我还是喜欢用静态脱壳机,懒得修复。
Shark恒 + 1 + 20 + 1 你将受到所有人的崇拜!
heiheidz + 1 + 5 最好弄个Safengine通用脱壳脚本

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
PS_URINE 发表于 2014-10-18 20:51 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
heiheidz 发表于 2014-10-18 21:40 | 显示全部楼层

最好写个Safengine那样就比好了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
王婆卖瓜 发表于 2014-10-18 23:52 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2014-10-19 01:04 | 显示全部楼层

你是第一个教写脚本的,加入精华~感谢楼主的原创作品~
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
战股神 发表于 2014-10-19 06:35 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| BattleHeart 发表于 2014-10-19 07:23 | 显示全部楼层

Shark恒 发表于 2014-10-19 01:04
你是第一个教写脚本的,加入精华~感谢楼主的原创作品~

谢谢恒大的支持
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
秦刚毅 发表于 2014-10-19 08:31 | 显示全部楼层

UPX不是esp定律可脱吗?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| BattleHeart 发表于 2014-10-19 08:55 | 显示全部楼层

秦刚毅 发表于 2014-10-19 08:31
UPX不是esp定律可脱吗?

可以呀!没有说不可以呀!教怎么写脚本呢!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
暗淡辉煌 发表于 2014-10-19 19:23 | 显示全部楼层

最好写个Safengine那样就比好了,或者写个脱Safengine的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表