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

相关文章

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.