.. | ||
README.md | ||
unpacking-binaries.md |
加密/压缩算法
加密/压缩算法
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF版本的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
识别算法
如果您在代码中使用移位、异或和多个算术运算,很可能是加密算法的实现。以下将展示一些无需逆向每个步骤即可识别所使用算法的方法。
API函数
CryptDeriveKey
如果使用此函数,可以通过检查第二个参数的值来找到正在使用的算法:
在此处查看可能算法及其分配值的表格:https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
压缩和解压给定的数据缓冲区。
CryptAcquireContext
从文档中得知,CryptAcquireContext函数用于获取特定加密服务提供商(CSP)中特定密钥容器的句柄。返回的句柄用于调用使用所选CSP的CryptoAPI函数。
CryptCreateHash
启动数据流的哈希处理。如果使用此函数,可以通过检查第二个参数的值来找到正在使用的算法:
在此处查看可能算法及其分配值的表格:https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
代码常量
有时很容易识别算法,因为它需要使用特殊且独特的值。
如果您在Google中搜索第一个常量,您会得到以下结果:
因此,您可以假设反编译的函数是sha256计算器。
您可以搜索任何其他常量,您可能会得到(可能)相同的结果。
数据信息
如果代码没有任何重要的常量,可能是从.data部分加载信息。
您可以访问该数据,将第一个双字组合在一起,并像前面的部分一样在Google中搜索:
在这种情况下,如果您搜索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)
混淆阶段:
XOR阶段:
AES(对称加密)
特征
- 使用替换盒和查找表
- 可以通过特定查找表值(常量)来区分AES。请注意,常量可以存储在二进制文件中或动态创建。
- 加密密钥必须是16的倍数(通常为32字节),通常使用16字节的IV。
SBox常量
Serpent (对称加密)
特征
- 很少发现某些恶意软件使用它,但有例外(Ursnif)
- 可以根据其长度(非常长的函数)轻松确定算法是否为Serpent。
识别
请注意以下图像中使用的常量0x9E3779B9(请注意,此常量也用于其他加密算法,如TEA - Tiny Encryption Algorithm)。
还请注意循环的大小(132)以及反汇编指令和代码示例中的XOR操作数量:
如前所述,此代码可以在任何反编译器中显示为非常长的函数,因为其中没有跳转。反编译的代码可能如下所示:
因此,可以通过检查魔术数字和初始XOR,查看非常长的函数,并将一些指令与实现(如左移7位和左旋转22位)进行比较,来识别此算法。
RSA (非对称加密)
特征
- 比对称算法更复杂
- 没有常量!(难以确定自定义实现)
- KANAL(加密分析器)无法显示RSA的提示,因为它依赖于常量。
通过比较识别
- 在第11行(左侧)有一个
+7) >> 3
,与第35行(右侧)的+7) / 8
相同 - 第12行(左侧)检查
modulus_len < 0x040
,第36行(右侧)检查inputLen+11 > modulusLen
MD5和SHA(哈希)
特征
- 3个函数:初始化、更新、完成
- 相似的初始化函数
识别
初始化
您可以通过检查常量来识别它们。请注意,sha_init具有MD5没有的1个常量:
MD5变换
请注意使用更多常量
CRC(哈希)
- 由于其功能是查找数据中的意外更改,因此更小且更有效
- 使用查找表(因此您可以识别常量)
识别
检查查找表常量:
CRC哈希算法如下:
APLib(压缩)
特征
- 无法识别的常量
- 您可以尝试在Python中编写算法并在线搜索类似的内容
识别
图表相当大:
检查3个比较以识别它:
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF版本的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。