Native开发与逆向第六篇 -字符串加密与hook

2024-09-01 12:20

本文主要是介绍Native开发与逆向第六篇 -字符串加密与hook,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发demo

写一个简单的字符串加密处理,将字符串字符转成ASCII十六进制值

std::string StrToHex(std::string str){unsigned char c;char buf[3];std::string result = "";std::stringstream ss;ss << str;while (ss.read((char *)(&c), sizeof(c))){sprintf(buf, "%02X", c);result += buf;}return result;
}

明文:Hello from C++
转换后:48656C6C6F2066726F6D20432B2B

再写一个转回明文的

std::string HexToStr(std::string str){std::string hex = str;long len = hex.length();std::string newString;for (long i = 0; i < len; i += 2){std::string byte = hex.substr(i, 2);char chr = (char)(int)strtol(byte.c_str(), NULL, 16);newString.push_back(chr);}return newString;
}

逆向分析

ida 反编译

__int64 __fastcall Java_com_android_nativedemo3_MainActivity_stringFromJNI(_JNIEnv *a1)
{__int64 v2; // [xsp+18h] [xbp-98h]char v4[24]; // [xsp+48h] [xbp-68h] BYREFchar v5[24]; // [xsp+60h] [xbp-50h] BYREFchar v6[24]; // [xsp+78h] [xbp-38h] BYREFchar v7[24]; // [xsp+90h] [xbp-20h] BYREF__int64 v8; // [xsp+A8h] [xbp-8h]v8 = *(_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2)) + 40);sub_6A34C(v6, "Hello from C++");StrToHex(v6);std::string::~string(v6);std::string::basic_string(v4, v7);HexToStr(v4);std::string::~string(v4);__android_log_print(4, "JNI_LOG", "hexHello: %s", v7);__android_log_print(4, "JNI_LOG", "hello: %s", v5);v2 = _JNIEnv::NewStringUTF(a1, v5);std::string::~string(v5);std::string::~string(v7);_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2));return v2;
}

hook StrToHex 和 HexToStr 这两个函数打印字符串
找到这两个函数的导出函数名
在这里插入图片描述
在这里插入图片描述
Module.getExportByName 通过导出函数名hook,当然也可以计算地址hook
脚本代码: https://download.csdn.net/download/u013170888/89699231
运行打印结果:可以看到参数1就是明文字符串
我这里还顺带hook打印了sp 和 x1
在这里插入图片描述

这篇关于Native开发与逆向第六篇 -字符串加密与hook的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126927

相关文章

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st