ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

IC逆向全链路解析:从网表提取到LLM辅助功能理解

IC逆向全链路解析:从网表提取到LLM辅助功能理解 1. 从TCHES 2026这篇综述说起IC逆向到底在逆什么第一次看到IC逆向综述这个标题很多人脑子里冒出来的画面大概是实验室里拿着显微镜一层层磨芯片的工程师。这个印象不算错但只覆盖了整条链路的前半段。TCHESIACR Transactions on Cryptographic Hardware and Embedded Systems作为硬件安全领域的顶会级期刊2026年这篇综述真正想梳理的是从一颗封装好的芯片到一份可读的网表netlist再到能理解其功能语义的完整方法论体系。它把过去十几年散落在各个子领域的技术——成像、去层、网表提取、逻辑还原、协议推断——串成了一条线。为什么这件事值得单独写一篇综述因为IC逆向早就不是单纯的抄板了。它在硬件木马检测、供应链安全审计、遗留系统维护、知识产权取证、甚至学术研究中的芯片架构分析里都有硬需求。而近两年LLM的介入让原本高度依赖人工经验的网表语义理解环节出现了新的可能性。这篇综述的价值恰恰在于它没有停留在某一种技术怎么用而是试图回答一个更根本的问题当逆向对象从几十门电路的小芯片变成上亿门级的SoC当工艺从微米级走到几纳米我们手里的工具箱还够用吗我自己的背景偏FPGA和数字逻辑设计平时更多是在正向地写RTL、跑综合、做时序收敛。但恰恰是这种正向经验让我在读逆向相关材料时有一种特别的感受——逆向本质上是正向设计流程的逆运算而逆运算往往比正运算难得多因为正向设计时每一步都有明确意图逆向时你面对的只有结果意图全部丢失了。这篇综述讨论的核心难点几乎都源于这个意图丢失问题。所以这篇文章我不打算写成综述的翻译或摘要而是想以一个数字设计从业者的视角把IC逆向这条链路拆开讲清楚每个环节在做什么、为什么难、和FPGA/LLM这些热词到底怎么产生关联以及如果你真的想上手应该从哪里切入。关键词里的netlist、FPGA、LLM我会分别落到具体环节里去讲而不是泛泛而谈。2. 逆向链路的第一公里从封装到图像再到网表2.1 去层与成像为什么这一步决定了后面所有环节的上限IC逆向的物理起点是样品制备。一颗芯片到手你看到的只是塑料或陶瓷封装里面的裸片die被封装材料包裹着。要看到电路必须先把封装去掉这个过程叫decapsulation。常见做法有化学腐蚀用发烟硝酸等试剂溶解封装材料、等离子体刻蚀、以及机械研磨。每种方法都有代价化学法快但容易伤到键合线和金属层等离子体法温和但慢机械研磨可控性差、容易产生应力裂纹。去封装之后真正的挑战才开始。现代芯片是多层金属堆叠结构先进工艺下金属层数可以到十几层甚至更多。你要看到最底层的晶体管就必须一层一层地把上面的金属和介质去掉每去一层拍一次高分辨率图像。这个逐层剥离逐层成像的过程用的是扫描电子显微镜SEM或者光学显微镜配合精密位移台。图像的分辨率直接决定了你能不能分辨出最小的特征尺寸——在几纳米节点上一根金属线的宽度可能只有几十个原子那么宽成像稍有模糊后面的网表提取就会出错。这里有个很多人忽略的点去层和成像不是拍完就完事而是要为后续的图像拼接和对齐服务。每一层的图像必须能和相邻层精确对齐否则你根本无法判断哪条金属线通过通孔via连到了下一层的哪条线。对齐误差累积到后面网表就是一团乱麻。2.2 图像到网表从像素到逻辑门的语义鸿沟有了逐层图像下一步是图像分割与特征提取。这一步要把图像里的金属线、通孔、多晶硅栅极、扩散区等结构识别出来转成几何图形。传统方法靠图像处理算法边缘检测、形态学操作、模板匹配近些年深度学习分割网络如U-Net变体也被大量引入尤其在噪声大、对比度低的SEM图像上效果明显更好。几何图形提取出来后进入**网表提取netlist extraction**阶段。这一步要把几何连接关系转成电路连接关系哪些晶体管、它们的栅极/源极/漏极怎么连、形成了什么逻辑门。对于标准CMOS工艺这一步相对成熟因为晶体管结构和连接规则是已知的。但麻烦在于逆向对象往往不是标准单元库拼出来的规整电路——模拟部分、定制逻辑、存储器阵列的结构千差万别自动化工具很难通吃。我特别想强调netlist这个词在逆向语境下的双重含义。在正向设计里netlist是综合工具输出的、门级或晶体管级的连接描述是确定的、完整的。但在逆向里你提取出的netlist是推断出来的它可能包含错误连接、缺失节点、把两个本该分开的节点误判为连通。也就是说逆向netlist天生带有不确定性后续所有分析都必须在这个不确定性下进行。这一点和正向设计思维完全不同也是很多从FPGA转过来的人最容易低估的地方。2.3 网表到功能逆向里最像破案的部分拿到netlist只是拿到了电路长什么样还没到电路干什么。从netlist到功能理解需要做逻辑还原和语义推断。对于纯组合逻辑可以靠布尔函数提取和化简对于时序逻辑要识别出触发器、锁存器、状态机对于数据通路要识别出加法器、乘法器、移位器等运算单元。这一步的自动化程度远低于网表提取很多时候依赖工程师的经验和模式识别能力。举个具体场景你在一堆门电路里发现了一组结构看起来像是一个线性反馈移位寄存器LFSR。但它是用来做伪随机数生成、做CRC校验、还是做加密里的密钥流生成光看结构判断不了必须结合它在整个电路里的位置、输入输出来源、时钟域关系来综合推断。这就是为什么综述里会把功能理解单独作为一个大章节——它本质上是从结构信息反推设计意图而设计意图是没法从结构里唯一确定的。3. 为什么FPGA从业者应该关心IC逆向3.1 正向与逆向的镜像关系FPGA设计经验能迁移什么我在FPGA上做过不少项目从串口通信、SPI、到高速ADC采样、DDR读写、图像处理流水线。做这些项目时我脑子里始终有一个设计意图在指引我要实现一个频率测量所以我会用计数器和闸门我要做边缘检测所以我会用卷积核加流水线。但逆向工程师面对的是没有意图标注的成品他们要从结果反推意图。这种镜像关系意味着FPGA正向设计经验在逆向里是有用的但用法不一样。比如你熟悉FPGA里的查找表LUT结构那么在逆向FPGA网表时你就能快速识别出哪些LUT被配置成了什么逻辑功能。你熟悉进位链carry chain那么在逆向里看到一串级联的进位结构就能判断这里大概率是个加法器或计数器。你熟悉块RAMBRAM的读写时序那么在逆向存储器阵列时就能更快理解其访问模式。但反过来逆向思维也能反哺正向设计。当你习惯了从结构反推功能你在写RTL时会更注意结构的可读性和意图的可推断性——你会下意识地让综合出来的电路更容易被理解这在做IP核交付、代码审查、甚至自己半年后回看代码时都有好处。3.2 FPGA在逆向流程里扮演的两个角色FPGA和IC逆向的关系其实有两个层面很多人只想到第一个。第一个层面是FPGA作为逆向对象。FPGA本身就是一种IC而且它的逆向有特殊性FPGA的功能不是硬连线的而是由配置比特流bitstream决定的。逆向一颗FPGA核心是逆向它的bitstream格式搞清楚哪一位控制哪个LUT、哪个开关、哪个BRAM。这个方向在学术界叫bitstream reverse engineering和ASIC逆向是两套方法论。热词里出现的fpga项目实战fpga入门黑金FPGA这些更多是正向开发语境但如果你要做FPGA逆向正向开发经验是绝对的基础——你得先知道FPGA内部资源怎么用才能理解bitstream在配置什么。第二个层面是FPGA作为逆向工具的平台。这一点更少人提但很实用。逆向过程中经常需要做协议推断和功能验证这时候FPGA可以充当一个可重构的测试平台你把推断出的接口协议用FPGA实现出来去和待测芯片通信看行为是否匹配。比如你怀疑某个芯片用的是某种SPI变体你可以用FPGA搭一个SPI主机逐步试探时序参数验证你的推断。这种用FPGA做逆向验证的思路在综述里属于验证环节但实际项目中非常管用。3.3 一个具体的迁移案例从DDR读写程序到存储器逆向我做过基于FPGA的多端口DDR读写程序对DDR的bank结构、行地址列地址、刷新机制、时序参数都比较熟。这套知识在逆向存储器相关电路时直接能用。假设你在逆向一颗SoC发现里面有一块疑似DDR控制器的逻辑你可以从几个特征快速判断有没有周期性的刷新请求、地址线是不是分行列两段、有没有bank切换逻辑、读写数据有没有经过一个明显的对齐/缓冲级。这些特征在正向设计DDR控制器时你天天打交道逆向时就是现成的指纹。同样的逻辑适用于其他模块。做过高速ADC采样的对LVDS接收、串并转换、数据对齐这些结构敏感做过图像处理的对行缓冲、卷积窗口、流水线级数敏感。正向经验越丰富逆向时的模式识别能力越强这是这篇综述没有明说但贯穿始终的一个隐含观点。4. LLM介入网表理解可能性、边界与真实案例4.1 为什么LLM会被引入逆向流程传统逆向流程里最耗人力的环节是功能语义理解。网表提取可以自动化但这段电路在干什么往往需要工程师逐段阅读、画图、推理。一个中等规模的设计人工理解可能要几天到几周。LLM的出现让研究者开始思考能不能让模型来辅助这个过程LLM在这里的潜在价值有三个。第一是模式总结把一段网表的连接关系用自然语言描述出来降低阅读门槛。第二是功能猜测基于结构特征和上下文给出可能的功能假设供工程师验证。第三是跨层关联把网表结构、协议特征、已知IP库进行关联帮助定位这是不是某个已知模块的变体。热词里llm的token三个点key我是谁、query我在找什么、value我能提供什么这个说法其实点出了LLM处理网表时的一个核心机制。如果把网表节点看作token那么每个节点的key可以理解为它的结构身份它是什么类型的单元query可以理解为它在当前上下文里需要什么信息它的输入从哪来、输出到哪去value可以理解为它能提供的信息它的逻辑功能、时序特性。注意力机制本质上就是在做这种结构信息的聚合。理解这一点就能理解为什么LLM在网表这种图结构数据上有潜力——它和序列数据不同但注意力机制天然适合处理节点间关系。4.2 边界在哪里LLM不能替代什么但必须泼一盆冷水。LLM在逆向里的边界非常清晰。第一LLM不能保证正确性。网表理解是容错率极低的任务一个连接错误可能导致完全错误的功能判断。LLM的输出是概率性的它可能给出一个看起来合理但实际错误的功能描述。在安全审计、木马检测这类场景里这种错误是不可接受的。所以LLM的输出只能作为假设必须经过形式化验证或人工确认。第二LLM对超大规模网表无能为力。现代SoC网表动辄上亿门LLM的上下文窗口再大也装不下。实际做法只能是分块处理但分块会丢失跨模块的全局信息而很多功能恰恰体现在跨模块交互上。第三LLM缺乏对工艺和电气特性的理解。网表是逻辑层的抽象但很多功能判断需要结合电气特性——比如某个结构是不是上电复位电路、某个节点是不是高阻态、某个路径是不是有特殊的上拉下拉。这些信息在纯网表里看不到LLM更看不到。我的判断是LLM在逆向里的合理定位是辅助阅读工具和假设生成器而不是自动逆向机。它能帮你更快地浏览网表、更快地形成假设但验证假设、做最终判断的仍然是人。综述里如果讨论了LLM大概率也是这个基调。4.3 从llm as judge到llm as assistant一个务实的用法热词里有llm as judge和基于LLM的单元测试这两个概念其实可以迁移到逆向验证里。一个务实的用法是让LLM扮演审稿人你给它一段网表描述和你的功能假设让它挑毛病——如果这个假设成立那么某个节点的行为应该是什么样现在网表里是这样吗通过这种对抗式提问可以暴露假设里的漏洞。另一个用法是生成测试向量。你推断某段电路是个CRC校验器但不确定多项式是什么。你可以让LLM基于常见CRC多项式生成一组测试输入和预期输出然后用FPGA或仿真工具去跑这段网表看哪个多项式匹配。这就是把LLM的知识和实际验证结合起来比单纯让LLM猜功能靠谱得多。5. 逆向工程师的实操工具箱从设备到流程5.1 硬件侧你至少需要什么如果你真的想上手IC逆向硬件投入是绕不开的。按从低到高的门槛排环节基础配置进阶配置说明去封装化学通风橱腐蚀试剂等离子体刻蚀机化学法成本低但风险高需严格防护成像光学显微镜SEM/聚焦离子束光学极限约在亚微米先进工艺必须SEM去层机械研磨抛光选择性刻蚀终点检测去层均匀性直接决定图像质量探针手动探针台自动化探针台参数分析仪用于电学验证和信号探测计算工作站图像处理软件GPU集群深度学习框架图像分割和网表提取吃算力对个人或小团队来说全套设备不现实。更务实的路径是从FPGA逆向或从已有网表分析入手这两条路对物理设备依赖低更偏软件和逻辑分析。热词里fpga项目fpga开发这些其实可以看作逆向的低门槛入口——你先在FPGA上理解数字电路的结构和bitstream关系再往ASIC逆向延伸会顺很多。5.2 软件侧网表分析的工具链拿到netlist之后分析工具的选择很关键。常见的有几类网表解析与可视化把netlist转成图结构用图数据库或专用EDA工具展示连接关系。开源的有一些基于Python的网表解析库商业的有主流EDA厂商的逆向分析套件。逻辑等价性检查验证你提取的netlist和原始芯片行为是否一致这一步在正向设计里叫LECLogic Equivalence Check逆向里同样适用。模式识别脚本自己写脚本识别常见结构触发器、加法器、状态机这是效率提升的关键。我见过有团队维护一个结构指纹库把常见IP的结构特征存下来逆向时先做匹配匹配不上的再人工分析。仿真验证把提取的netlist导入仿真器跑测试向量看行为是否符合预期。这里有个经验不要一上来就追求全自动。逆向的自动化程度受限于样本质量和结构规整度很多时候半自动工具做粗筛人工做精判反而更快。我见过有人花大力气搭全自动流水线结果在非标准结构上频繁出错最后还是要人工兜底不如一开始就把人工环节设计进流程。5.3 流程侧一个可复现的逆向工作流把上面的环节串起来一个相对完整的工作流是这样的目标定义先想清楚你要逆向出什么——是完整网表、是某个模块的功能、还是某个协议目标不同投入差别巨大。样品制备去封装、去层、逐层成像。这一步的质量决定后面所有环节。图像处理拼接、对齐、分割、特征提取。网表提取几何到电路的转换输出带不确定性的netlist。结构识别识别标准单元、存储器、运算单元、状态机。功能推断结合结构、上下文、领域知识推断功能。验证仿真、电学探测、FPGA复现确认推断正确。文档化把结果整理成可读的文档标注不确定项。这个流程里第5到第7步是LLM可以介入的地方第2到第4步是物理和图像处理的天下第8步目前还是人的活。综述的价值在于它把每一步的方法、局限、最新进展都梳理了一遍让你知道在每个环节上当前技术能做到什么程度。6. 几个容易被低估的坑和我的实操体会6.1 坑一把逆向netlist当成确定信息这是最致命的认知错误。正向设计的netlist是确定的逆向的netlist是推断的。我见过有人拿着逆向netlist直接做安全分析得出这个芯片没有硬件木马的结论但实际上木马可能藏在提取失败的节点里或者藏在被误判为普通逻辑的结构里。逆向结果必须带置信度哪些连接是确定的、哪些是推测的、哪些是完全没提取到的必须分清楚。6.2 坑二忽视模拟和混合信号部分数字逆向的方法论相对成熟但真实芯片里大量存在模拟电路、电源管理、时钟生成、IO接口。这些部分的结构和数字逻辑完全不同网表提取和功能推断的方法也不一样。很多逆向项目失败不是数字部分没搞定而是卡在模拟部分。如果你只懂数字做逆向时要清楚自己的边界必要时找模拟方向的合作者。6.3 坑三低估验证成本逆向的验证成本经常被低估。你推断出一个功能怎么证明它是对的仿真需要测试向量测试向量需要你对功能有足够理解才能生成——这是个循环依赖。电学探测需要探针台和参数分析仪还要在不破坏芯片的前提下接触节点。FPGA复现需要你把推断的电路重新实现一遍这本身就是一个设计工作量。验证往往比推断更花时间项目排期时要把这块算进去。6.4 我的体会正向设计是逆向最好的训练最后说点个人感受。我做了这些年FPGA和数字设计最大的体会是想学好逆向先把正向设计做扎实。你亲手实现过DDR控制器逆向时看到类似结构就能秒懂你亲手写过状态机逆向时看到状态转移图就能快速还原你亲手调过时序逆向时看到时钟树和复位逻辑就能判断设计意图。热词里那么多FPGA相关的内容——从入门到项目实战从串口到高速ADC从图像处理到频率测量——这些看似和逆向无关的正向技能其实都是逆向能力的底层积累。LLM是个好工具但它替代不了这种底层积累。它能帮你更快地读网表、更快地形成假设但假设对不对、结构意味着什么、这个设计为什么这么做最终还是要靠你对数字电路的理解来判断。TCHES这篇综述如果有一个贯穿始终的主线我认为就是逆向的难点不在工具而在理解。工具在进步LLM在加入但理解设计意图这件事仍然高度依赖人的经验和判断。如果你现在还在FPGA入门阶段不用急着去碰IC逆向。先把正向设计做透把常见模块的结构和意图刻进脑子里等哪天你真的需要逆向时你会发现那些正向经验就是你最趁手的工具。
返回列表