安卓逆向学习(1):so文件的动态调试方法
2017-02-02 16:28
323 查看
一、所使用平台及软件:
1、安卓手机:小米2s 版本6.0 系统为开发版已取得root权限。
2、软件:IDA_Pro_v6.8
3、电脑系统win10
二、步骤:
1、确保XML里的Android:debuggable=”true”
2、将android_server文件push到手机/data/local/tmp目录
2、执行setenforce 0
3、执行chmod 755 android_server
4、执行android_server
5、端口转发 adb forward tcp:23946 tcp:23946
6、调试模式启动程序adb shell am start -D -n 包名/类名
7、IDA附加进程
8、F9运行,下断点调试。
三、扩展:
1、在有反调试的情况下如何跳过
说明,一般来说 反调试在这里开启一个线程,然后不断地做轮询,主要的原理是判断TrackerPid字段值是否等于0,由于如果存在调试,TrackerPid就不为0,因此可以用作反调试;要破解也简单,我们只要把这里的调用函数给Nop掉即可
2、下断点
Ctrl + S 然后搜索到so文件名
记录下基地址是:0×76118000
加上JNI_OnLoad函数的偏移地址0×1504为0×76119504
G跳转到0×76119504,下断点
A.触发断点
下好断点之后,直接F9运行吧,就能断在JNI_OnLoad函数处~
当这种调试手法出现之后,将特殊函数,或者反调试函数放在JNI_OnLoad中也不是那么的安全了。此时,程序猿们通过分析系统对SO文件的加载链接过程发现,JNI_OnLoad函数并不是最开始执行的。在JNI_OnLoad函数执行之前,还会执行init段和init_array中的一系列函数。
因此,现在的调试方法,都是将断点下在init_array中~
至于下断点的方法,可以类比于在JNI_OnLoad中下断点的方法,在init_array的函数中下断点。还有一种方法便是通过在linker模块中,通过对其中函数下断点,然后也能单步到init_array中下面便详细介绍下如何给任意系统函数下断点
四、后记
从很多网上博客中找到的资料,稍作整理,以备后用。已经过实际操作可行。
1、安卓手机:小米2s 版本6.0 系统为开发版已取得root权限。
2、软件:IDA_Pro_v6.8
3、电脑系统win10
二、步骤:
1、确保XML里的Android:debuggable=”true”
2、将android_server文件push到手机/data/local/tmp目录
2、执行setenforce 0
3、执行chmod 755 android_server
4、执行android_server
5、端口转发 adb forward tcp:23946 tcp:23946
6、调试模式启动程序adb shell am start -D -n 包名/类名
7、IDA附加进程
8、F9运行,下断点调试。
三、扩展:
1、在有反调试的情况下如何跳过
说明,一般来说 反调试在这里开启一个线程,然后不断地做轮询,主要的原理是判断TrackerPid字段值是否等于0,由于如果存在调试,TrackerPid就不为0,因此可以用作反调试;要破解也简单,我们只要把这里的调用函数给Nop掉即可
2、下断点
Ctrl + S 然后搜索到so文件名
记录下基地址是:0×76118000
加上JNI_OnLoad函数的偏移地址0×1504为0×76119504
G跳转到0×76119504,下断点
A.触发断点
下好断点之后,直接F9运行吧,就能断在JNI_OnLoad函数处~
当这种调试手法出现之后,将特殊函数,或者反调试函数放在JNI_OnLoad中也不是那么的安全了。此时,程序猿们通过分析系统对SO文件的加载链接过程发现,JNI_OnLoad函数并不是最开始执行的。在JNI_OnLoad函数执行之前,还会执行init段和init_array中的一系列函数。
因此,现在的调试方法,都是将断点下在init_array中~
至于下断点的方法,可以类比于在JNI_OnLoad中下断点的方法,在init_array的函数中下断点。还有一种方法便是通过在linker模块中,通过对其中函数下断点,然后也能单步到init_array中下面便详细介绍下如何给任意系统函数下断点
四、后记
从很多网上博客中找到的资料,稍作整理,以备后用。已经过实际操作可行。
相关文章推荐
- 安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
- 【安卓逆向】如何用ida动态调试so文件
- 安卓逆向学习笔记 (3)- 使用IDA Pro静态分析so文件
- Android逆向系列之动态调试7–IDA调试so文件(上)
- Android逆向系列之动态调试8–IDA调试so文件(下)
- Android逆向系列之动态调试(七)–IDA调试so文件(下)
- IDA动态调试so文件出现SIGILL
- IDA 6.5调试安卓SO文件(ida6.5 debug Android so)
- 使用javah快速生成本地方法及生成so动态库文件
- 安卓逆向学习笔记(0)- HelloWorld.apk的文件结构
- 使用IDA动态调试android so文件时的几个坑
- android中SO文件动态调试
- 安卓动态调试方法
- so文件动态替换方法及Linux动态库的用法
- 安卓动态调试方法总结
- Android JNI学习笔记——so文件动态加载
- 使用Ida 4000 动态调试Android 中的so文件的方式以及技巧
- IDA 6.5调试安卓SO文件(ida6.5 debug Android so)
- 安卓ndk开发——找不到so文件的解决方法
- 安卓逆向学习(二 DEX文件说明)