安卓逆向学习(1):so文件的动态调试方法
来源:互联网 发布:域名隐藏端口号 编辑:程序博客网 时间:2024/04/30 21:34
一、所使用平台及软件:
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):so文件的动态调试方法
- 【安卓逆向】如何用ida动态调试so文件
- 安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
- 安卓逆向学习笔记 (3)- 使用IDA Pro静态分析so文件
- IDA动态调试逆向so库(各种坑)
- IDA动态调试逆向so库(各种坑)
- 使用IDA逆向Android的.so动态库文件
- 使用IDA逆向Android的.so动态库文件
- Android逆向系列之动态调试(七)–IDA调试so文件(下)
- Android逆向系列之动态调试7–IDA调试so文件(上)
- Android逆向系列之动态调试8–IDA调试so文件(下)
- 安卓逆向学习(二 DEX文件说明)
- IDA动态调试Android的SO文件
- IDA 6.5调试安卓SO文件(ida6.5 debug Android so)
- IDA 6.5调试安卓SO文件(ida6.5 debug Android so)
- Android逆向so文件,调试加解读
- Android逆向so文件,调试加解读
- Android逆向so文件,调试加解读
- hdu 2076 夹角有多大(题目已修改,注意读题)
- Mac上使用homebrew安装PostgreSql
- pyenv-virtualenv配置和基本使用
- spring-aop 配置文件方式实现
- ARM汇编
- 安卓逆向学习(1):so文件的动态调试方法
- python之简单主机批量管理工具
- sduacm16级寒假训练 素筛 快速幂 GCD
- 2222: [Cqoi2006]猜数游戏
- PHP简单表单登录操作
- Gentle adaboost解释
- java并发每日一练
- 【蓝牙】如何通过Bluetooth5提高低功耗蓝牙的连接范围
- 航空测绘全景相机