第一步连接安卓手机 查看设备
localhost:~ liuhailong$ adb devices
List of devices attached
CVH7N15A28004365 device
localhost:~ liuhailong$
第二步 上传调试器的服务端 可以 32 位 64 位都上传
这里 32 位
命令
adb push /Applications/IDA\ Pro\ 7.0/ida.app/Contents/MacOS/dbgsrv/android_server /data/local/tmp/server
上传 apk 到 app目录下 或者直接安装
进入 android先提权 修改/server 777
命令
安装命令例如:
adb install /Users/liuhailong/Desktop/testandroid/4010.apk
上传命令例如:
adb pull /data/app/c1.apk
进入 android
adb shell
提权 su
修改属性
chmod 777 server
root用户运行server
运行monitor 调试必须要启动它
monitor &
以调试方式启动 apk 例如:
localhost:~ liuhailong$ adb shell am start -D -n com.ReverseMe2015/com.ReverseMe2015.MainActivity
Starting: Intent { cmp=com.ReverseMe2015/.MainActivity }
localhost:~ liuhailong$
映射端口
localhost:~ liuhailong$ adb forward tcp:23946 tcp:23946
localhost:~ liuhailong$
调试运行 端口默认为8700 可以在monitor上面看
localhost:~ liuhailong$ jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
设置未捕获的java.lang.Throwable
设置延迟的未捕获的java.lang.Throwable
正在初始化jdb...
>
用 ida (mac版本用 6.8 7.0 有 bug 不能动态调试多线程) 附加它
先反编译 apk 再把.so 文件拖入 ida(mac 下如果直接附加的话显示不出函数)
选择调试器 (真机用 arm 模拟器用 linux)
选择服务端
上面 启动服务器时 mac上默认端口 :23946
附加
记得点击运行
!
///////////////////////////////////修改onload部分///////////
1.找到 onload
进去
只有一个参数 很定是 javaVM类型(注意大小写要一致)的 vm
修改类型 按 y键
往下看出来一个GetEnv
继续往下 v9很定是一个 evm
修改
然后回上面修改evm的类型 JNIEnv
全部出来
点击那些函数 点 force call type
点击
对应函数原型 修改
注意: ida中都是用的 c 所有都会多一个参数也就是 cpp 中的 this
jint (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
jint);
修改
进去函数数组
根据最后一个参数知道它只有一个函数
结构体的定义
修改
进去 c 函数
继续修改 对比 java源码与规则
修改