运行时加密字符串
今天我们将介绍运行时加密字符串的基础知识,为什么我们需要加密我们的字符串并学习如何创建自己的字符串。
在本文中,您将了解和学习:
- 什么是运行时加解密
- 为什么你需要加密你的字符串
- 查看任何人如何查看您的敏感数据
- 创建您自己的自定义加密
什么是运行时加解密
这是指在程序(软件、应用程序)运行期间加密和/或解密的数据。数据可以是来自内存块、网络流量、字符串等的任何类型。
用于此目的的最常用方法之一是混淆(基本)。其他(高级)机制涉及编译代码的突变/虚拟化。
今天我们将重点介绍一种使用 [XOR 混淆] (https://en.wikipedia.org/wiki/XOR_cipher ) 的机制。
为什么要加密字符串?
运行软件的那一刻,一切都在内存中可见。这也适用于您的最终用户,这意味着他们可以看到所有内容。
攻击者要做的第一件事就是在您的软件中查找字符串。这将使他能够以最小的努力了解有关您的软件的一切。
如果您要存储敏感数据(如密码或许可证),请务必不要以纯文本形式保存它们。以纯文本形式保存它们将使攻击者的生活变得轻松。
人们可以使用多种方法来分析您的软件。最知名和最常用的方法是静态和运行时分析。
让我们看一个使用控制台应用程序的简单示例:
我们在发布模式下编译它(以避免留下任何调试信息)。让我们继续测试静态和运行时分析。
静态分析测试
在静态分析中,软件不需要执行。话虽如此,让我们在 Ghidra 中打开示例。
从下面的屏幕截图中,您可以看到示例在编译时没有任何调试信息:
如果我们搜索字符串,您可以看到我们所有的敏感信息都是可见的:
突出显示字符串后,您可以打开反编译器视图并查看所有相关代码:
很伤心吧? 😕 想象一下,您花了几个月的时间来开发您的出色软件,并且准备出售它。
我认为其余的都是不言自明的,但我相信你明白这一点。
更可悲的是,这很简单,即使是 12 岁的孩子也能做到。 (有些人确实做到了)
运行时分析测试
在运行时分析中,软件需要运行(执行)。这意味着我们需要使用软件来打开进程并读取它(通常是调试器)。
但是,为此目的并不需要调试器。我们可以简单地下载一个免费的工具,如 Process Hacker 并打开进程:
那很简单吧?请记住,我们甚至还没有附加调试器。熟练且有决心的人会使用调试器。
当您附加一个调试器时,您会看到更多,但该讨论是另一天。
创建运行时加密字符串
有很多方法可以实现这一点:
前 2 个选项可能不适合您的需求。他们每个人都有很多起起落落,我们在这一点上不会讨论。
您需要了解的一件事是,受欢迎意味着风险。当你使用在谷歌上随机找到的东西时,有人已经知道了。
大多数人针对您的工具开发了一种工具。事情就是这样。他们这样做是为了挑战,或者是为了窃取你的工作,但他们这样做了。
考虑到这一点,你必须去定制。您可以创建自己的从基本到高级的字符串加密。
计划
- 创建一个易于使用的解决方案
- 始终保持字符串加密
- 仅在需要时解密
- 将字符串放置在随机位置(可选 - 未涵盖)
- 使用后销毁字符串(可选 - 未涵盖)
解决方案
首先将我们的字符串一一定义为数组:
该数组可以容纳无限数量的字符串,长度限制为 256。
我知道这是一项艰巨的任务,尤其是如果您的字符串很长。这只是为了演示,稍后我们将创建一个更实用的解决方案。
这个想法是加密字符串中的每个字符。我将为此使用一个简单的 XOR 加密。
您可以在下面看到一个如何工作的示例:
以上没有什么复杂的事情,它简单明了但功能强大。您可以在控制台应用程序中使用它。
编译并运行后,结果是人眼无法读取的字节:
你有它,你自己的小软件来创建运行时加密字符串。 😏
结果
我是时候将我们的解决方案付诸实践了。让我们为此目的创建另一个示例并添加我们的代码:
注意2个重要的事情:
- 我在纯文本中留下了一些字符串,所以你可以看到区别
- 解密函数需要长度(稍后会详细介绍)
我们在 Release 模式下编译上面的代码并运行它。新样本工作正常:
如果我们在 IDA(或 Ghidra)中打开新的示例软件,我们加密的字符串是不可见的:
我已经提到,在这个示例中故意留下了一些字符串。原因是,所以我们可以跟着他们看代码:
我必须向下滚动才能到达上图中的文字。您可以看到编译后的代码有多么不同。
我们解决了静态分析问题,让我们继续运行运行时。
在 Process Hacker 中打开它:
瞧!我们也解决了运行时分析问题 😎
更多关于加密字符串
上面的例子不是很实用。手动定义每个字符串是一项艰巨的任务,并且每次都指定字符串的长度。
理想情况下,我们需要以下内容:
- 读取字符串的文本文件
- 将结果字符串写入文本文件
- 将转义序列 添加到字符串以避免每次都指定长度。
- 添加更复杂的 XOR 或任何其他方法(可选)
- 将字符串放在随机位置(可选)
我为你准备了一个很好的解决方案。您可以测试本文中编写的所有内容,也可以使用自己的现成工具来制作运行时加密字符串。
它包括4个项目:
- RuntimeStringEcryptor 从文本文件中读取字符串,对其进行加密,然后将它们写入另一个文本文件。
- Sample 是用于演示 IDA 的简单控制台。
- SampleEncryptedStrings 是带有加密字符串的简单控制台,可用于 IDA 演示。
- SimpleRuntimeStringEncryption 是您可以测试此方法的初始游乐场。
笔记:
- 如果不添加转义序列,解密将不知道何时“停止”。结果是乱码/空数据,直到它达到定义的数组大小。
- 确保更改我在示例中使用的 XOR 键。
- 避免多次使用相同的词。它们将生成相同的字节,并且存在被检测到的风险。
下载
要下载即用型解决方案,请考虑支持此博客 😘
评论