前提条件: Android机器root
adb shell 命令进入手机控制台
1. 将调试服务器上传到Android机器【本地电脑控制台】
adb push /Applications/IDA Pro 7.0/ida.app/Contents/MacOS/dbgsrv/android_server sdcard
2. 加上可执行权限【手机控制台】
chmod +x ./data/media/0/android_server
3, 执行【手机控制台】
./data/media/0/android_server
4. 本地的代理服务 代理android_server
adb forward tcp:23946 tcp:23946
5. 运行希望调试的android应用【本地电脑控制台】
adb shell am start -D -S -n com.bank.rummy/org.cocos2dx.javascript.AppActivity
6.获取进程ID 【手机控制台】 说明bank为android应用关键字
关键字信息,可以通过jeb反编译软件或者jadx获取。
wayne:/ # ps -A | grep bank u0_a163 24348 8466 2127580 237540 SyS_epoll_wait f0a6af94 S com.bank.rummy
7. 创建一个本地的代理服务,将jdwp数据转发到准备调试的进程
模版:adb forward tcp:本地监听端口 jdwp:准备要调试的进程ID
如: adb forward tcp:23947 jdwp:24348
23947端口是随意指定的。
8. 连接本地的代理服务
jdb -connect com.sun.jdi.SocketAttach:port=23947,hostname=127.0.0.1
说明:
jdb是调试Java的客户端。
在第7步骤和第8步骤之间可以使用ida连接,准备调试Android应用的so文件, 具体步骤如下:
1.
2.
此步骤需要强调的是: hostname可以写127.0.0.1, 因为本地开启代理服务,转发数据到android_server. 第4步设置的。
3.
4. 选择想要调试的进程后,稍等片刻后,ida会自动断点,这是程序入口断点。此时还没有加载我们要调试的so文件。继续运行后, 还需要执行第8步使用jdb才行。
5.已经出现了我们想要调试的so文件。libcocos2djs.so
6. 选择关键点下断点。 xxtea_decrypt