尝试反编译十六进制固件

逆向工程 拆卸 固件
2021-06-15 09:06:37

我设法为我的 IoT 设备获取了固件,但固件是十六进制的。将其转换为二进制文件以便我可以使用 binwalk 的最佳方法是什么?到目前为止,我已经尝试将它转换为srec_cat hex.file -Intel -Output binary.file -Binary. 我试图用 binwalk 分析转换后的文件,但我得到的唯一结果是:

SHA256 hash constants, little endian
Certificate in DER format (x509 v3), header length: 4, sequence length: 678

难道我做错了什么?

编辑:使用后binwalk -Ive binary.file我设法提取了一些文件。文件未正确检测,但当我查看文件时,我看到我的设备上使用了一些文本。

编辑 2:我认为固件没有被压缩。但我不确定它是否加密。检查这个的最好方法是什么?

$ file binary.file
binary.file: data

使用strings -n 10 binary.file我得到一个看似有效的字符串列表。

2个回答

将您的十六进制文件转换为二进制文件

使用xxd -p -r. 例如:

echo -n "deadbeef" | xxd -p -r | od -tx1

所以,在你的情况下,xxd -p -r hex.file > binary.file应该做到这一点。

加密与否

如果您看到带有典型设备消息的未加密字符串,则您的固件(很可能)未加密,因为不太可能只有部分会加密而其他部分不会。

如果未加密的字符串是来自glibc或其他库的典型字符串,则不确定。

您的固件包含证书并不意味着它已加密。例如,该证书可用于保护 IoT 和远程服务器之间的通信。

作为第一步,您应该检查数据表以获得字节顺序和加载地址。然后你可以尝试用你最喜欢的反汇编程序加载你的固件,例如用radare2你可以使用类似这样的语法

r2 -a your_arch -b bytes_num -m loading_address

看看这个了解更多细节。

使用IDA,您应该设置处理器类型/选项以及可以从数据表中获得的 RAM 和 ROM 地址。

看看这个例子。