HellGates, custom CPU gate-level challenge
5 hours ago
- 自定义32位CPU,采用加密、按位寻址的内存,用VHDL设计并综合成高度混淆的门级网表。
- CPU拥有16个通用寄存器以及用于溢出、条件标志、程序计数器、密钥修饰符和TEA伪随机状态的专用寄存器。
- 内存加密使用两层TEA:根据CPU状态动态生成的字密钥,以及基于随机数和字索引的密钥加密密钥(KEK),以防止侧信道攻击。
- 字索引被置换以将程序分散到1GB的data.bin中,并与熵数据混合。
- 状态加密(简单的异或和与fake_values的加法)的弱点允许侧信道/差分分析攻击。
- GPT-6通过利用侧信道在30分钟内解决了挑战,调用具有正确CPU状态的网表来解密内存。
- 该程序(用自定义汇编语言hgasm编写)包括LCD显示、密码检查、反调试、防篡改、计时检查和动画骷髅头。
- 主机端混淆包括递归加密的嵌套shellcode(CXE)、通过异常处理器的运行时解密以及使用纳米点(int3、SIGSEGV)的控制流混淆。
- 使用的工具链:yosys、GHDL、blif2cpp、LLVM、ELFIO以及用于shellcode生成的自定义链接脚本。
- 作者承认解决方案是部分的(仅侧信道),并计划下一代没有实际侧信道的挑战。