-
-
[原创]分析绑绑反调试
-
发表于:
2017-7-2 18:02
20218
-
第一次分析绑绑加固,我并不是想脱壳只是想看看他怎么反调试的,这里记录下分析的过程。语言组织不好如果有需要的同学将就看看吧。在调试的时候开始还是很痛苦的我也不知道他加了什么混淆反正乱七八糟的流程没法看,只能一路F8,碰到函数调用就看看是什么函数,调用完后看看返回值。在分析的过程中看到他读取.cache目录下的文件,有点怀疑这里面有个是加密的dex文件,但是我没分析不知道是不是。其中我记录了下java层Helper.attach函数对应的jni层函数pC06BEE7ED252466C74DFD6BA9BB3761D。当前分析的这个某银行apk,我没有完全过掉反调试,其中他检查xposed的代码我没找到,我有点怀疑是某银行apk自带的检查,可以正常单步pC06BEE7ED252466C74DFD6BA9BB3761D这个函数了是不是绑绑的反调试已经过了呢?为了验证这点我特意找了个绑绑免费版的来测试把反调试挂起后可以正常启动apk并且调试器能单步(其实我心里也没底不知道这个检查xposed是不是绑绑的),下面开始记录下分析过程。
用JEB打开后发现就这么几个类,肯定是已经加固,下面看看是什么加固
打开manifest文件查看application中android:name=”com.secneo.apkwrapper.ApplicationWrapper”
看到这个包名我也不知道是什么加固,好吧百度下发现是绑绑加固。
分析ApplicationWrapper类基本上没什么值得看的,我唯一就看到DexHelper这个so,其中还有个Helper.attach这个本地函数。
一、静态分析DexHelper.so
双击查看.fini_array节,跟反调试无关,这个函数应该是默认就有的
双击.init_array节就两个函数,看了下和反调试也无关
搜索函数名也没找到一个带java开头的jni_onload也没有找到。
二、定位android 5.1.1调用.init_array和jni_onload函数位置
5.1和4.x的定位init_array和jni_onload函数时函数名不一样,这里又去分析了下5.1的安卓源码,最后得到如下结果。
库名称:linker.so
库中函数:__dl__ZN6soinfo12CallFunctionEPKcPFvvE 或者搜CallFunc
定位函数:init、init_array
这里是一个循环调用init和init_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直播授课