> For the complete documentation index, see [llms.txt](https://hacktricks.xsx.tw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacktricks.xsx.tw/crypto-and-stego/cryptographic-algorithms.md).

# Cryptographic/Compression Algorithms

## 加密/压缩算法

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>

## 识别算法

如果您在代码中**使用移位、异或和多个算术运算**，很可能是**加密算法**的实现。以下将展示一些**无需逆向每个步骤即可识别所使用算法**的方法。

### API函数

**CryptDeriveKey**

如果使用此函数，可以通过检查第二个参数的值来找到**正在使用的算法**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-22e99f845c69e176112284ba050914cb2a2f0a11%2Fimage%20\(375\)%20\(1\)%20\(1\)%20\(1\)%20\(1\).png?alt=media)

在此处查看可能算法及其分配值的表格：<https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id>

**RtlCompressBuffer/RtlDecompressBuffer**

压缩和解压给定的数据缓冲区。

**CryptAcquireContext**

从[文档](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta)中得知，**CryptAcquireContext**函数用于获取特定加密服务提供商（CSP）中特定密钥容器的句柄。**返回的句柄用于调用使用所选CSP的CryptoAPI函数**。

**CryptCreateHash**

启动数据流的哈希处理。如果使用此函数，可以通过检查第二个参数的值来找到**正在使用的算法**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-4e69d4e127f1bbc9232cbe201ee5fd1aadb349d7%2Fimage%20\(376\).png?alt=media)

在此处查看可能算法及其分配值的表格：<https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id>

### 代码常量

有时很容易识别算法，因为它需要使用特殊且独特的值。

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-fad6411f4b2c3b9c94938d9f951997a8ad53e63f%2Fimage%20\(370\).png?alt=media)

如果您在Google中搜索第一个常量，您会得到以下结果：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-670ab5e817b471df8eba2856c1d3a2a2dae5abe8%2Fimage%20\(371\).png?alt=media)

因此，您可以假设反编译的函数是**sha256计算器**。\
您可以搜索任何其他常量，您可能会得到（可能）相同的结果。

### 数据信息

如果代码没有任何重要的常量，可能是**从.data部分加载信息**。\
您可以访问该数据，**将第一个双字组合在一起**，并像前面的部分一样在Google中搜索：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-e146bcdd26fda94061fc25d789d17d8ff7f9dc0c%2Fimage%20\(372\).png?alt=media)

在这种情况下，如果您搜索**0xA56363C6**，您会发现它与**AES算法的表**相关联。

## RC4 **（对称加密）**

### 特征

由3个主要部分组成：

* **初始化阶段/**：创建一个值表，从0x00到0xFF（总共256字节，0x100）。这个表通常称为**替换盒**（或SBox）。
* **混淆阶段**：将在之前创建的表中循环（再次循环0x100次）并使用**半随机**字节修改每个值。为了创建这些半随机字节，使用RC4**密钥**。RC4**密钥**可以是**1到256字节的长度**，但通常建议长度超过5字节。通常，RC4密钥长度为16字节。
* **XOR阶段**：最后，明文或密文与之前创建的值**进行异或**。加密和解密的函数是相同的。为此，将对创建的256字节执行**多次循环**。在反编译的代码中，通常会识别为\*\*%256（模256）\*\*。

{% hint style="info" %}
**要在反汇编/反编译的代码中识别RC4，您可以检查大小为0x100的2个循环（使用密钥），然后将输入数据与在2个循环中创建的256个值进行XOR，可能使用%256（模256）**
{% endhint %}

### **初始化阶段/替换盒：**（注意计数器使用的数字256以及如何在256个字符的每个位置写入0）

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-7ebaebfa37dac753bd916c91429befb49dfd6309%2Fimage%20\(377\).png?alt=media)

### **混淆阶段：**

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-97bc5bee64475386a1c7ede5fc72cb52cb00c14a%2Fimage%20\(378\).png?alt=media)

### **XOR阶段：**

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-471434554d37fa54d8b03db250cddd2920244caa%2Fimage%20\(379\).png?alt=media)

## **AES（对称加密）**

### **特征**

* 使用**替换盒和查找表**
* 可以**通过特定查找表值**（常量）来区分AES。*请注意，**常量**可以**存储**在二进制文件中**或动态创建**。*
* **加密密钥**必须是**16的倍数**（通常为32字节），通常使用16字节的**IV**。

### SBox常量

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-dbc5a377d00b63a1d0533115f1c461240e76b1df%2Fimage%20\(380\).png?alt=media)

## Serpent **（对称加密）**

### 特征

* 很少发现某些恶意软件使用它，但有例外（Ursnif）
* 可以根据其长度（非常长的函数）轻松确定算法是否为Serpent。

### 识别

请注意以下图像中使用的常量**0x9E3779B9**（请注意，此常量也用于其他加密算法，如**TEA** - Tiny Encryption Algorithm）。\
还请注意**循环的大小**（**132**）以及**反汇编**指令和**代码示例**中的**XOR操作数量**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-34081bf3a78aa2c1f724d60200556e1d57234101%2Fimage%20\(381\).png?alt=media)

如前所述，此代码可以在任何反编译器中显示为**非常长的函数**，因为其中**没有跳转**。反编译的代码可能如下所示：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-29389005e2e89e2a0738a59d4932c887998b9333%2Fimage%20\(382\).png?alt=media)

因此，可以通过检查**魔术数字**和**初始XOR**，查看**非常长的函数**，并将一些**指令**与**实现**（如左移7位和左旋转22位）进行**比较**，来识别此算法。

## RSA **（非对称加密）**

### 特征

* 比对称算法更复杂
* 没有常量！（难以确定自定义实现）
* KANAL（加密分析器）无法显示RSA的提示，因为它依赖于常量。

### 通过比较识别

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-9281c37ed74edeb5e97d1d77dd1ac188fb92baef%2Fimage%20\(383\).png?alt=media)

* 在第11行（左侧）有一个`+7) >> 3`，与第35行（右侧）的`+7) / 8`相同
* 第12行（左侧）检查`modulus_len < 0x040`，第36行（右侧）检查`inputLen+11 > modulusLen`

## MD5和SHA（哈希）

### 特征

* 3个函数：初始化、更新、完成
* 相似的初始化函数

### 识别

**初始化**

您可以通过检查常量来识别它们。请注意，sha\_init具有MD5没有的1个常量：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-cba975c35614151d0bf94e4730a9af481a491b07%2Fimage%20\(385\).png?alt=media)

**MD5变换**

请注意使用更多常量

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-8a0d928d967cb8e205a6530db0f29335c3bece3c%2Fimage%20\(253\)%20\(1\)%20\(1\)%20\(1\).png?alt=media)

## CRC（哈希）

* 由于其功能是查找数据中的意外更改，因此更小且更有效
* 使用查找表（因此您可以识别常量）

### 识别

检查**查找表常量**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-57314dc17baf26ba418027415afd43b89add90a0%2Fimage%20\(387\).png?alt=media)

CRC哈希算法如下：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-399ba6505341b5760405097e6ab5bb07bf6857e2%2Fimage%20\(386\).png?alt=media)

## APLib（压缩）

### 特征

* 无法识别的常量
* 您可以尝试在Python中编写算法并在线搜索类似的内容

### 识别

图表相当大：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-0b9297559b5f0e55bf461b84abb05a62a3ca638c%2Fimage%20\(207\)%20\(2\)%20\(1\).png?alt=media)

检查**3个比较以识别它**：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-94eb55348f9df2df6cd45d6a83246742b04d01a4%2Fimage%20\(384\).png?alt=media)

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks AWS红队专家）</strong></a><strong>！</strong></summary>

支持HackTricks的其他方式：

* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**，请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)，我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。

</details>
