吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5027|回复: 5
收起左侧

[Android 原创] IDA静态分析 jni动态注册方法

[复制链接]
怕上火喝王老吉 发表于 2020-4-16 19:25
通过我们 在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_OnLoad 方法里去找
导入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

这样就ok了
java层 方法名  方法签名  c/c++ 中对应的方法

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
smile5 + 1 热心回复!
WWB0224 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

第七只海东青 发表于 2020-4-17 04:02
学习使我快乐
茕茕白兔. 发表于 2020-4-17 07:47
夜步城 发表于 2020-4-17 10:51
这个可以,可以过签名验证,过反调试也可以在JNI_OnLoad里面修改
羽刃 发表于 2020-5-19 14:36
大侠,有空请帮忙看下我的帖子:https://www.52pojie.cn/thread-1182113-1-1.html
18368348237 发表于 2022-6-8 12:10
大佬,方法找到了,方法体该怎么找啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表