首页
论坛
专栏
课程

[原创]**企业版代码分析记录 之 反调试和资源一致性校验

2018-1-6 15:10 5626

[原创]**企业版代码分析记录 之 反调试和资源一致性校验

2018-1-6 15:10
5626

0x00 序1

随着移动安全越来越火,各种调试工具也都层出不穷,最近脱360壳的人满天飞,我今天来调一下棒棒企业版。

0x00 序2

现在脱壳动态调试,静态分析,基本上都是只使用ida,但很少有人结合ida_python动态调试,使用ida_python能很大的提高工作效率,就比如脱壳需要过反调试,或者寻找dump点,所以不是打开一次ida,附加一次进程就能脱下壳的,所以笔者决定结合ida_python将调试中使用到的小技巧总结归纳一下。

0x01 过反调试

想要脱壳第一步就需要过反调试,众所周知,反调试有好多种,最基本的一个是读取proc文件状态,所以肯定会调用fopen,所以使用ida_python下一个断点 AddBpt(LocByName('fopen'));一路f9走到这里
图片描述
图片描述
图片描述
然后到lr的地方
图片描述
f5
图片描述
跟进来好多函数和变量都看不懂什么意思,分析之后使用ida_python重命名,就好分析了
图片描述
使用之后是不是豁然开朗
图片描述
图片描述
这个函数是检测了这些东西然后判断到正在调试调试,返回1
图片描述
那我们直接把这个返回值改成0
图片描述
图片描述
走出这个函数来到这里
图片描述
这两个函数都是调试检测如果检测到调试会走到下面的异常函数
图片描述
程序就会挂掉
同样修改返回值即可。

0x02 资源完整性代码分析

过掉反调试,断点断在 pthread_create 一路f9
图片描述
确定lr是libDexHelper.so,然后在r2和lr的地址都下断点,继续f9
图片描述
走到lr以后把主线程暂停
图片描述
继续f9就可以到资源完整性检测的线程
图片描述
这个函数会传入一个apk的安装路径。
然后她会分布操作
1读取assets/meta-data/manifest.mf内容
图片描述

 

2 读取 META-INF/MANIFEST.MF 文件内容
图片描述
3 这个函数就是拿本地预存的值和读取apk签名文件里面的hash比较
图片描述
4进入函数分析代码:它先通过META-INF/MANIFEST.MF把文件名和hash 存到一个链表

 

5 他把manifest.mf这个文件 读成下面的结构。存到数组
i4
Kg==
RYeUYd+yP3JShXAmdbN3b8xD1WE=
opzvAD5X42gY13rlJ8HQWfchSj4=
yeA+pIPECBn2xj16EBDWyU9mjwA=
DoiscxMD7gK0Al1/5z93eaQ4N7A=
C+KBdBCnBWNM4LIAYy9d7sJhBek=
6读取这个文件里面记录的每个文件的sha1的前4个字节拼接做一次base64再做一次sha1
图片描述
然后和manifest.mf 里面的最后一组比较
图片描述

 

到此为止梆梆企业版的反调试,和文件完整性校验已经分析完毕。
其实ida_python 还能做好多事情,比如把一段代码设置成函数,加注释,设置条件断点,打印数据,我这里就不一一列举了。
后续有时间在用ida_pyton去分析加壳代码去脱壳。。。。



[招聘]欢迎市场人员加入看雪学院团队!

最新回复 (19)
deadxing 2018-1-6 17:13
2
0
月莫
和蔼的哔哔 2018-1-6 17:24
3
0
junkboy 2018-1-6 17:56
4
0
fzyspark 2018-1-8 09:03
5
0
lfyyy 2018-1-8 09:41
6
0
yaojunhap 2018-1-9 14:09
7
0
兄弟,改名直接改就可以了,和IDA  Python有半点关系吗,你确定不是在误导大家。梆梆加固不止这一个反跳试手段吧,像inoftify,多进程守护,改写了fopen等底层函数,你搞得是啥版本啊。
bluth 2018-1-9 15:48
8
0
我也好奇怪,我遇到确实有fork反调试的  楼主没有遇到吗?
skyun 3 2018-1-10 09:25
9
0
yaojunhap 兄弟,改名直接改就可以了,和IDA Python有半点关系吗,你确定不是在误导大家。梆梆加固不止这一个反跳试手段吧,像inoftify,多进程守护,改写了fopen等底层函数,你搞得是啥版本啊。
哥们手动改名一次不麻烦,多次调试,多次中断,还手动改名吗。。。。
对于fopen他好像hook了吧,判断了一些东西,但是对于打开proc他还是执行了原始的fopen。
对于多进程守护,fork我没有具体分析,我觉得是我先附加上他了,而他不能自己附加,然后他的一个子进程就成了僵尸进程,然后还是从  proc里面判断的是不是僵尸进程
skyun 3 2018-1-10 09:26
10
0
bluth 我也好奇怪,我遇到确实有fork反调试的 楼主没有遇到吗?
你看看我上面回答的
jiych 2018-1-10 15:14
11
0
样本分享一下,谢谢楼主
skyun 3 2018-1-11 10:09
12
0
 

因为调试记录是我2个月前调试的。之前的样本没有了。我下载了一个,可能
ida_python 脚本里面的偏移应该不一样,里面的函数基本上都一样,具体你看看把

skyun 3 2018-1-11 10:12
13
0
 

我添加的附件我自己的看不到在哪里。

vVv一 2018-1-11 10:18
14
0
附件在哪里?
jiych 2018-1-11 10:37
15
0
没有看到样本啊
skyun 3 2018-1-11 15:30
16
0
你们从应用宝下载重庆银行看看。。。
zhengsidie 2018-1-15 14:58
17
0
可以的,没有附件差评
走码观花 2018-1-21 16:12
18
0
梆梆会fork出来一个子进程去ptrace父进程
skyun 3 2018-1-21 22:41
19
0
走码观花 梆梆会fork出来一个子进程去ptrace父进程
然后没有附加成功,然后就成了僵尸进程
cydian 2018-12-16 01:26
20
0
skyun 你们从应用宝下载重庆银行看看。。。
这个函数是检测了这些东西然后判断到正在调试调试,返回1                你说的这个函数是哪个函数
游客
登录 | 注册 方可回帖
返回