反转 RISC-V 的关键一代固件

逆向工程 二元分析 固件 硬件 去混淆 嵌入式
2021-07-10 15:03:15

我想为RISC-V 开发板Sipeed MAix研究这个固件你可以在这里下载:key_gen_v1.2.zip顾名思义,它的目的是

  1. 计算并打印一个“机器密钥”到串口,
  2. 永远关闭 JTAG 端口,并且
  3. 写一次性 AES 密钥。

下载其他演示固件时需要机器密钥,倒车不是本文的主要目标。有关更多上下文,请参阅此线程反转的重点是弄清楚如何在不永久禁用 JTAG 的情况下获取机器密钥。

的快速分析binwalk不会产生任何有趣的结果。

$ binwalk -e key_gen_v1.2.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

熵分析表明固件没有使用混淆

在此处输入图片说明

这是输出 strings

sP00sP 0sP@0sP@4
&#41'#0A'#<Q%#8a%#4q%#0
$#8A##4Q##0a##8
"#0!##<1!#8A!#<
$#8A##4Q##0a##8
                0000000000000000
0123456789abcdef
0123456789ABCDEF
                0000000000000000
                0000000000000000C
                0000000000000000
         (((((
V (%lu) %s: misaligned load recovered at %08lx. len:%02d,addr:%08lx,reg:%02d,data:%016lx,signed:%1d,float:%1d
V (%lu) %s: misaligned store recovered at %08lx. len:%02d,addr:%08lx,reg:%02d,data:%016lx,float:%1d
[0;31mE (%lu) %s: Out of memory
[0;33mW (%lu) %s: sys_exit called by core %ld with 0x%lx
[0;31mE (%lu) %s: Unsupported syscall %ld: a0=%lx, a1=%lx, a2=%lx!
?Error:  No workable settings found.
Error:  No appropriate ratio found.

Reversing the WRT120N's Firmware Obfuscation中,通过观察串口的输出取得了突破。但是,这个特定的固件不会向串行端口输出太多有用的信息。此外,我还没有找到一个像样的 RISC-V 反汇编器(比如 ARM 的 IDA)。

我接下来可以做什么?

1个回答

https://github.com/NationalSecurityAgency/ghidra

截至 12 月初,Ghidra 在 master 中有 RISC-V 支持。它应该添加到 9.2 版本中,在此之前您必须从源代码构建。