Android NDK系列(2) --- 简单so例子动态分析

来源:互联网 发布:windows原版镜像 编辑:程序博客网 时间:2024/05/21 17:16

SO调试步骤

对于在程序一开始就加载使用的so调试方法,需要在加载的时候下断点才能对该so进行调试:
+ 开启IDA调试服务器./android_server
+ adb forward tcp:23946 tcp:23946
+ am start -D -n 包名/类名;(可以在开发者选项中选择调试程序)
+ 启动IDA主程序,点击菜单 Debugger->Attach->Remote ArmLinux/Android debugger ,弹出调试对话框,在hostname一栏输入当前手机IP,password 留空
然后点击 Debug Opitions 在弹出的Debugger setup窗口的
Events中选择 stop on thread start/exit 以及 stop on library load/unload 点击OK退出。 设置新线程,加载so时断点,continue; 点击F9开始。
+ 打开ddms, 查看调试端口, jdb attach port;
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
+ 这个时候应该已经断在新线程,或者加载so处了,在你感兴趣的so处停下来;
+ 另外用ida 打开so,查看你感兴趣的函数偏移, 加上你感兴趣的so的基地址,打上断点,continue, 就大功告成了。

实例分析

首先,我们在这里动态调试的例子是使用鬼哥教程中的一个例子
链接在这里:http://www.52pojie.cn/thread-313869-1-1.html

1、首先将IDA的调试服务器push到真机中(必须获得ROOT权限)并开启

android_server路径为:IDA路径\dbgsrv
1
将server push到手机中:

adb push android_server /data/local/tmp/android_server

2
3

修改运行权限
4

运行 ./android_server
5

2、 调试运行APK

使用am命令调试模式打开APK,也可以在开发者模式中选择使用调试模式打开
6
打开应用,则会出现如下界面:
7

3、打开IDA进行调试

启动IDA主程序,点击菜单 Debugger->Attach->Remote ArmLinux/Android debugger
8
弹出调试对话框,在hostname一栏输入当前手机IP,password 留空,选择OK

列表内容

选择好需要调试的ggndktest1程序
这里写图片描述
然后点击 Debug Opitions 在弹出的Debugger setup窗口的
Events中选择 stop on thread start/exit 以及 stop on library load/unload
111

点击F9开始。

4、使用jdb

在命令行输入:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
111

5、开始调试

由于在一开始的时候就调用libgg-jni.so,这时候会加载我们需要分析so
111
由于我们选择了在加载so的时候停下来,那么,在一开始就执行,不好下断点的情况就可以解决了,在刚加载so的时候停下来,我们在Modules中找到相应so,然后就可以开始调试了。
111

错误解决

问题:
111
解决:在选择好Options后应该继续执行,然后再使用jdb
111

0 0
原创粉丝点击