运行时加密字符串

今天我们将介绍运行时加密字符串的基础知识,为什么我们需要加密我们的字符串并学习如何创建自己的字符串。

在本文中,您将了解和学习:

  • 什么是运行时加解密
  • 为什么你需要加密你的字符串
  • 查看任何人如何查看您的敏感数据
  • 创建您自己的自定义加密

什么是运行时加解密

这是指在程序(软件、应用程序)运行期间加密和/或解密的数据。数据可以是来自内存块、网络流量、字符串等的任何类型。

用于此目的的最常用方法之一是混淆(基本)。其他(高级)机制涉及编译代码的突变/虚拟化。

今天我们将重点介绍一种使用 [XOR 混淆] (https://en.wikipedia.org/wiki/XOR_cipher ) 的机制。

为什么要加密字符串?

运行软件的那一刻,一切都在内存中可见。这也适用于您的最终用户,这意味着他们可以看到所有内容。

攻击者要做的第一件事就是在您的软件中查找字符串。这将使他能够以最小的努力了解有关您的软件的一切。

如果您要存储敏感数据(如密码或许可证),请务必不要以纯文本形式保存它们。以纯文本形式保存它们将使攻击者的生活变得轻松。

人们可以使用多种方法来分析您的软件。最知名和最常用的方法是静态和运行时分析。

让我们看一个使用控制台应用程序的简单示例:

样本未加密 1

我们在发布模式下编译它(以避免留下任何调试信息)。让我们继续测试静态和运行时分析。

静态分析测试

在静态分析中,软件不需要执行。话虽如此,让我们在 Ghidra 中打开示例。

从下面的屏幕截图中,您可以看到示例在编译时没有任何调试信息:

样本非加密 1-1

如果我们搜索字符串,您可以看到我们所有的敏感信息都是可见的:

样本未加密 1-2

突出显示字符串后,您可以打开反编译器视图并查看所有相关代码:

样本未加密 1-3

很伤心吧? 😕 想象一下,您花了几个月的时间来开发您的出色软件,并且准备出售它。

我认为其余的都是不言自明的,但我相信你明白这一点。

更可悲的是,这很简单,即使是 12 岁的孩子也能做到。 (有些人确实做到了)

运行时分析测试

在运行时分析中,软件需要运行(执行)。这意味着我们需要使用软件来打开进程并读取它(通常是调试器)。

但是,为此目的并不需要调试器。我们可以简单地下载一个免费的工具,如 Process Hacker 并打开进程:

样本未加密 2

那很简单吧?请记住,我们甚至还没有附加调试器。熟练且有决心的人会使用调试器。

当您附加一个调试器时,您会看到更多,但该讨论是另一天。

创建运行时加密字符串

有很多方法可以实现这一点:

  • 使用第三方软件,如 VMProtectThemida
  • 编译时间字符串加密,如 xorstr
  • 使用自定义方法

前 2 个选项可能不适合您的需求。他们每个人都有很多起起落落,我们在这一点上不会讨论。

您需要了解的一件事是,受欢迎意味着风险。当你使用在谷歌上随机找到的东西时,有人已经知道了。

大多数人针对您的工具开发了一种工具。事情就是这样。他们这样做是为了挑战,或者是为了窃取你的工作,但他们这样做了。

考虑到这一点,你必须去定制。您可以创建自己的从基本到高级的字符串加密。

计划

  • 创建一个易于使用的解决方案
  • 始终保持字符串加密
  • 仅在需要时解密
  • 将字符串放置在随机位置(可选 - 未涵盖)
  • 使用后销毁字符串(可选 - 未涵盖)

解决方案

首先将我们的字符串一一定义为数组:

第 1 步

该数组可以容纳无限数量的字符串,长度限制为 256。

我知道这是一项艰巨的任务,尤其是如果您的字符串很长。这只是为了演示,稍后我们将创建一个更实用的解决方案。

这个想法是加密字符串中的每个字符。我将为此使用一个简单的 XOR 加密。

您可以在下面看到一个如何工作的示例:

第 2 步

以上没有什么复杂的事情,它简单明了但功能强大。您可以在控制台应用程序中使用它。

编译并运行后,结果是人眼无法读取的字节:

第 3 步

你有它,你自己的小软件来创建运行时加密字符串。 😏

结果

我是时候将我们的解决方案付诸实践了。让我们为此目的创建另一个示例并添加我们的代码:

第 4 步

注意2个重要的事情:

  • 我在纯文本中留下了一些字符串,所以你可以看到区别
  • 解密函数需要长度(稍后会详细介绍)

我们在 Release 模式下编译上面的代码并运行它。新样本工作正常:

第 5 步

如果我们在 IDA(或 Ghidra)中打开新的示例软件,我们加密的字符串是不可见的:

第 6 步

我已经提到,在这个示例中故意留下了一些字符串。原因是,所以我们可以跟着他们看代码:

第 7 步

我必须向下滚动才能到达上图中的文字。您可以看到编译后的代码有多么不同。

我们解决了静态分析问题,让我们继续运行运行时。

在 Process Hacker 中打开它:

第 8 步

瞧!我们也解决了运行时分析问题 😎

更多关于加密字符串

上面的例子不是很实用。手动定义每个字符串是一项艰巨的任务,并且每次都指定字符串的长度。

理想情况下,我们需要以下内容:

  • 读取字符串的文本文件
  • 将结果字符串写入文本文件
  • 转义序列 添加到字符串以避免每次都指定长度。
  • 添加更复杂的 XOR 或任何其他方法(可选)
  • 将字符串放在随机位置(可选)

我为你准备了一个很好的解决方案。您可以测试本文中编写的所有内容,也可以使用自己的现成工具来制作运行时加密字符串。

它包括4个项目:

  • RuntimeStringEcryptor 从文本文件中读取字符串,对其进行加密,然后将它们写入另一个文本文件。
  • Sample 是用于演示 IDA 的简单控制台。
  • SampleEncryptedStrings 是带有加密字符串的简单控制台,可用于 IDA 演示。
  • SimpleRuntimeStringEncryption 是您可以测试此方法的初始游乐场。

笔记:

  • 如果不添加转义序列,解密将不知道何时“停止”。结果是乱码/空数据,直到它达到定义的数组大小。
  • 确保更改我在示例中使用的 XOR 键。
  • 避免多次使用相同的词。它们将生成相同的字节,并且存在被检测到的风险。

下载

要下载即用型解决方案,请考虑支持此博客 😘

成为赞助人