安卓逆向(三)-native层动态调试

admin 2023年1月2日16:34:56评论50 views字数 900阅读3分0秒阅读模式


安卓逆向(三)-native层动态调试

前言

跳过一些内容,关于arm汇编,ida静态分析资料很多,不重新写,主要记下之前so动态调试的学习过程。

环境

ida这个不用介绍。
模拟器或者真机(需要ROOT过)。

准备工作

需要先将IDA中的dbgsrv文件夹下的android_server文件(根据手机的架构选择)拖到手机上。

安卓逆向(三)-native层动态调试

给予执行权限并且以root权限执行,然后将端口映射到电脑。

安卓逆向(三)-native层动态调试

然后就把对应的apk安装上即可。

开始调试

这里以一个简单的app demo为例,其中so中静态注册的函数如图:
安卓逆向(三)-native层动态调试要进行app中的so调试,同样需要以调试模式启动app。
需要改apk中的manifest设置为可调试,或者修改安卓的ro.debuggable为1。
修改安卓的ro.debuggable为1,可以通过面具也可以用自己编译的mprop。
执行命令:

  1. adb shell am start -D -n "com.xxx.xxxx/.MainActivity”

此时手机或者模拟器会出现如下界面,然后才可以进行后续步骤调试:
安卓逆向(三)-native层动态调试

ida动态调试

打开ida,对应位数别错,我这里是64位。
选择debuger,这里我是真机所以选ARM,如果是模拟器,要选linux。
安卓逆向(三)-native层动态调试选择后填写对应的地址及调试选项,这里要注意,上面第一步的时候一定要用adb forward把端口映射到本地。
安卓逆向(三)-native层动态调试然后找到对应的要调试的app,选择加载即可。
安卓逆向(三)-native层动态调试会断下来,让他运行起来:
安卓逆向(三)-native层动态调试然后可以用DDMS查看调试端口,jdb命令:

  1. jdb -connect com.sun.jdi.SocketAttach:127.0.0.1,port=端口

或者直接命令让app继续跑起来:

  1. adb forward tcp:端口 jdwp:调试进程id

安卓逆向(三)-native层动态调试然后就等so载入,可以通过ctrl+s搜索对应要调试so,然后根据静态分析的函数相对地址去加上动态调试的so的基址,来定位函数。
此时已经可以愉快的下断了:
安卓逆向(三)-native层动态调试然后放行,开始输入,点击按钮后触发断点,断下来,此时就可以继续愉快地单步调试了。
安卓逆向(三)-native层动态调试

总结

记下之前动态调试的学习过程,真机还是模拟器都可以,看自己选择。

原文始发于微信公众号(gakki的童养夫):安卓逆向(三)-native层动态调试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月2日16:34:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安卓逆向(三)-native层动态调试http://cn-sec.com/archives/1494266.html

发表评论

匿名网友 填写信息