ida动态调试.so 动态加载(必须真机)

第一步连接安卓手机 查看设备

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动态调试.so 动态加载(必须真机)
ida动态调试.so 动态加载(必须真机)
ida动态调试.so 动态加载(必须真机)
用 ida (mac版本用 6.8 7.0 有 bug 不能动态调试多线程) 附加它
先反编译 apk 再把.so 文件拖入 ida(mac 下如果直接附加的话显示不出函数)
ida动态调试.so 动态加载(必须真机)
选择调试器 (真机用 arm 模拟器用 linux)
ida动态调试.so 动态加载(必须真机)
选择服务端
ida动态调试.so 动态加载(必须真机)
上面 启动服务器时 mac上默认端口 :23946
ida动态调试.so 动态加载(必须真机)
ida动态调试.so 动态加载(必须真机)
附加
ida动态调试.so 动态加载(必须真机)
ida动态调试.so 动态加载(必须真机)
记得点击运行
ida动态调试.so 动态加载(必须真机)!
///修改onload部分///
1.找到 onload
ida动态调试.so 动态加载(必须真机)
进去
ida动态调试.so 动态加载(必须真机)
只有一个参数 很定是 javaVM类型(注意大小写要一致)的 vm
修改类型 按 y键
ida动态调试.so 动态加载(必须真机)
往下看出来一个GetEnv
继续往下 v9很定是一个 evm
ida动态调试.so 动态加载(必须真机)
修改
ida动态调试.so 动态加载(必须真机)
然后回上面修改evm的类型 JNIEnv

ida动态调试.so 动态加载(必须真机)
全部出来
ida动态调试.so 动态加载(必须真机)
点击那些函数 点 force call type
ida动态调试.so 动态加载(必须真机)
点击
ida动态调试.so 动态加载(必须真机)
对应函数原型 修改
注意: ida中都是用的 c 所有都会多一个参数也就是 cpp 中的 this

  jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
                        jint);

ida动态调试.so 动态加载(必须真机)
修改
ida动态调试.so 动态加载(必须真机)
进去函数数组
根据最后一个参数知道它只有一个函数
ida动态调试.so 动态加载(必须真机)
结构体的定义
ida动态调试.so 动态加载(必须真机)

修改
ida动态调试.so 动态加载(必须真机)
进去 c 函数
ida动态调试.so 动态加载(必须真机)
继续修改 对比 java源码与规则
ida动态调试.so 动态加载(必须真机)
修改
ida动态调试.so 动态加载(必须真机)

转载于:https://blog.51cto.com/haidragon/2139651

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值