二进制加密

逆向工程 手臂 加密 二进制
2021-07-07 00:07:07

我想请您帮助理解用于加密这些十六进制/二进制固件的算法(对于 ARM-Cortex M4 微控制器)。

在上面的 tar 文件中,您可以找到不同的固件版本。特别是V16版本已经发布了加密、明文和加密的TE版本(不知道TE是什么意思)。

自从我开始分析这些文件已经有一段时间了(我过去也在这里问过另一个问题),但到目前为止,我没有找到解决方案。我试图反转字节,交换半字节,异或但没有运气。

如您所见,加密版本比普通版本长 276 个字节。我希望在这些字节中定义了页眉/页脚和引导加载程序用于在闪烁之前解密二进制文件的关键部分。

我个人认为已经使用了一个简单的算法(比如 Salsa20 或 ChaCha),没有什么复杂的(SHA 等)。谢谢你。

1个回答

事实上,我怀疑他们在这个固件文件上使用了Salsa20......让我先解释一下我调查这种情况的方法。其余的,我将主要使用该binwalk工具。

  1. 我首先要做的是评估文件的全局熵。这是评估我们是否正在考虑加密的一种非常快速的方法。

    binwalk -E firmware.bin
    

    例如,我用 Salsa20 加密了一个文件(仅用ABCDEFGHIJKLMNOPQRSTUVWXYZ字符串填充)。我得到了以下结果:

    Salsa20 密码的熵

    请注意,获得的熵接近于 1,这正是我们使用任何加密算法时所期望的。

  2. 我的过程中的第二步是尝试获取固件的两个连续版本并分析差异。通过查看两个文件之间的差异,您可以学到什么是惊人的。因此,例如,我加密了ABCDEFGHIJKLMNOPQRSTUVWXYZ在第一个文件中重复多次的字符串,并在第二个文件 execpt 中对第一个字符串进行了加密,其中我将第一个字符串的 替换NZ

    binwalk -W firmware-1.bin firmware-2.bin
    

    Salsa20 加密的两个文件的区别

    你可能注意到了,Salsa20 是一个流密码,所以我修改了一个字节,然后只修改了一个字节。

    事实上,固件的两个版本之间的差异会为您提供有关加密算法的块大小及其模式(例如 ECB、CBC 或其他)的信息。一旦你有了这个,你可能会放弃一些算法或针对最可能的算法。

  3. 一旦你收集了所有这些信息,就没有真正的经验法则。要有创造力,并尝试用你拥有的东西推断出更多的东西,并做出一些好的和直观的假设。

现在,让我们回到你的固件。我拿了ZPK0J020_V16_20161206_AP-D7D1.hexZPK0J020_V17_20170310_AP-1E6A.hex而且,我应用了我之前描述的方法。

首先,两个版本的固件差异并不违背Salsa20的假设,只是熵太低,不能像Salsa20那样强加密。

固件 V16 的熵

我的结论是这些固件文件的加密可能很弱。我会去异或加密或类似的东西。但是,我没有进一步调查,因为我认为我取消了 Salsa20 的资格并回答了您的问题。现在由你来挖一点!