首页
社区
课程
招聘
[原创]分析绑绑反调试
发表于: 2017-7-2 18:02 20063

[原创]分析绑绑反调试

2017-7-2 18:02
20063

第一次分析绑绑加固,我并不是想脱壳只是想看看他怎么反调试的,这里记录下分析的过程。语言组织不好如果有需要的同学将就看看吧。在调试的时候开始还是很痛苦的我也不知道他加了什么混淆反正乱七八糟的流程没法看,只能一路F8,碰到函数调用就看看是什么函数,调用完后看看返回值。在分析的过程中看到他读取.cache目录下的文件,有点怀疑这里面有个是加密的dex文件,但是我没分析不知道是不是。其中我记录了下javaHelper.attach函数对应的jni层函数pC06BEE7ED252466C74DFD6BA9BB3761D。当前分析的这个某银行apk,我没有完全过掉反调试,其中他检查xposed的代码我没找到,我有点怀疑是某银行apk自带的检查,可以正常单步pC06BEE7ED252466C74DFD6BA9BB3761D这个函数了是不是绑绑的反调试已经过了呢?为了验证这点我特意找了个绑绑免费版的来测试把反调试挂起后可以正常启动apk并且调试器能单步(其实我心里也没底不知道这个检查xposed是不是绑绑的),下面开始记录下分析过程。

 

JEB打开后发现就这么几个类,肯定是已经加固,下面看看是什么加固


打开manifest文件查看applicationandroid:name=com.secneo.apkwrapper.ApplicationWrapper

看到这个包名我也不知道是什么加固,好吧百度下发现是绑绑加固。

 

分析ApplicationWrapper类基本上没什么值得看的,我唯一就看到DexHelper这个so,其中还有个Helper.attach这个本地函数。

 

一、静态分析DexHelper.so

 

双击查看.fini_array节,跟反调试无关,这个函数应该是默认就有的

双击.init_array节就两个函数,看了下和反调试也无关

搜索函数名也没找到一个带java开头的jni_onload也没有找到。

 

二、定位android 5.1.1调用.init_arrayjni_onload函数位置

5.14.x的定位init_arrayjni_onload函数时函数名不一样,这里又去分析了下5.1的安卓源码,最后得到如下结果。

 

库名称:linker.so

库中函数:__dl__ZN6soinfo12CallFunctionEPKcPFvvE 或者搜CallFunc

定位函数:initinit_array

这里是一个循环调用initinit_array里面的函数

 

库名称:Libart.so

库中函数:LoadNativeLibrary

定位函数:JNI_OnLoad

 


三、动态调试

上次ida服务端并修改权限(如果是android 5.1.1执行下setenforce 0)并启动服务端

打开ddms

PC端执行:adb forward tcp:23946 tcp:23946

调试模式启动样本

IDA勾选三个选项

1、搜索linker

2、双击linker后搜索callf字符,搜索到一条函数,双击进入在BLX R4位置下断点

等到ida断下来后在搜索DexHelper


双击libDexHelper.so然后搜索反调试启动函数pC581A42EFB2AAD3B6AF364A8F62E12C1

 

分析:Anti_thread_of_process_debug函数

此函数中就开启一个反调试线程,线程的工作函数是anti_thread_body函数

 

分析:anti_thread_body

此函数中是两个真正反调试函数 

函数名:check_process_stopped

检查方式:读取/proc/pid/status

关闭调试器:在此函数返回结果如果为1就关闭调试器

 

函数名: scan_process_threads

检查方式:/proc/%ld/task/%ld/status

发现调试处理方式:关闭自己进程

p9E564BF70FB6A12645A2B50089E954CF函数关闭进程或者线程

 

分析创建文件监控线程:pC426CE2D6B3F9A9FE75F1D256DFFD221

分析线程工作函数:p6754DFD410A22891F26AFD5F3F382337

此函数调用inotify_ini创建一个文件监控并把以下文件添加到监控列表中

// 添加监控文件/proc/pid/mem

// 添加监控文件/proc/pid/pagemap

// 添加监控文件/proc/pid/task/tid/mem.map

// 添加监控文件/proc/pid/task/tid/pagemap

 

文件监控响应函数:pBC302C2BE60951E2155CBFB5225953BC

这个函数里面不知道干什么,没看到有关闭调试器进程,也没看到有关闭自己进程,都是修改一些值,难道是防止内存dump?或者是单步的时候修改了指令?没有时间去分析这个函数,有分析过的大神求解答。

 

四、挂起反调试线程过掉反调试

4-1IDA调试开启后等待DexHelper加载进来

4-2:搜索libc库双击打开在搜索pthread_create函数

4-3:在pthread_create函数开始位置下断点

 

在这里断下来后R2是线程执行的代码,GOR2的代码处(如果不是函数的样子就按p键)在函数的开始位置下好断点。

当前PC是在libc中,需要回到调用创建线程的位置处在下一个断点

Ida直接F9会在cmp这里断下来,这个时候会多出一个线程,一般排在最下面,把它挂起。

   


这个是创建文件监控线程,把它也挂起,挂起步骤和挂起上一个线程一样。

 

如果之前在javaHelper.attach对应的jni层函数(pC06BEE7ED252466C74DFD6BA9BB3761D)下好断点的话,IDA直接F9就会断在这个函数中,这个函数会被调用两次,看java层刚好在两个函数中调用。

 

 

可以单步调试pC06BEE7ED252466C74DFD6BA9BB3761D函数,但是有个遗憾前面已经说了,没找到XPOSED检查的代码,我下载了http://www.52pojie.cn/thread-586058-1-1.html这个大牛的样本,也用挂起线程方式过反调试可以正常启动apk,没有xposed检查,难道是绑绑免费版没有检查xposed吗??分析过程中看到的反调试方式网上都有了,以前都是看网上说的这次是自己动手分析一次还是挺好玩的,有需要的同学将就看看吧。样本太大了丢不上来放在百度网盘http://pan.baidu.com/s/1bC9dGa






[课程]Android-CTF解题方法汇总!

收藏
免费 1
支持
分享
最新回复 (14)
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
pC06BEE7ED252466C74DFD6BA9BB3761D,请教下,这个函数你是怎么找到的?
2017-7-3 18:05
0
雪    币: 84
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
vincent汪 pC06BEE7ED252466C74DFD6BA9BB3761D,请教下,这个函数你是怎么找到的?
我是一路跟看到的,如果你只是为了找这个函数,可以在RegisterNatives函数下断点,看参数应该能找到。
2017-7-3 21:53
0
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
YaoJinAa 我是一路跟看到的,如果你只是为了找这个函数,可以在RegisterNatives函数下断点,看参数应该能找到。
你是动态调的时候看到的?我感觉静态的话找不到这个函数
2017-7-4 11:25
0
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Helper.attach对应的JNI函数不太好找。。。。。。
2017-7-4 15:26
0
雪    币: 84
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
vincent汪 Helper.attach对应的JNI函数不太好找。。。。。。
静态我找不到,都被他混淆了。如果你在RegisterNatives下断的话会来很多次,里面很多地方用到。反调试是他最后启动的解密dex文件那些都在前面。
2017-7-4 20:26
0
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
YaoJinAa 静态我找不到,都被他混淆了。如果你在RegisterNatives下断的话会来很多次,里面很多地方用到。反调试是他最后启动的解密dex文件那些都在前面。
IDA附加后,请教下是怎么找RegisterNatives的?
2017-7-5 09:47
0
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
搜不到JNI_Onload的话,那应该在调用JNI_Onload的地方下断点,再跟进去应该可以找到这个RegisterNatives
2017-7-5 09:58
0
雪    币: 991
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错……
2017-7-15 12:49
0
雪    币: 24
活跃值: (57)
能力值: ( LV3,RANK:36 )
在线值:
发帖
回帖
粉丝
10
mark,试一下~
2017-8-17 11:03
0
雪    币: 1037
活跃值: (1760)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主讲的太好了,大赞
2017-8-17 16:31
0
雪    币: 170
活跃值: (191)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
good
2017-8-25 18:20
0
雪    币: 7
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你这个反调试全部都过完了吗    ?  我记得还有个端口检测的和tracepid检测的  没看到你提起
2017-12-6 17:38
0
雪    币: 84
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
bluth 你这个反调试全部都过完了吗 ? 我记得还有个端口检测的和tracepid检测的 没看到你提起
好像当时有看到tracepid这个,太久了想不起来啦,端口那个我倒是没看到,但是可以正常调试了。
2017-12-8 16:41
0
雪    币: 1037
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
要不要改下名字 ——>梆梆
2018-12-11 13:38
0
游客
登录 | 注册 方可回帖
返回
//