反向工程 无文件结构: 创建自定义处理器

2026年9月6日2 次浏览来源:Dev.to阅读原文

当面对一个二进制时,Ghidra缺乏拆解它所需的SLEIGH规格时,你碰到了一个绝大多数倒向工程师永远不会遇到的问题.

在美国估计的25,000名倒向工程师中,只有约500名(~2%)在这个特定领域工作.

无文件的《国际审计准则》A的处理器没有文件的指令集,从来就没有完全异国情调。

从零开始重建指令集架构(ISA)太昂贵了.

因此,几乎所有没有文件的处理器都是主要现有家族的衍生物: 带有剥去指令的基建架构 由于基础操作的保密性,为专门工作量添加了自定义指令 被拼接或非标准操作码 要掌握这个位置,亲身体验就是一切。

带有自定义 VM 的 CMF 是一个良好的开端, 但没有什么能比起生成您的自定义处理器, 并磨亮您的工具来对抗自定义构建的挑战 。

Processor Generation 的 Pitfalls Building 一个自定义处理器生成器听起来很直截了当,直到您遇到数据提取问题:为主要架构检索有效的操作码/指令表.

关于LLMs的注释:对于古老的8位架构,带有被缩小的指令集,LLMs可以毫无瑕疵地取出表格(参见我之前关于dev.to/dupard的研究).

然而,一旦你瞄准了现代,重型的ISA,LLMs就崩溃了.

可靠方法:最有力的解决办法是直接从binutils-gdb提取、清理和剖析文件(例如)。

自定义处理器工具链 要生成自定义处理器, 您需要一个核心三进制 。

ARM 32- 位元示例: QQ 这个三进制决定了可能适用于opcode和可操作比特的外观,以及精确的搜索空间.

一旦拥有了干净的表格,这一过程就成为一个纯粹的管道问题: 创建 Transcoding Table: 映射本地对您自定义的 ISA 的指令( 选择放弃特定指令) 。

转码目标二进制:通过您的地图为本地的ISA处理一个编译的标准二进制 。

输入自定义指令:在重新计算跳跃时插入新的逻辑,分支,并调用偏移.

修复二进制标题:再对齐部分(如ELF结构内部).

重新组装输出( O) : 重新生成一个有效,干净的自定义二进制 。

您现在有一个功能完备的自定义二进制可供分析练习 。

将其带入硬件级别( FPGA Offuscation) 这种软件方法也直接映射到硬件逻辑.

您可以轻易从您的管道中获取一个 Verilog 文件来部署一个FPGA , 专门用于这个新处理器 。

如果你的目标是使分析几乎不可能,你可以添加防线层: 二层加密: 一个静键和一个活键结合.

LUT几何转换:Tweak Lookup Table几何以打破标准的ASIC/FPGA倒置.

冗余投票系统:实施硬件投票模块.

反导物理动作:去除JTAG接驳并吹出物理安全引信.

通过去除硬件调试接口,标准芯片攻击技术失败了——使分析师拥有纯,无辅助的组合复杂.

分享