APP逆向 day12 JNI开发

一.前言

今天和大家讲讲jni开发,为什么要和大家介绍呢,因为jni开发是安卓开发中经常使用的,其作用就是java调用c代码,或者c调用java代码。一般一些难一点的app都是采用这个方式,采用这个方式的好处就是更难逆向,让逆向工作更加困难。

如下图所示

二.创建JNI项目 

1.安装ndk 

 apply等待下载就好

2.创建jni项目 

 我们选择这个,后面就按照需要选择就好了

三.JNI快速体验 

也就是jni的配置

1.在cpp文件夹创建一个.c文件,名字随便取

 2.在java中创建一个类,通常和.c名字一样,然后写上下面这些

3.在CMakeLists.txt中加上这些,其中utils就是上图中添加的,只要保持名字一样

后面会生成utils.so的文件

4.在刚刚创建的java下面写一个方法,前面可以看成是固定写法,只是一个接口

public static native(比如这个)

5.在.c文件中写逻辑

这样就成功快速上手了 

四.类型 

java中类型和jni类型的对应关系

  

这里我就不一个个给大家举例子了,大家现在一定知道,在逆向中,如果我们看到 

System.loadLibrary()

public static native,那肯定是使用了jni方法,调用了里面的c

五.c调用java 

这里只给出逆向中我们需要注意的:

当我们在c中看见 (*env)->FindClass(env, "路径/方法")  这个就是c调用了java中的这个方法,对于这个我们知道就可以了,不需要真的和开发一样会写。

六.动态注册 

我们前面说的那些都是静态注册,可以发现c文件中的函数名字和java中的名字有对应关系,而动态注册是没有的,所以我们得了解动态注册,这里就不细致给大家讲了,因为我也不是很会,这里给出几张截图方便大家理解一下。

1.java中

 2.c中

 我们发现,动态注册虽然没有对应关系,但是我们发编译可以看到

static JNINativeMethod gMethods

JNIEXPORT jint JNICALL JNI_OnLoad

jclass clazz = (*env)->FindClass(env, "路径/类"); 

其中getMethods里可以看到对应方法,这样就可以了

七.总结

jni开发要介绍的东西就很多,但是我们并不需要完全和开发app一样了解,只需要了解在app逆向中的jni开发的作用就好。这里我就不把那些小技巧给总结了,你们完整的看看就好。

补充

如有需要主页私信我,有球必应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往日情怀酿做酒 V1763929638

往日情怀酿作酒 感谢你的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值