EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载插图

工作原理

EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载

EntropyReducer算法BUFF_SIZENULL_BYTES值决定。以下是如果设置为4和2 , EntropyReducer将如何组织您的有效负载。BUFF_SIZENULL_BYTES

混淆算法

  • EntropyReducer首先检查输入原始负载的大小是否为 的倍数BUFF_SIZE,如果不是,则将其填充为原样。
  • 然后它从有效负载中取出每个块,并使用InitializePayloadListBUFF_SIZE函数为它创建一个链表节点,将有效负载初始化为一个链表。
  • 创建的节点将有一个大小为的空缓冲区NULL_BYTES,将用于降低熵
  • 此时,尽管EntropyReducer通过降低有效载荷的熵完成了它的任务,但它并没有就此停止。然后它继续随机化链表中每个节点的顺序,分解原始负载的顺序。此步骤是通过MergeSort函数实现的合并排序算法完成的。
  • 排序后的链表是随机排序的,因为链表排序后的值原始payload的前三个字节的异或值,这个值决定了它在重新组织的链表中的位置,这一步可以显示这里
  • 因为将链表保存到文件是不可能的,因为它是由指针链接在一起的。我们被迫将其序列化
  • 生成的链表的序列化是通过这里的Obfuscate函数完成的。
  • 之后,序列化数据就可以写入输出文件了。

混淆算法

  • 由于最后一步是Obfuscation Algorithm序列化链表,所以这里要做的第一件事就是反序列化混淆后的有效负载,从中生成链表,这一步在函数中完成Deobfuscate
  • 下一步是使用节点的 Id 对链表进行排序,这是使用之前使用的相同合并排序算法完成的。
  • 现在,链表的顺序正确,可以按照应有的方式重新构造有效载荷的字节。所以我们只需从每个节点中剥离有效载荷的原始字节,就像这里所做的那样。
  • 最后一步是释放分配的节点,在此处完成。

用法

  • EntropyReducer只是从命令行读取原始负载文件,并将混淆后的版本写入以“.ER”为前缀的相同文件名。
  • 最终混淆后的有效负载的大小取决于 和 的BUFF_SIZENULL_BYTES。但是,可以使用以下等式确定
FinalSize = ((OriginalSize + BUFF_SIZE - OriginalSize % BUFF_SIZE ) / BUFF_SIZE) * (BUFF_SIZE + NULL_BYTES + sizeof(INT))

包含在您的项目中

您所要做的就是将EntropyReducer.cEntropyReducer.h文件添加到您的项目中,然后调用Deobfuscate函数。您可以查看PoC/main.c以供参考。

输出示例

在此示例中,设置BUFF_SIZE3NULL_BYTES1 。

  • 原始有效负载,第一个有效负载块 ( FC 48 83)
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载
  • 相同的有效负载块,但偏移量不同
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载

利润

EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载
  • 同一个文件,AES 加密,得分熵为7.110.
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载
  • RC4 算法的结果也几乎相同;7.210
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载
  • 然而,使用EntropyReducer,得分熵甚至低于原始原始负载的熵;4.093
EntropyReducer | 使用序列化链接列表减少熵并混淆您的有效负载

合并排序算法取自c-linked-list