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

[原创]分析绑绑反调试

2017-7-2 18:02
20218

第一次分析绑绑加固,我并不是想脱壳只是想看看他怎么反调试的,这里记录下分析的过程。语言组织不好如果有需要的同学将就看看吧。在调试的时候开始还是很痛苦的我也不知道他加了什么混淆反正乱七八糟的流程没法看,只能一路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函数

 


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

收藏
免费 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
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主讲的太好了,大赞
2017-8-17 16:31
0
雪    币: 170
活跃值: (191)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
good
2017-8-25 18:20
0
雪    币: 7
活跃值: (263)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//