首页
社区
课程
招聘
[转帖]IDA静态分析 jni动态注册方法
2022-7-20 15:51 3794

[转帖]IDA静态分析 jni动态注册方法

2022-7-20 15:51
3794

我们 在java中 jni动态注册接口方法时 得知
动态注册的过程 是在 JNI_OnLoad 方法里 进行的
getEnv ->FindClass ->RegisterNatives
RegisterNatives 方法里注册的
(RegisterNatives)(JNIEnv, jclass, const JNINativeMethod,jint)
JNINativeMethod 指向的数组
nativeMethods 数组里 就是 要动态注册的 对应的方法
在 JNINativeMethod 类型的 nativeMethods 数组里的
JNINativeMethod nativeMethods[]={
//java方法 方法签名 C函数
{"add","(FF)I",(void
)add},
{"sub","(FF)I",(void)sub},
{"mul","(FF)D",(void
)mul},
{"div","(FF)D",(void*)_div}
};

 

导入jni.h 头文件
LDR R3, [R3,#0x18] //把类似这样的 基址+偏移 右键修改成 jni方法

LDR R3, [R3,#JNIInvokeInterface.GetEnv]
如果知道了 动态注册的流程 那么就很轻松的就会把下面的 依次修改成
LDR R3, [R3,#JNINativeInterface.FindClass]
LDR.W R4, [R2,#JNINativeInterface.RegisterNatives]

 

我们知道 动态注册 是在 RegisterNatives 里进行的
而这个方法的 第3个参数 就是我们要追踪的 nativeMethods
汇编里 即是 寄存器R2 作为第三个参数
即找到这
LDR R2, [R2] ; nativeMethods
双击 nativeMethods

 

直接跳到 地址指向的数据处了
.data:00004004 EXPORT nativeMethods
.data:00004004 nativeMethods DCD aAdd ; DATA XREF: LOAD:000002A8↑o
.data:00004004 ; .text:000012C4↑o ...
.data:00004004 ; "add"
.data:00004008 DCD aFfI ; "(FF)I"
.data:0000400C DCD _Z3addP7_JNIEnvP8_jobjectff+1 ; add(_JNIEnv ,_jobject ,float,float)
.data:00004010 DCD aSub ; "sub"
.data:00004014 DCD aFfI ; "(FF)I"
.data:00004018 DCD _Z3subP7_JNIEnvP8_jobjectff+1 ; sub(_JNIEnv ,_jobject ,float,float)
.data:0000401C DCD aMul ; "mul"
.data:00004020 DCD aFfD ; "(FF)D"
.data:00004024 DCD _Z3mulP7_JNIEnvP8_jobjectff+1 ; mul(_JNIEnv ,_jobject ,float,float)
.data:00004028 DCD aDiv ; "div"
.data:0000402C DCD aFfD ; "(FF)D"
.data:00004030 DCD _Z4_divP7_JNIEnvP8_jobjectff+1 ; _div(_JNIEnv ,_jobject ,float,float)
.data:00004030 ; .data ends


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回