熵是什么意思以及如何使用它?

逆向工程
2021-06-21 20:43:40

binwalk -E当我尝试对一些 CTF 二进制文件进行逆向工程时,我正在玩弄并且只是在查看一些熵图。我有点了解密码学中数据/信息熵的使用(它通常用于帮助确定使用什么密码/加密),但我没有读过或听说过关于程序分析中熵的任何内容。

熵在逆向工程中的真正含义是什么?它对程序有什么看法?如何使用?

1个回答

熵是对字节“随机性”外观的度量。例如,如果你对这篇文章的文本内容取熵,然后取一个 SHA-512 散列或 RSA 密文的熵,你会看到散列和 RSA 密文比明文内容显着增加这个帖子。例如,明文英语有已知的熵水平。

如何在逆向工程中使用它

熵的一个有用功能是确定程序中密文或其他加密输出的区域。一个具体的例子是采用“打包”或压缩的恶意软件样本,并将熵级别与未打包或未压缩的程序进行比较。打包的恶意软件样本的熵水平要高得多。一个有用的应用是简单地编写一个脚本来批量扫描文件并获取熵读数,以便识别具有大面积打包/压缩/加密数据的文件。这些文件将具有更高的熵读数。恶意软件分析师有时会在初始粗略分析中对文件进行熵读取,以确定文件是否已打包。

换个角度,如果你想在你自己的程序中打包或压缩数据,你可以写你的打包代码,然后比较输出数据的熵和未压缩数据的熵,看看你引入了多少“随机性”。