本文主要向大家介绍了C/C++知识点之ida动态调试.so 动态加载(必须真机),通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
第一步连接安卓手机 查看设备
localhost:~ liuhailong$ adb devicesList of devices attachedCVH7N15A28004365 devicelocalhost:~ 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进入 androidadb shell提权 su修改属性chmod 777 server root用户运行server运行monitor 调试必须要启动它monitor &以调试方式启动 apk 例如:localhost:~ liuhailong$ adb shell am start -D -n com.ReverseMe2015/com.ReverseMe2015.MainActivityStarting: Intent { cmp=com.ReverseMe2015/.MainActivity }localhost:~ liuhailong$ 映射端口localhost:~ liuhailong$ adb forward tcp:23946 tcp:23946localhost:~ 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源码与规则
修改
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!