首页
社区
课程
招聘
[原创]**企业版代码分析记录 之 反调试和资源一致性校验
发表于: 2018-1-6 15:10 11725

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

2018-1-6 15:10
11725

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

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

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

过掉反调试,断点断在 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 存到一个链表


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (20)
雪    币: 20
活跃值: (210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
月莫
2018-1-6 17:13
0
雪    币: 1821
活跃值: (831)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2018-1-6 17:24
0
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2018-1-6 17:56
0
雪    币: 263
活跃值: (444)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
2018-1-8 09:03
0
雪    币: 268
活跃值: (630)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
6
2018-1-8 09:41
0
雪    币: 67
活跃值: (53)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
兄弟,改名直接改就可以了,和IDA  Python有半点关系吗,你确定不是在误导大家。梆梆加固不止这一个反跳试手段吧,像inoftify,多进程守护,改写了fopen等底层函数,你搞得是啥版本啊。
2018-1-9 14:09
0
雪    币: 7
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我也好奇怪,我遇到确实有fork反调试的  楼主没有遇到吗?
2018-1-9 15:48
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
9
yaojunhap 兄弟,改名直接改就可以了,和IDA Python有半点关系吗,你确定不是在误导大家。梆梆加固不止这一个反跳试手段吧,像inoftify,多进程守护,改写了fopen等底层函数,你搞得是啥版本啊。
哥们手动改名一次不麻烦,多次调试,多次中断,还手动改名吗。。。。
对于fopen他好像hook了吧,判断了一些东西,但是对于打开proc他还是执行了原始的fopen。
对于多进程守护,fork我没有具体分析,我觉得是我先附加上他了,而他不能自己附加,然后他的一个子进程就成了僵尸进程,然后还是从  proc里面判断的是不是僵尸进程
2018-1-10 09:25
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
10
bluth 我也好奇怪,我遇到确实有fork反调试的 楼主没有遇到吗?
你看看我上面回答的
2018-1-10 09:26
0
雪    币: 178
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
样本分享一下,谢谢楼主
2018-1-10 15:14
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
12
 

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

2018-1-11 10:09
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
13
 

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

2018-1-11 10:12
0
雪    币: 232
活跃值: (1796)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
附件在哪里?
2018-1-11 10:18
0
雪    币: 178
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
没有看到样本啊
2018-1-11 10:37
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
16
你们从应用宝下载重庆银行看看。。。
2018-1-11 15:30
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
可以的,没有附件差评
2018-1-15 14:58
0
雪    币: 3
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
梆梆会fork出来一个子进程去ptrace父进程
2018-1-21 16:12
0
雪    币: 729
活跃值: (1306)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
19
走码观花 梆梆会fork出来一个子进程去ptrace父进程
然后没有附加成功,然后就成了僵尸进程
2018-1-21 22:41
0
雪    币: 431
活跃值: (2779)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
skyun 你们从应用宝下载重庆银行看看。。。
这个函数是检测了这些东西然后判断到正在调试调试,返回1                你说的这个函数是哪个函数
2018-12-16 01:26
0
雪    币: 0
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
@skyun大佬请教一个弱弱的问题,麻烦不吝赐教,我按照你的方式在pthread_create的r2与lr地址设置断点,F9后如何将主线程suspend呢?我在线程窗口右键没有找到方式,刚刚学习中,谢谢
2020-6-4 12:02
0
游客
登录 | 注册 方可回帖
返回
//