2023安卓逆向 -- JNI学习(从开发到反编译)

news/2024/11/23 1:32:59/

一、新建native C++项目,填写好项目信息,一路下一步即可

二、创建好项目,直接点击运行,出现下面界面,说明我们的环境都没有问题

三、Java层调用java层函数

1、新建一个Java Class,命名为JavaFun

2、编写java函数

package com.example.jnitest;public class JavaFun {public static String strfun(){return "公众号:逆向有你";}
}

3、主函数调用

TextView tv = binding.sampleText;String str=JavaFun.strfun();tv.setText(str);

4、运行结果

四、Java层调用C层函数

1、新建一个C文件,命名为CFun

2、修改一下Cmake文件,具体内容下,就是告诉该项目,我要生成一个叫做CFun的so文件

add_library( # Sets the name of the library.CFun# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).CFun.c)target_link_libraries( # Specifies the target library.jnitest CFun# Links the target library to the log library# included in the NDK.${log-lib})

3、回到刚新建的C文件,电机一下Sync Now同步一下,就不会飘红报错了

4、回到Java层声明一个函数

public static native String Cstrfun(String v1, String v2);

5、把鼠标放到Cstrfun函数上面,按Alt+回车,去C文件里实现该函数

6、C文件里面会自动添加如下代码,我们只要填写要实现的内容即可

#include <jni.h>JNIEXPORT jstring JNICALL
Java_com_example_jnitest_JavaFun_Cstrfun(JNIEnv *env, jclass clazz, jstring v1, jstring v2) {// TODO: implement Cstrfun()
}

7、具体实现函数内容,直接返回v1+v2

//将java字符串转换为C字符串char *c1 = (char *) (*env)->GetStringUTFChars(env,v1, JNI_FALSE);char *c2 = (char *) (*env)->GetStringUTFChars(env,v2, JNI_FALSE);//拼接两个字符串char *res = strcat(c1, c2);//将C字符串转换为java字符串返回return (*env)->NewStringUTF(env,res);

8、主函数调用

TextView tv = binding.sampleText;String str=JavaFun.Cstrfun("公众号:","逆向有你!!!");tv.setText(str);

9、加载SO文件

System.loadLibrary("CFun");

五、反编译

1、将生成的apk拖入jadx中,找到了关键函数Cstrfun

2、查看调用该函数是原生函数

3、解压该app,将CFun.so拖进ida中双击进入,我们要分析的函数

4、通过编程的时候我们知道,jni函数一般第一个参数都是JNIEnv类型,所以,我们按键盘y,快捷修改

5、这样看着就很好理解了


http://www.ppmy.cn/news/168228.html

相关文章

android键盘怎么打韩文,手机韩文输入法九键盘如何使用?

满意答案 asdf2444 推荐于 2019.08.25 采纳率&#xff1a;54% 等级&#xff1a;8 已帮助&#xff1a;411人 主要是以下三个元音输入&#xff1a; "ㅣ" " . " "ㅡ" ㅏ ㅣ . ㅑ ㅣ . . ㅐ ㅣ . ㅣ ㅒ ㅣ . . ㅣ ㅓ . ㅣ ㅕ . . ㅣ ㅗ …

linux设置汉语输入法,在Deepin系统下使用韩语(韩文)输入法的方法

本文介绍在Deepin系统下安装并使用韩语(韩文)输入法的方法。虽然ibus下有专门的[Korean - Hangul]韩语码表&#xff0c;但是ibus却无法在Deepin下使用。 前言 当前在深度商店中并没有第三方的韩语软件&#xff0c;同时即使把系统语言改成韩语&#xff0c;也仅有中文输入法可用&…

电能的质量指标

电能的质量指标有很多&#xff0c;以下是一些主要的指标&#xff1a; 电压稳定度&#xff1a;描述电压在一定时间内的波动情况&#xff0c;一般以电压的标准偏差或均方根值来表示。频率稳定度&#xff1a;描述电网频率在一定时间内的波动情况&#xff0c;一般以频率偏差的标准…

【Java JUC】读写自旋锁:共享和独占 —— 基本概念、使用场景和代码示例

目录 概念示例为什么不干脆把读操作设置为无锁&#xff1f; 概念 读写自旋锁是一种结合了读写锁和自旋锁的锁类型&#xff0c;可以同时支持并发读和互斥写。 Java中可以使用ReentrantReadWriteLock类来实现读写可重入锁&#xff0c;该类提供了读锁和写锁两种类型的锁&#xff…

中睿天下参编的《中国网信产业桔皮书-数据安全》正式发布

5月28日&#xff0c;2023中关村论坛中关村国际技术交易大会第七届中国网信产业前锋汇成功举办&#xff0c;本次会议以“全球数字经济发展与数据安全关键技术”为主题&#xff0c;会议由中国&#xff08;中关村&#xff09;网络安全与信息化产业联盟主办&#xff08;以下简称联盟…

HTML5+CSS3+JS小实例:简约的垂直选项卡

实例:简约的垂直选项卡 技术栈:HTML+CSS+JS 字体图标库:font-awesome 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="v…

基于springboot的闲置交易系统

一&#xff1a;系统使用到的技术栈 SpringbootVueMysqlElementUI 二&#xff1a;表结构 三&#xff1a;功能截图 四&#xff1a;源码获取

basys3芯片型号xc7a35tcpg236-1

vivado环境下创建新工程每次输入型号很麻烦&#xff0c;记录一下 xc7a35tcpg236-1