@oro-oro
2015-10-14T14:57:19.000000Z
字数 1457
阅读 2958
AndroidDebug
根据 android 的官方文档,如果要调试一个 App 里面的 dex 代码,必须满足以下两个条件中的任何一个:
APK的AndroidManifest.xml
中Application
标签需要包含属性android:debuggable=true
。
由于正常的软件发布时都不会把android:debuggable
设置为true
,所以需要重新打包。这不仅每次分析一个 App 都重复操作,而且很多软件会对自身进行校验,重打包后执行会被检测到。
/default.prop
中ro.debuggable
的值为1
。
由于default.prop
是保存在boot.img
的ramdisk
中,这部分每次重新启动都会重新从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)
支持应用调试模式,一劳永逸,推荐使用。
将IDA下dbgsrv
目录中的android_server
推送到手机。
$ adb push android_server /data/local/tmp/`
$ adb shell
$ su
# chmod 755 /data/local/tmp/android_server
或者放进 /system/bin/ 里面也可以。
# /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...
adb forward tcp:23946 tcp:23946
命令方式启动
am start -D -n package/pacakge.main_activity
CM系统
设置调试应用:
启动应用:
拉入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
接下来就可以进行愉快的调试了。