ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

IC逆向与FPGA比特流还原:从网表恢复到LLM辅助分析

IC逆向与FPGA比特流还原:从网表恢复到LLM辅助分析 1. 从一篇综述聊起IC逆向到底在做什么第一次看到“TCHES 2026 IC逆向综述”这个题目我脑子里冒出来的不是学术论文的条条框框而是几年前帮朋友看一块来路不明的开发板时的场景。那块板子上有一颗打磨掉丝印的芯片朋友想知道它到底是什么型号、里面跑了什么逻辑我们手头只有一台示波器和一台老逻辑分析仪。当时折腾了整整两周最后靠抓SPI Flash的上电时序才把固件扒出来。那次经历让我意识到IC逆向这件事远不是“读个ID”那么简单它是一整套从物理层到行为层、从比特流到网表的系统工程。TCHES是硬件安全领域公认的顶会之一它出的综述往往代表了这个方向当前最系统的梳理。这篇2026年的IC逆向综述核心讨论的就是当我们手里只有一颗封装好的芯片或者一块已经烧录过的FPGA如何一步步还原出它的netlist网表、理解它的功能、甚至定位它的安全弱点。这里面涉及的技术栈非常宽有传统的版图提取、扫描链分析也有这几年被反复提及的LLM辅助逆向、FPGA比特流逆向、以及基于机器学习的网表结构化识别。为什么这篇综述值得一个做FPGA开发或者做硬件安全的人认真读因为IC逆向的边界正在快速扩张。过去它主要是学术圈和少数安全实验室的活现在随着供应链复杂化、二手芯片流通、以及FPGA在边缘设备里的大量部署逆向需求已经渗透到很多实际场景比如你买了一批二手FPGA板卡想确认里面有没有被植入额外逻辑比如你做竞品分析需要理解对方在FPGA里实现了什么算法再比如你做安全评估要判断一颗芯片的密钥存储是否真的不可提取。这些场景下IC逆向不是“攻击”而是一种必要的验证手段。这篇博文我不打算复述论文的章节结构而是想从一个一线从业者的角度把这篇综述里最核心的几条技术脉络拆开结合我自己在FPGA和硬件分析上踩过的坑讲清楚IC逆向到底怎么做、难点在哪、LLM这类新工具能帮上什么忙、以及哪些地方是新手最容易想当然的。如果你做FPGA开发、硬件安全、或者单纯对“芯片里面到底有什么”这件事好奇下面的内容应该能给你一些可以直接上手参考的思路。2. IC逆向的整体技术地图从封装到网表的四层拆解2.1 为什么IC逆向要分层来做很多人一提到IC逆向第一反应是“把芯片开盖用显微镜拍照然后一层层剥”。这确实是其中一种路径但它只是整个逆向链条里最底层的一环。真正做过完整逆向的人都知道逆向的难度不在于某一层做得多精细而在于如何把不同层的信息对齐起来。你从版图里看到一条金属线怎么知道它对应网表里的哪个节点你从比特流里恢复出一个LUT配置怎么确认它属于哪个功能模块这些问题跨层之后会变得非常棘手。这篇综述把IC逆向拆成了四个层次我觉得这个划分很实用值得展开说物理层芯片封装、金属层、晶体管级结构。这一层的手段包括开盖、SEM成像、聚焦离子束、以及近年来的光学/电学探测。逻辑层门级网表、标准单元、触发器、布线资源。这一层是从物理结构往上抽象得到逻辑连接关系。行为层功能模块、状态机、数据通路、控制流。这一层关注的是“这个电路在做什么”而不是“它由哪些门组成”。系统层固件、配置比特流、协议交互、密钥管理。这一层往往涉及芯片与外部世界的接口。分层的好处是每一层都有相对成熟的方法论而且不同层之间的信息可以互相验证。比如你在行为层怀疑某个模块是AES加密就可以回到逻辑层去找S盒对应的LUT结构再到物理层去定位那块区域的版图特征。这种交叉验证是逆向工作里最可靠的手段单靠一层的信息很容易误判。2.2 FPGA逆向和ASIC逆向的关键差异综述里专门有一节讨论FPGA逆向这一点我特别认同因为FPGA逆向和ASIC逆向的套路差别很大。ASIC是定制电路每个门的位置在流片时就固定了逆向主要靠版图提取和网表重建。FPGA则不同它的逻辑资源是预先布好的功能由比特流决定。这意味着FPGA逆向的核心问题变成了如何从比特流还原出配置网表。这个问题的难度取决于FPGA厂商的比特流格式是否公开。像一些老一代的FPGA比特流格式已经被社区逆向得比较透彻有开源工具可以直接解析。但现代FPGA的比特流往往是加密的而且配置帧的编码方式越来越复杂。综述里提到当前FPGA比特流逆向主要有三条路基于已知明文攻击如果你能控制FPGA加载的配置就可以通过对比不同配置下的比特流差异推断出每个比特的功能。这种方法在实验室里很有效但需要你能反复烧录。基于侧信道分析通过功耗或电磁辐射来推断比特流内容。这种方法不需要解密比特流但需要高精度的采集设备而且分析时间很长。基于机器学习的方法用大量已知配置训练模型让模型学会从比特流片段预测对应的逻辑功能。综述里提到这类方法在LUT功能识别上已经能做到比较高的准确率但对布线信息的恢复仍然困难。我自己在FPGA逆向上的经验是最实用的起点往往是JTAG边界扫描和配置Flash读取。很多板子的配置Flash没有做读保护你可以直接把比特流dump出来。拿到比特流之后即使不能完全解析也可以做差分分析烧一个已知功能的配置再烧一个未知配置对比两者比特流的差异区域往往能快速定位到关键逻辑所在的位置。这个技巧我在分析一块二手开发板时用过当时就是靠差分定位到了对方自定义的加密模块。2.3 网表恢复为什么是核心难点netlist是IC逆向里出现频率最高的词之一因为它是连接逻辑层和行为层的桥梁。拿到网表你才能做后续的功能分析、漏洞挖掘、或者等价性验证。但网表恢复本身就是一个NP难问题尤其是在没有原理图的情况下。综述里把网表恢复分成两个子问题结构恢复和功能恢复。结构恢复是指确定门与门之间的连接关系功能恢复是指确定每个门实现什么逻辑。对于ASIC结构恢复主要靠图像处理和布线追踪对于FPGA结构恢复主要靠比特流解析。功能恢复则越来越依赖机器学习因为很多标准单元的功能是已知的但布线后的网表里会有大量冗余和优化直接看连接关系很难理解。这里有一个我踩过的坑不要假设网表恢复出来就是干净的。实际逆向得到的网表往往包含大量未使用的逻辑、测试电路、以及工艺相关的填充单元。如果你直接拿这个网表去做仿真会发现行为跟原始芯片对不上。正确的做法是先做网表清洗把测试逻辑和填充单元去掉再做功能分析。综述里也强调了这一点它建议在网表恢复后加入一个“语义简化”步骤用图神经网络或者规则引擎来识别和合并冗余节点。3. LLM在IC逆向里到底能帮什么忙3.1 从比特流到代码LLM的切入点LLM出现在IC逆向的综述里一开始我觉得有点蹭热度但仔细看完相关章节后我改变了看法。LLM在这个领域的价值不是“直接逆向芯片”而是加速逆向过程中的语义理解环节。具体来说逆向工作里有大量重复性的模式识别任务比如从反汇编的固件里识别加密算法从网表里识别常见的功能模块如UART、SPI、DMA从比特流片段里推断LUT的实现功能从版图图像里识别标准单元的类型这些任务传统上靠人工规则或者专门的机器学习模型但LLM的优势在于它可以利用大量的先验知识。比如你给LLM一段反汇编代码它可以直接告诉你“这段代码看起来像AES的密钥扩展”而不需要你事先定义AES的特征。综述里提到已经有研究用LLM来做固件逆向的辅助分析在识别加密算法和协议格式上取得了不错的效果。但这里有一个关键限制LLM不能直接处理比特流或版图图像。比特流是二进制数据版图是图像LLM的输入是文本。所以实际使用中需要先把这些数据转换成文本表示比如把比特流转换成十六进制字符串把版图转换成网表描述然后再喂给LLM。这个转换过程本身就会丢失信息所以LLM的输出只能作为参考不能作为最终结论。3.2 用LLM做网表功能标注的实操思路我自己试过一个比较实用的流程用来给逆向出来的网表做功能标注。假设你已经从FPGA比特流恢复出了一个粗略的网表里面有一堆LUT和触发器但不知道它们组成什么模块。可以这样做提取子图把网表按连通性切成若干子图每个子图对应一个可能的功能模块。转换成文本把每个子图转换成类似“LUT4输入A,B,C,D输出E真值表为...”的文本描述。喂给LLM让LLM判断这个子图最可能实现什么功能比如“这是一个4位计数器”或“这是一个状态机”。交叉验证用仿真或者形式化验证来确认LLM的判断。这个流程的关键在于子图切分。如果子图太大LLM的上下文放不下如果太小又看不出功能。综述里建议用社区发现算法来做切分比如Louvain算法它可以根据连接密度自动把网表分成若干簇。我在实际使用中发现切分粒度控制在每个子图50到200个节点比较合适这样LLM既能理解结构又不会超出上下文限制。还有一个技巧是给LLM提供参考网表。如果你知道目标芯片里可能包含某个开源IP核可以把那个IP核的网表也转换成文本一起喂给LLM让它做对比。这种方法在识别开源IP的变体时特别有效。综述里也提到了类似的思想叫做“基于参考设计的逆向”本质上是利用已知设计来加速未知设计的理解。3.3 LLM辅助逆向的边界和风险必须说清楚LLM在IC逆向里目前还只是辅助工具不能替代传统的逆向手段。它的主要问题是幻觉LLM可能会编造一个看起来合理但实际上错误的功能解释。如果你完全信任LLM的输出可能会在后续分析里走偏。综述里也强调了这一点建议把LLM的输出作为“假设”而不是“结论”必须用其他手段验证。另一个风险是数据安全。如果你把未公开的网表或固件喂给在线LLM相当于把敏感信息上传到了第三方服务器。对于商业逆向项目这是绝对不允许的。所以实际使用中要么用本地部署的开源LLM要么只把脱敏后的片段发给在线服务。我自己更倾向于本地部署虽然模型能力弱一些但至少数据可控。还有一个容易被忽略的点LLM对硬件描述语言的理解能力参差不齐。Verilog和VHDL在训练数据里的占比不高所以LLM在理解网表时可能不如理解C代码那么准确。综述里建议如果要用LLM做网表分析最好先把网表转换成更接近软件的形式比如数据流图或者控制流图然后再喂给LLM。这样可以绕开LLM对硬件语法不熟悉的问题。4. FPGA比特流逆向的实操细节与避坑指南4.1 比特流格式解析的常见入口如果你拿到一个FPGA比特流第一步是判断它的格式。不同厂商的比特流结构差别很大但通常都包含几个部分头部包含器件ID和配置参数、配置帧实际的逻辑配置数据、尾部校验和或填充。综述里提到很多逆向工作是从头部开始的因为头部往往有固定的魔术字和版本信息可以用来识别器件型号和比特流版本。以常见的FPGA为例比特流头部通常包含一个同步字比如0xAA995566后面跟着器件ID和配置命令。如果你能解析出这些命令就能知道比特流的目标器件和配置模式。这一步不需要解密因为头部通常是明文。我在分析一块二手板卡时就是先读头部确认了FPGA型号然后去找对应的开源解析工具省了很多时间。配置帧的解析才是真正的难点。现代FPGA的配置帧通常是加密的而且加密算法和密钥管理方式不公开。综述里讨论了几种应对策略如果比特流未加密可以直接用开源工具解析比如针对某些老型号FPGA的Project IceStorm和Project X-Ray。如果比特流加密但密钥可提取可以从配置Flash或FPGA内部的密钥存储中提取密钥然后用厂商工具解密。如果比特流加密且密钥不可提取只能走侧信道或者已知明文攻击难度大幅上升。这里有一个实操建议先确认比特流是否真的加密。有些板子的配置Flash里存的是未加密比特流只是厂商工具默认加密输出导致很多人以为必须解密。我遇到过好几次这种情况直接读Flash就拿到了明文比特流根本不需要破解。4.2 差分分析在比特流逆向中的妙用差分分析是我在FPGA逆向里最常用的技巧之一它的原理很简单如果你能控制FPGA加载不同的配置就可以通过对比比特流差异来推断每个比特的功能。具体操作如下准备两个设计只有一个逻辑单元不同比如一个LUT的实现功能从AND改成OR。分别生成比特流记录两个比特流的差异位置。重复多次每次改变不同的逻辑单元建立“比特位置-逻辑功能”的对应关系。用这个对应关系去解析未知比特流。这个方法的优势是不需要理解比特流的编码格式只需要能烧录和读取比特流。综述里也提到了类似的方法叫做“基于差分故障分析的比特流逆向”。我在实际使用中发现差分分析对LUT和布线的恢复特别有效但对BRAM和DSP块的恢复效果一般因为这些硬核的配置方式更复杂。差分分析的一个坑是比特流压缩。很多厂商工具默认开启比特流压缩导致不同设计的比特流长度不一样差异位置对不齐。解决办法是在生成比特流时关闭压缩或者先用解压工具把比特流还原成未压缩格式。这个细节综述里没有展开但实际做的时候如果忽略会浪费很多时间。4.3 从比特流到网表的转换工具链拿到解析后的比特流下一步是转换成网表。这一步的工具链因厂商而异但大致流程是比特流解析把二进制比特流转换成配置帧的文本表示。资源映射把配置帧里的比特映射到具体的逻辑资源比如LUT、触发器、布线开关。网表生成根据资源映射和布线信息生成门级网表。网表优化去掉未使用的资源和冗余逻辑得到干净的网表。综述里提到当前开源工具链在第一步和第二步上已经比较成熟但在第三步和第四步上仍然依赖人工干预。尤其是布线信息的恢复因为FPGA的布线资源非常复杂一个信号可能经过多个开关盒自动追踪很容易出错。我的经验是先用工具生成粗略网表然后用仿真对比来修正。具体做法是把粗略网表放到仿真器里输入一组测试向量对比原始芯片的输出。如果输出不一致就回到网表里检查对应的路径手动修正布线连接。这个过程很耗时但比完全人工追踪要快得多。还有一个技巧是利用厂商的时序报告。如果你能拿到原始设计的时序报告比如从Flash里残留的文件或者从板卡厂商的文档里可以用它来验证网表恢复的准确性。时序报告里的路径延迟和网表里的布线长度是对应的如果两者对不上说明网表恢复有误。这个技巧我在分析一块工业控制板时用过当时就是靠时序报告发现了一个被遗漏的时钟域交叉。5. 常见问题与排查技巧实录5.1 逆向过程中最容易误判的几个地方IC逆向里有很多“看起来对但实际错”的陷阱我整理了几个最常见的问题现象可能原因排查方法网表仿真输出与原始芯片不一致布线恢复错误或遗漏了隐藏逻辑用差分测试向量逐段对比定位第一个不一致的节点比特流解析出的LUT功能与预期不符比特流压缩导致帧对齐错误关闭压缩重新生成比特流或先解压再解析LLM标注的功能模块无法通过仿真验证LLM幻觉或子图切分不当缩小子图范围提供参考设计用形式化验证确认侧信道分析结果不稳定采集设备精度不足或环境噪声太大增加采集次数做平均滤波控制环境温度配置Flash读取失败读保护或地址映射错误检查Flash型号和读保护位尝试用JTAG直接读FPGA内部配置这个表里的每一条都是我或者身边同行实际踩过的坑。比如“比特流压缩导致帧对齐错误”这一条我当初花了整整三天才定位到因为压缩后的比特流在差异对比时总是差几个字节一开始以为是工具bug后来才发现是压缩算法的问题。5.2 逆向工作的伦理和法律边界这一点必须单独说因为IC逆向很容易踩线。综述里虽然主要讲技术但也提到了伦理问题。我的原则是只对自己拥有的设备做逆向或者有明确授权的设备。二手设备如果来源不明逆向之前最好确认一下当地法律。另外逆向得到的信息不要用于商业侵权比如直接复制别人的IP核。这些边界看起来是常识但实际工作中很容易因为“只是想看看”而越界。还有一个实操层面的建议保留完整的逆向记录。包括你读了哪些寄存器、烧了哪些配置、对比了哪些比特流。这些记录在后续分析里非常重要而且如果将来需要证明你的逆向行为是合法的这些记录也是证据。我习惯用Git来管理逆向过程中的所有脚本和日志每次实验都提交一次这样回溯起来很方便。5.3 新手入门的三个实操项目如果你刚接触IC逆向不要一上来就搞复杂的ASIC开盖。综述里建议从FPGA入手因为FPGA逆向的成本低、可重复性好。我推荐三个循序渐进的入门项目读取并解析一块老FPGA开发板的配置Flash选一块二手板卡找到配置Flash用SPI读取它的内容然后尝试用开源工具解析比特流头部。这个项目能让你熟悉比特流的基本结构。用差分分析定位一个LUT的功能在同一块板卡上烧录两个只有LUT功能不同的设计对比比特流差异找到对应的比特位置。这个项目能让你理解比特流和逻辑资源的对应关系。用LLM辅助识别一个简单模块从网表里切出一个计数器或状态机转换成文本喂给本地LLM看它能否正确识别。这个项目能让你了解LLM在逆向中的实际能力边界。这三个项目做完你对IC逆向的整体流程就会有比较扎实的感性认识。之后再去看综述里的高级方法比如侧信道分析和形式化验证会更容易理解。6. 这个方向接下来值得关注的变化我在实际工作中感受到的一个明显趋势是逆向和设计的界限正在模糊。过去逆向是“事后分析”现在越来越多的设计工具开始内置逆向功能比如用来做等价性检查或者安全验证。综述里也提到了这一点它认为未来的IC逆向会更多地和EDA工具链融合而不是作为一个独立的流程存在。另一个变化是LLM的介入会越来越深。目前LLM主要用在语义理解环节但已经有研究在尝试用LLM直接生成网表或者比特流解析规则。如果这个方向成熟逆向的门槛会大幅降低但同时也意味着防护方需要更强的混淆和加密手段。这是一个典型的攻防螺旋短期内不会停下来。最后分享一个我在实际项目里总结的小技巧逆向之前先问自己“我要回答什么问题”。IC逆向很容易陷入“什么都想恢复”的陷阱结果做了大量无用功。如果你的目标只是确认某个模块是否存在就不需要恢复整个网表如果你的目标是找到密钥就直接从密钥存储入手。明确目标之后逆向的路径会清晰很多也能省下大量时间。这个心得虽然简单但我在带新人的时候发现它是区分高效逆向和低效逆向的关键。
返回列表