二进制熵减少
一、介绍
信息论熵 指的是数据集中随机性的程度,随机性程度增加,熵值也随之增大。各种类型的熵度量标准,如吉布斯熵、玻尔兹曼熵和雷尼熵。然而,在网络安全领域,熵通常指的是香农熵,它产生 0 到 8 之间的一个值。随着数据集中随机性级别的增加,熵值也会增加。
恶意软件二进制文件通常具有高于普通文件的高熵值。高熵通常是压缩、加密或打包数据的指标,恶意软件经常使用这些数据来隐藏签名。压缩、加密或打包的数据经常产生大量随机输出,从而解释了为什么恶意软件中的熵较高的原因。如下图所示
下图比较了合法软件和恶意软件样本的熵。请注意,大多数恶意软件文件的熵值范围从 7.2 到 8,而良性文件大多在 5.6 到 6.8 之间。
计算熵值:https://github.com/yutianqaq/EntropyCalc_Go
二、熵值减少
算法选择
如前所述,恶意软件文件中的数据通常会以某种方式被混淆或编码,以增加其熵值。为了解决这个问题,一个解决方案是修改所使用的加密算法,因为有些加密算法相对于其他加密算法,它们所生成密文数据的熵值更高。
例如,使用单字节异或加密不会改变输出数据的整体熵值。此算法的缺点在于它被认为是一种弱加密算法。
另一种保持熵值较低且行之有效的方法是使用初学者模块中解释的混淆算法,如 IPv4fuscation、IPv6fuscation、Macfuscation 和 UUIDfuscation,而不是使用加密算法。这些混淆方法输出的数据具有一定程度的组织性和有序性。因此,数据集中相似的字节模式将获得比完全随机字节数据集更低的熵值。
项目推荐:https://github.com/amroes/FlexSheller
插入英文字符串
减小信息熵的另一种方法是将英文字符串插入最终实现的代码中。这种技术已在各种恶意软件样本中得到验证,其中一组随机的英文字符串被插入代码中。之所以可行,是因为英文仅包含 26 个字符,这意味着每个字节只有 26 * 2(大小写字母)种不同的可能性。这低于加密算法输出的可能性数量(255 种可能性)。如果要使用这种技术,建议使用全部小写或全部大写的字符串来减少每个字节的可能性数量,话虽如此,不建议采用此方法,因为插入实现中的字符串随后可用作签名来检测恶意软件。
以相同字节填充
一种更简单的降低熵的方法是通过反复用相同字节填充有效负载的密文。这有效是因为这些附加的字节将获得 0.00 的熵,因为它们都是相同的。
我尝试添加0xEA
字节至cs shellcode 熵值并无很大变化。
本文来自博客园,作者:aoaoaoao,转载请注明原文链接:https://www.cnblogs.com/websecyw/p/18711711
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构