[关闭]
@oro-oro 2015-10-14T14:57:19.000000Z 字数 1457 阅读 2958

IDA 调试 HelloJNI

AndroidDebug


1. 配置

1.1 手机配置

根据 android 的官方文档,如果要调试一个 App 里面的 dex 代码,必须满足以下两个条件中的任何一个:

  1. APK的AndroidManifest.xmlApplication标签需要包含属性android:debuggable=true
    由于正常的软件发布时都不会把android:debuggable设置为true,所以需要重新打包。这不仅每次分析一个 App 都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到。

  2. /default.propro.debuggable的值为1

由于default.prop是保存在boot.imgramdisk中,这部分每次重新启动都会重新从rom中加载,所以要到目的必须修改boot.img中的ramdisk并重新刷到设备中。

手工修改步骤如下:
a) 从 Google 官方网站下载到 boot.img,
b) 使用工具(abootimg,gunzip, cpio)把 boot.img 完全解开,获取到 default.prop
c) 修改 default.prop
d) 把修改后的文件重新打包成 boot_new.img
e) 使用 fastboot 工具把 boot_new.img 刷入设备(fastboot flash boot boot_new.img)

CM 支持应用调试模式,一劳永逸,推荐使用。

1.2 android_server 准备

将IDA下dbgsrv目录中的android_server推送到手机。

  1. $ adb push android_server /data/local/tmp/`
  2. $ adb shell
  3. $ su
  4. # chmod 755 /data/local/tmp/android_server

或者放进 /system/bin/ 里面也可以。

2. 调试 HelloJNI

2.1 启动 android_server

# /data/local/tmp/android_server &
[1] 7318
IDA Android 32-bit remote debug server(ST) v1.17. Hex-Rays (c) 2004-2014
Listening on port #23946...

2.2 设定转发端口

adb forward tcp:23946 tcp:23946

2.3 以调试模式启动应用

命令方式启动
am start -D -n package/pacakge.main_activity

CM系统
设置调试应用:
CM_Debug.png-55.6kB

启动应用:
CM_Debug_run.png-40.5kB

2.4 IDA配置

拉入APK,选中要调试的so,在JNI函数设置断点。

调试器选择(Select Debugger):
Remote ARM Linux/Android debugger

调试器配置(Debugger Options):

进程配置(Proccess Options):
HostName :127.0.0.1 或者 localhost

附加进程(Attach to Process...):
选择目标应用,附加,运行(F9,Start/Continue Process)。

此时等待调试的窗口还在,需要执行。
打开Android Device Monitor,选中调试的进程,执行以下命令:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

接下来就可以进行愉快的调试了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注