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

news2025/1/12 6:08:51

一、新建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.coloradmin.cn/o/602013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

维宏系统修改端口位置操作说明

1.关闭软件后找到Ncconfig.exe工具并打开 具体操作步骤 (1)桌面上鼠标点到 NcStudio鼠标右键-打开文件所在的位置如下图 (2) 在目录中找到NcConfig.exe的快捷方式&#xff08;黄色图标&#xff09; (3)打开并输入密码&#xff08;密码和软件密码一样默认初始密码ncstudio …

欧科云链:2023年5月链上安全事件盘点

一、基本信息 2023年5月安全事件约造成1800万美元损失&#xff0c;相比上月有显著下降&#xff0c;但安全事件发生频率并未减少。其中针对Jimbos Protocol的攻击造成了约750万美元损失。Arbitrum链的Swaprum项目Rug Pull造成了约300万美元的损失。此外&#xff0c;社交媒体钓鱼…

工业RFID解决方案怎么选?主要看这几项内容

如何选择适合您需求的RFID解决方案&#xff1f;通过深入了解需求、环境适应性、成本效益和供应商选择&#xff0c;您将能够更加全面地评估和选择适合自身需求的RFID解决方案。同时&#xff0c;不断与供应商和专业人员进行沟通和合作&#xff0c;可以获取更多关于特定解决方案的…

FineReport自定义排序

FineReport是帆软的报表开发工具&#xff0c;报表开发者可以用低代码的形式&#xff0c;配置出报表。主要适用于较简单的填报场景&#xff08;比如填写销售目标&#xff0c;维护项目映射关系等&#xff09;&#xff0c;用户可以在报表上填报数据&#xff0c;存储于数据库&#…

【TES605】基于Virtex-7 FPGA的高性能实时信号处理板

板卡概述 TES605是一款基于Virtex-7 FPGA的高性能实时信号处理平台&#xff0c;该平台采用1片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元&#xff0c;采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元&#xff0c;具有2个FMC子卡接口&#xff0c;各个处理节点…

PIC 使能485/422_Part2.2_激活485半双工(修订中...)

1.485底层协议辨识 黄色是PIC发出的&#xff0c;打头的字符是"\r\n\r\n"。绿色的是上位机485接口设备发送字符串“App1"的波形。波特率均为115200。上位机绿色的波形自发自收没有问题。 示波器设置为下降沿触发——485平时空闲状态&#xff0c;线路维持高电平&…

linux0.12-12-1-总体功能

[606页] 12-1 总体功能 本章所注释的程序量较大&#xff0c;但是通过第5章中对Linux源代码目录结构的分析&#xff08;参见图5-27&#xff09;&#xff0c; 可以把它们从功能上分为4个部分进行讨论。 第一部分是有关高速缓冲区的管理程序&#xff0c;主要实现了对硬盘等块设备…

隔离驱动芯片SLMi332兼容光耦隔离驱动器时的注意事项

数明深力科SLMi33x系列SLMi332是一款兼容光耦带DESAT保护功能的IGBT/SiC隔离驱动器。内置快速去饱和(DESAT) 故障检测功能、米勒钳位功能、漏极开路故障反馈、软关断功能以及可选择的自恢复模式&#xff0c;兼容光耦隔离驱动器。 SLMi33x系列SLMi332的DESAT阈值为6.5V&#xf…

Hive学习---4、函数

1、函数 1.1 函数简介 Hive会将常用的逻辑封装成函数给用户进行使用&#xff0c;类似java中的函数。 好处&#xff1a;避免用户反复写逻辑&#xff0c;可以直接拿来使用 重点&#xff1a;用户需要知道函数叫什么&#xff0c;能做什么 Hive提供了大量的内置函数&#xff0c;按…

ATTCK v13版本战术介绍——凭证访问(一)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权、防御规避战术&#xff0c;本期我们为大家介绍ATT&CK 14项战术中凭证访问战术第1-6种子技术&#xff0c;后续会介绍凭证访问其他子技术&#xff0c;敬请关注。 二、ATT&C…

深度学习目标检测项目实战(六)-基于Faster rcnn pytorch的遥感图像检测

基于Faster rcnn pytorch的遥感图像检测 代码&#xff1a;https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0 数据集 使用RSOD遥感数据集&#xff0c;VOC的数据格式如下&#xff1a; RSOD是一个开放的目标检测数据集&#xff0c;用于遥感图像中的目标检测。…

01_pytorch中的DataSet

在pytorch 中&#xff0c; Dataset: 用于数据集的创建&#xff1b; DataLoader: 用于在训练过程中&#xff0c;传递获取一个batch的数据&#xff1b; 这里先介绍 pytorch 中的 Dataset 这个类&#xff0c; torch.utils.data. dataset.py 是一个表示数据集的抽象类。任何自定义…

SharpContour论文精读

SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation 论文链接&#xff1a;[2203.13312] SharpContour: A Contour-based Boundary Refinement Approach for Efficient and Accurate Instance Segmentation (arxiv…

[SpringBoot]Knife4j框架

Knife4j框架 Knife4j框架是一款国人开发的、基于Swagger 2的在线API文档框架。 Knife4j框架的一些主要作用和特点&#xff1a; 自动生成API文档&#xff1a;Knife4j可以根据代码中的注解和配置信息&#xff0c;自动生成API接口文档。开发者只需要在代码中添加相关注解&#…

数据治理服务解决方案word

本资料是ppt格式&#xff0c;适用于方案规划、项目实施、工作汇报。本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。篇幅有限&#xff0c;无法完全展示&#xff0c;喜欢资料可转发评论&#xff0c;私信“方案”了解更多信息。…

亚马逊、沃尔玛、eBay、wish的测评风险:源头控制与有效规避

测评补单已逐渐成为跨境电商卖家的一种重要推广方式。然而&#xff0c;近期&#xff0c;一些卖家反映&#xff0c;由于平台规则日益严格&#xff0c;测评变得更为棘手。若违反评论政策并被捕获&#xff0c;卖家可能会面临一系列的处罚&#xff0c;如删除店铺所有产品的评论&…

GRPC CPP 开发单向Stream服务器

上周提到我们要给llama.cpp增加一个grpc入口&#xff0c;这是最终成果仓库&#xff0c;等待进一步测试后提交合并。 今天讲讲GRPC CPP开发的麻烦事情。 参考文档 Quick start | C | gRPC&#xff0c;参考文档就是官方的这篇文档了&#xff0c;安装grpc可以参考我上一篇文章&…

Pycharm:通过git拉取仓库代码并创建项目环境

一、使用pycharm打开空的文件夹 使用菜单栏&#xff1a;在 PyCharm 的菜单栏中&#xff0c;选择 "File"&#xff08;文件&#xff09;菜单&#xff0c;然后选择 "Open"&#xff08;打开&#xff09;或 "Open Folder"&#xff08;打开文件夹&…

Hive3.1.3

文章目录 1、Hive入门1.1 Hive简介1.2 Hive本质1.3 Hive架构原理 2、Hive安装2.1 Hive安装地址2.2 Hive安装部署2.2.1 安装Hive(最小化)2.2.2 启动并使用Hive 2.3 MySQL安装2.3.1 安装MySQL2.3.2 配置MySQL 2.4 配置Hive元数据存储到MySQL2.4.1 配置元数据到MySQL2.4.2 验证元数…

校验表格中的多个表单

要实现的效果是: 点击保存回校验当前页面的所有输入框 首先 分成两个上下两个子组件, 上面的子组件是一个表单包括规则名称和区域 下面的子组件是一个表格,表格可以是多行的,需要校验每一行的输入框 父组件调用两个子组件的校验方法, 第一个子组件可以直接校验,第二个子组件在…