吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5969|回复: 30

[原创逆向图文] 某款加密壳脱壳详解

  [复制链接]
仔仔爱逆向 发表于 2017-1-14 14:55 | 显示全部楼层 |阅读模式

本帖最后由 仔仔爱逆向 于 2017-1-18 21:18 编辑

第一次发帖,希望大家支持下!

环境:win7 x86
工具:OllyDbg/UIF通用修复工具/ImportRec/LoadPE
      

首先查壳,不知道什么写的:
pic (1).png

看看区段,虽然都被修改了,但可以猜测是VC6.0写的
pic (2).png

先让程序运行起来,找特征码:83EC58
只找到一处,所以的确是VC6.0写的,但是看第一个call,发现IAT被加密了,真实的OEP应该为00409486我们下一个硬件执行断点
pic (3).png

00409486,我们下一个硬件执行断点
pic (4).png

重新运行程序,点F9运行,程序没有断下来说明壳有反调试,把硬件断点清除了。
pic (5).png

那么清除硬件断点有2种方法:1.使用API:SetThreadContext
2.使用异常
首先把OD的异常选项都取消,
pic (6).png

StrongOD的选项也改下,如下图:
pic (7).png

第一次:内存访问异常
pic (8).png

点击SEH链中第一个,分析函数,发现这个不会改变硬件断点
pic (9).png

按Shift+F9跳过这个异常
第二个异常:除0异常
pic (10).png

点击SEH链中第一个,分析函数,发现这个不会改变硬件断点
pic (11).png

按Shift+F9跳过这个异常
第三个异常:特权指令异常
pic (12).png

点击SEH链中第一个,发现有点可疑,0043AF42下一个硬件执行断点
pic (13).png

按Shift+F9跳过这个异常,到达这个硬件断点
我们查看下eax+0x4的内存,发现跟硬件断点地址一样,就可以确定这个是修改硬件断点的地方
pic (14).png

把调试选项改成这样:
pic (15).png pic (16).png

重新运行,按F9,断在这里,选中以下
pic (17).png

填充为nop
pic (18).png

继续运行按F9
pic (19).png


发现可以断下,但是IAT还是被加密
查找所有模块间的调用
pic (20).png

发现有部分API是正常显示的,但是有部分应该被加密了
pic (21).png

我们随便进入一个API,数据窗口跟随一下
pic (22).png

我们往上找,发现IAT的起始地址为00422000
pic (23).png

在IAT的起始地址00422000下一个硬件写入断点:
pic (24).png

断下来后,nop掉清除硬件断点的代码,后最后一次断在这里004398CF:
pic (25).png

重新运行,重复之前操作,最后断在004398CF后单步跟踪
发现调用了dll
pic (26).png

寄存器窗口也有可疑字符串,之后发现这里面是一个循环,应该是遍历导出表
pic (27).png

找到循环的结尾,我们在004338FAD按F4跳出循环
pic (28).png


发现断在这里,因为advapi32.dll中RegCloseKey在程序运行的时候还能看到,那么RegCloseKey就是未加密的函数了,也就是说004390F7就是未加密IAT的赋值地址了。
pic (29).png

关于加密的函数,我们知道一个Kernel32.dll中的GetVersion,那么我们就在Kernel32.dll的导出地址表中GetVersion的位置下断点,用PE工具查看GetVersion的导出地址表RVA是000B5A74,转换为VA后我们下硬件访问断点
pic (30).png

转换为VA(这里的VA为770A5A74)后,我们下硬件访问断点:
pic (31).png

重新运行程序,重复之前操作,发现最后断在这里:
pic (32).png

我们单步F8一下,eax就是GetVersion的地址,那么这里就是原始IAT的地方了
pic (33).png

我们先到真实OEP地方:
pic (34).png

还是看GetVersion这个函数,因为这里被加密,所以我们需要知道什么时候加密的,那么我们下0043CFCD硬件写入断点
重新运行程序,重复之前操作,去除不可疑的地方,发现最后断在这里:
pic (35).png

看上面的EDI=0043CFCD与之前的call 的地址一样,并且EAX=00330742与之前看的001F0742的地址相似,可以断定,这是堆空间的地址,但是RVA是一样的都是0742,可以肯定这就是关键的地方。
我们往上看,发现写入断点虽然生效,但是却没有写入EDI的地方,所以判断这是反汇编引擎的识别问题
pic (36).png

但是应该就在上面附近,那么我们就用CTRL+G查看0043918C之前的n个字节的地址的反汇编,0043918B是pop es,这个不对,那么我们试试0043918A跳转,果然加密IAT写入:
pic (37).png

我们在执行完取得原始IAT后才能下0043918C的硬件断点,所以我们为了方便需要写脚本处理:
模拟手工脱壳
1.下断点,清除掉清除硬件断点的代码
0043AF42 ,nop掉43AF51-43AF72,共0x22字节
2.下断点,
原始IAT的下一条语句的地方                                                           00438f9f
不加密,写入IAT的地方                                                                     004390f9
加密,写入IAT的地方 ,这个可以不下断点                                        0043918c
原始OEP                                                                                  00409486

OD脚本代码:

VAR vAPIAddr // API地址

BPHWC  // 清除所有硬件断点
BPHWS 0043AF42,"x" // 清除硬件断点的异常处理函数,nop掉清除硬件断点的代码
BPHWS 00438f9f,"x" // 原始IAT的下一条语句的地方
BPHWS 0043918c,"x" // 加密,写入IAT的地方
BPHWS 00409486,"x" // OEP

RUN        // 运行程序
cmp eip,0043AF42  // 清除硬件断点的异常处理函数
fill 0043AF51,22,90  //填充为nop

LOOP_1:
RUN               // 运行程序

cmp eip,00438f9f // 获取IAT函数地址的地方
mov vAPIAddr,eax // 保存IAT的函数地址

RUN        // 运行程序

cmp eip,0043918c // 加密,写入IAT的地方
mov [edi],vAPIAddr
JE LOOP_1

cmp eip,00409486
JE EXIT_1
JMP LOOP_1

EXIT_1:
   MSG "修复完毕"


修复完毕后,dump出来
pic (38).png

然后重建导入表:
pic (39).png

最后用ImpRec修复dump文件的导入表
pic (40).png

最后结果正常打开软件:
pic (41).png

用PEID查看:
pic (42).png

最后,感谢大家能看完,感觉就是贴图不易,希望论坛越办越好!

原程序.rar

116.84 KB, 下载次数: 9, 下载积分: HB -3

评分

参与人数 30HB +37 THX +16 收起 理由
lies + 1
禽大师 + 1
NOP + 1 [吾爱汇编论坛 52HB.COM]- 吃水不忘打井人,给个评分懂感恩!
sjtkxy + 1 + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
霍华德 + 1 + 1
创客者V2.0 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
消逝的过去 + 2
冷亦飞 + 1
小菜虫 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
temp + 1 + 1
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
weiran324 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
honeysu + 1 + 1
EMT + 1 + 1
努力实现自由 + 1
叶落花开 + 2
mengzhisuoliu + 1
mengzhisuoliu1 + 1
597444660 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
ll337069905 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
xiaoxing + 1 + 1 分享精神,是最值得尊敬的!
ddx123 + 1 分享精神,是最值得尊敬的!
Shy + 1 + 1 2017,让我们17学破解!
李沉舟 + 3 + 1 2017,让我们17学破解!
逍遥枷锁 + 1 + 1 2017,让我们17学破解!
zby03772015 + 5 + 1 分享精神,是最值得尊敬的!
cc2008cb + 1 吃水不忘打井人,给个评分懂感恩!
cqr2287 + 5 + 1 太好了

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
cqr2287 发表于 2017-1-14 15:39 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
cc2008cb 发表于 2017-1-14 15:44 | 显示全部楼层

欸,我得学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
DEEMO 发表于 2017-1-14 16:32 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2017-1-14 19:50 | 显示全部楼层

写的真不错,学习了     
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
piaoyi01 发表于 2017-1-14 23:07 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
topcookie 发表于 2017-1-15 01:08 | 显示全部楼层

太强大了,看的偶晕晕糊糊的
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
tom2017 发表于 2017-1-15 01:16 | 显示全部楼层

谢谢楼主分享 学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
动物凶猛 发表于 2017-1-18 14:57 | 显示全部楼层

真正的大牛啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
joesen 发表于 2017-1-18 17:14 | 显示全部楼层

感谢楼主  学习学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!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

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