IDA调试Android so文件 JIN_onLoad方法

来源:互联网 发布:java web 跨域访问 编辑:程序博客网 时间:2024/06/09 18:04

工具:IDA 6.8+eclipse

  1. 在AndroidMainifest.xml配置文件中添加 android:debuggable=”true” 属性
    1). 如果有源码,则在代码中添加该属性;
    2). 如果没有源代码,则反编译apk文件,添加此属性,再重新打包(如何反编译重新打包,网上有很多参考)。

  2. 启动android_server程序
    1). 拷贝IDA目录dbgsrv/android_server文件到手机中,如:/data/data/android_server,可通过命令行执行: adb push E:\IDA\dbgsrv\android_server /data/
    2). 执行如下命令:
    adb shell
    su root
    cd data
    ./android_server
    启动后,此窗口不要关闭

  3. 监听23946端口
    另打开一个cmd窗口,执行 adb forward tcp:23946 tcp:23946

  4. 通过命令行启动应用程序
    如: adb shell am start -D -n com.example.jni/.MainActivity
    此时应用程序会停在等待调试界面,打开IDA工具:
    1). 打开要调试的so文件,可直接拖入;
    2). 选择ELF for ARM (Shared object)[elf.ldw],等待so解析完成;
    3). 点击Debugger选项,选择 Remote ARM Linux/Android debugger,点击OK;
    4). 点击Debugger选项,选择Process options…,配置Hostname为127.0.0.1或者localhost(如果是真机调试,则查看手机IP地址,填写即可,如:192.168.2.167),端口使用默认值 23946;
    5). 点击Debugger选项,选择 Attach to process…, 选择要调试应用的包名;
    6). 于左侧列表中Ctrl+F,搜索JIN_onLoad函数,双击,打上断点;

  5. 监听调试继续执行
    命令行中输入 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 回车

    如果一切顺利,则可以断点调试;
    调试其他方法类似;

    调试快捷键,F7单步进入,F8单步,F9运行;

  6. 注意事项:
    1). 手机要有root权限;
    2). 实际测试中发现,如果先打eclipse工程,再开始以上步骤,则最后未能断在断点处,而是直接运行结束了。此时应该关闭eclipse,待运行到第4步后,再打开eclipse工程,并在DDMS中选择要调试的工程,再进行第5步,则调试正常。

    以上是调试Android so方法大致流程和步骤,待有时间记录更详细步骤并添加截图,以防忘记。

    实际中遇到的问题也比较多,但是由于时间较长,而且当时未作记录,所以不能一一写下,其中之一是,原电脑中python版本太低,每次启动IDA都提示xxx模块初始化失败,重新安装IDA目录中python-2.7.6后,此问题解决。

原创粉丝点击