ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

IC逆向工程全流程解析:从图像采集到LLM辅助的网表提取与功能恢复

2026/10/6 15:39:38 拓冰建站 浏览量
IC逆向工程全流程解析:从图像采集到LLM辅助的网表提取与功能恢复 1. 从一篇综述说起IC逆向到底在逆什么第一次看到“IC逆向综述”这个题目很多人脑子里冒出来的画面大概是拿一块芯片磨掉封装放在显微镜下拍照然后一层层扒开金属布线最后把电路图抄出来。这个印象不算错但只覆盖了整条链路里最“体力活”的那一段。真正让IC逆向这件事在学术界和工业界都持续有热度的是它背后那套从物理结构一路还原到功能语义的完整推理链条以及这套链条在安全审计、供应链验证、教学研究里的现实价值。TCHESIACR Transactions on Cryptographic Hardware and Embedded Systems是硬件安全方向的顶会级期刊它上面出现的逆向类综述通常不会只停留在“怎么拍照、怎么腐蚀”这种工艺层面而是会把逆向拆成几个层次图像采集与预处理、版图重建、网表提取netlist extraction、门级/寄存器传输级抽象、功能语义恢复。每一层都有各自的难点也各自对应不同的工具链和方法论。这篇综述的价值就在于它把这条链路上散落的方法系统性地串了起来并且指出了当前哪些环节已经相对成熟、哪些环节仍然是靠人肉和经验的“手艺活”。我自己接触逆向相关工作的起点其实挺偶然的。早些年做FPGA安全评估的时候需要验证一个第三方IP核里有没有藏后门手头只有烧录文件和少量文档没有源码。那时候才意识到逆向不只是“破解”它更像是一种在信息不对称条件下重建信任的手段。你拿到的可能是一块芯片、一个bitstream、一份网表甚至只是一堆显微图像而你要回答的问题是它到底做了什么有没有做它不该做的事。这篇文章我想按自己的理解把IC逆向这条链路拆开讲清楚。重点会放在几个地方逆向的整体流程设计逻辑、netlist提取这个核心环节的实操要点、FPGA场景下逆向与LLM结合的新趋势以及实际做的时候容易踩的坑。适合对硬件安全、芯片验证、FPGA开发感兴趣但还没系统接触过逆向的读者也适合已经做过一些逆向、想看看别人怎么组织流程的人。2. 逆向流程的整体设计与思路拆解2.1 为什么逆向要分层而不是一步到位很多人一开始会想既然目标是拿到电路功能那直接看图像不就行了。问题在于现代芯片的金属层数动辄十几层特征尺寸到了纳米级一张显微图里可能包含几百万个晶体管。人眼根本不可能直接从图像跳到功能。所以逆向必须分层每一层把上一层的复杂度降下来同时把信息抽象成下一层能处理的表示形式。这个思路和编译器很像。编译器不会从源代码直接跳到机器码中间要经过词法分析、语法分析、中间表示、优化、代码生成。逆向则是反过来从物理图像出发经过版图、网表、门级网表、RTL最后到行为级描述。每一层都是一种“表示”而逆向的核心工作就是在相邻两层之间建立可靠的映射关系。分层还有一个现实原因不同层对应的工具和技能完全不同。图像处理靠的是计算机视觉和材料学知识版图重建靠的是几何算法网表提取靠的是图论和模式识别功能恢复则更接近程序理解和形式化方法。一个人很难同时精通所有层所以实际项目里往往是团队协作或者至少是分阶段推进。2.2 逆向目标的差异决定了流程取舍不是所有逆向都要求还原到RTL。如果你的目标只是确认某个模块是不是AES加密电路那可能做到门级网表、识别出S盒结构就够了。如果你的目标是找出一个隐藏的触发条件那可能需要做到寄存器传输级甚至行为级才能理解状态机的跳转逻辑。这就引出一个关键判断在开始逆向之前必须先明确你要回答什么问题。这个问题决定了你需要还原到哪一层也决定了你在每一层愿意投入多少资源。我见过一些项目团队一上来就追求“全芯片完整还原”结果做了几个月还在处理图像拼接真正关心的安全属性反而没验证。反过来如果目标明确很多时候可以在中间层就停下来用统计特征或结构模式匹配来回答问题。从综述的角度看TCHES这类工作通常会按“目标—方法—评估”三个维度来组织。目标维度包括知识产权验证、后门检测、供应链信任、学术研究等方法维度就是前面说的分层评估维度则涉及准确率、召回率、可扩展性、人工介入程度。这个三维框架很实用你在设计自己的逆向流程时可以直接套用。2.3 自动化与人工的边界在哪里逆向领域一个绕不开的话题是自动化程度。图像采集和预处理现在自动化程度很高版图重建也有不少成熟算法但到了网表提取和功能恢复人工仍然占很大比重。原因在于这两层涉及大量语义判断而语义判断很难用固定规则覆盖。举个例子标准单元库里的单元是有限的理论上可以用模板匹配来自动识别。但实际芯片里会有大量自定义单元、模拟模块、存储器阵列这些结构没有统一模板必须靠人去看、去猜、去验证。再往上功能恢复更是如此同样一个门级网表可能是加法器也可能是比较器的一部分具体是什么取决于上下文。这种上下文推理目前还是人的强项。不过这个边界正在移动。近几年LLM的进展让很多人开始尝试用大模型辅助网表理解和功能推断。这个方向后面会专门讲这里先埋个伏笔LLM在逆向里的角色目前更像是“加速人类推理的助手”而不是“替代人类判断的引擎”。3. 核心细节解析与实操要点3.1 图像采集一切从一张好图开始逆向的第一步是拿到高质量的芯片图像。这一步的成败直接决定后面所有环节的上限。图像采集的核心矛盾是分辨率和视场的权衡你要看清最小特征就必须用高倍率但高倍率下视场很小一块芯片可能要拍几千甚至几万张图然后再拼接。实际操作中常用的手段是光学显微镜和扫描电子显微镜SEM配合使用。光学显微镜用于低倍率全局定位SEM用于高倍率细节采集。如果是多层金属芯片还需要逐层去处理每去一层拍一层最后得到一组按深度排列的图像栈。这里有几个实操要点值得注意。第一去层工艺要均匀。如果去层不均匀同一层里有的区域已经露出来有的区域还盖着后续图像配准会非常痛苦。第二图像重叠率要足够。拼接算法通常需要相邻图像有30%以上的重叠重叠不够会导致拼接缝处出现错位。第三记录元数据。每张图的倍率、位置、层号、拍摄时间都要记清楚否则后期根本对不上。提示图像采集阶段最容易被低估的是存储和算力。一块中等规模芯片的全层图像栈轻松就能到TB级别。提前规划好存储方案和拼接用的计算资源比事后补救省事得多。3.2 版图重建从像素到几何拿到图像栈之后下一步是把像素级的图像转换成几何化的版图表示。这一步的核心任务包括图像配准、拼接、去噪、二值化、轮廓提取、多边形拟合。图像配准是难点之一。不同层之间、同一层不同图之间都可能存在平移、旋转、缩放甚至非线性形变。常用的方法是基于特征点的配准比如SIFT、SURF这类算法再配合RANSAC做鲁棒估计。如果形变比较复杂可能还需要用薄板样条或者光流法做非刚性配准。二值化和轮廓提取相对成熟但也不是无脑调参就行。芯片图像里经常有光照不均、边缘模糊、噪声干扰的问题直接全局阈值化往往效果很差。实践中更常用的是自适应阈值或者基于深度学习的分割方法。轮廓提取之后多边形拟合的精度直接影响后续网表提取的准确性所以这一步的参数需要根据实际特征尺寸仔细调。3.3 网表提取逆向链路里最硬的一环网表提取是整条链路里技术含量最高、也最考验经验的一环。它的目标是从版图几何中识别出晶体管、连线、通孔进而构建出电路连接关系。输出通常是一个SPICE格式或者类似格式的网表描述器件和节点之间的连接。这一步的难点在于版图里的几何图形和电路里的器件并不是一一对应的。同一个晶体管在不同工艺下可能呈现不同的几何形状同一个连线在不同层里可能通过多个通孔连接。更麻烦的是很多结构是“上下文相关”的一段多晶硅在这个位置是栅极在另一个位置可能只是走线。要正确识别必须结合局部几何特征和全局连接关系。实际操作中网表提取通常分几个子步骤器件识别、端口识别、连线追踪、网表生成。器件识别可以用模板匹配或者机器学习分类器端口识别需要理解器件的物理结构连线追踪本质上是在图结构上做连通性分析网表生成则是把前面几步的结果组织成标准格式。这里分享一个我踩过的坑。早期做网表提取的时候我过于依赖模板匹配结果遇到自定义单元就完全失效。后来才明白模板匹配只适合标准单元库覆盖的部分对于非标准结构必须结合几何规则和电气规则做推理。比如两个相邻的多晶硅条如果间距小于某个阈值很可能是同一个晶体管的两个栅而不是两个独立器件。这种规则需要从工艺文档和实际样本里慢慢积累。3.4 从网表到功能语义恢复的挑战拿到门级网表之后下一步是恢复功能语义。这一步的目标是回答“这个电路是做什么的”。对于小规模电路可以靠人工分析对于大规模电路必须借助自动化工具和启发式方法。常用的手段包括结构模式匹配比如识别出加法器、乘法器、寄存器堆的典型结构、数据流分析追踪信号从输入到输出的传播路径、控制流分析识别状态机和有限状态机。这些方法各有局限实践中往往是组合使用。一个关键观察是功能恢复的难度和电路的“规整程度”强相关。像处理器、加密电路这类高度规整的设计结构模式很明显恢复起来相对容易。而像模拟混合信号电路、自定义加速器这类设计结构不规则恢复起来就非常困难。这也是为什么很多逆向工作会选择特定类型的电路作为目标而不是追求通用性。4. 实操过程与核心环节实现4.1 一个简化但完整的逆向流程为了让大家对整条链路有更具体的感知我这里用一个简化的例子走一遍流程。假设我们有一块小规模数字芯片目标是确认它里面是否包含一个特定的加密模块。第一步是图像采集。用SEM在合适倍率下拍摄全芯片图像记录每张图的位置和层号。如果是多层芯片逐层去层并拍摄。第二步是图像预处理和拼接。用特征点配准把相邻图像对齐用多频段融合或者泊松融合做拼接得到每层的完整图像。第三步是版图重建。对每层图像做二值化、轮廓提取、多边形拟合得到几何化的版图表示。第四步是网表提取。识别晶体管和连线构建连接关系输出门级网表。第五步是功能分析。在网表上做结构模式匹配寻找加密模块的典型特征比如S盒、轮函数、密钥调度结构。第六步是验证。把识别出的模块和已知参考实现做对比确认功能一致性。这个流程看起来线性实际做的时候经常要回退。比如网表提取阶段发现某些区域识别不清可能要回到图像采集阶段重新拍。所以实际项目里流程更像是迭代的而不是一次性的。4.2 关键参数的选择与计算在图像采集阶段倍率的选择需要根据最小特征尺寸来定。假设芯片工艺是28nm最小特征尺寸大约是28nm。如果SEM在某个工作距离下的分辨率是2nm那么理论上倍率只要保证每个特征至少覆盖几个像素即可。实际中为了保证识别可靠性通常会让最小特征覆盖5到10个像素。这样算下来视场大小和拍摄张数就可以估算出来。在网表提取阶段连通性分析的阈值需要根据工艺参数来定。比如两个金属图形如果间距小于设计规则里的最小间距它们很可能是连通的如果大于某个阈值则很可能是断开的。这个阈值不能拍脑袋定必须参考工艺文档和实际样本。在功能恢复阶段模式匹配的相似度阈值也需要调。阈值太高会漏检太低会误检。实践中常用的是在标注样本上做ROC分析选一个平衡点。4.3 FPGA场景下的逆向特殊性前面讲的流程主要针对ASIC。FPGA场景下的逆向有它自己的特点。FPGA的bitstream是配置信息逆向bitstream的目标是恢复出它实现了什么逻辑。这和ASIC逆向有相似之处也有明显差异。相似之处在于两者都需要从低层表示恢复到高层功能。差异在于FPGA的底层结构是已知的查找表、触发器、布线资源、IO块这些在文档里都有描述。所以FPGA逆向的难点不在于识别底层结构而在于理解bitstream如何映射到这些结构以及这些结构如何组合成高层功能。实际做FPGA逆向时常用的方法包括bitstream解析理解配置帧格式、资源映射分析确定哪些LUT和触发器被使用、布线分析追踪信号路径、功能推断根据LUT内容和连接关系推断逻辑功能。这个过程和ASIC逆向相比少了很多图像处理和几何重建的环节但多了对配置格式和工具链的理解要求。注意FPGA逆向涉及的知识面和ASIC逆向差别很大。如果你是从ASIC逆向转过来的需要补FPGA架构和工具链的课反过来也一样。不要假设两者可以无缝迁移。5. LLM在IC逆向里的角色与边界5.1 为什么LLM会被引入逆向流程LLM进入逆向领域本质上是因为逆向里有大量“非结构化推理”任务而这些任务恰好是LLM擅长的。比如给定一段网表描述判断它可能实现什么功能给定一组几何特征判断它属于哪类器件给定一个状态转移图推断它的控制逻辑。这些任务传统上靠人工经验现在可以尝试用LLM来加速。另一个驱动因素是逆向数据的稀缺性。高质量的逆向标注数据很难获取而LLM可以在少量样本甚至零样本条件下给出合理猜测。这对于探索性分析特别有价值你可以先用LLM快速筛一遍把明显不相关的部分排除掉再集中精力分析可疑区域。5.2 当前可行的LLM辅助方式目前比较务实的LLM辅助方式有几种。第一种是网表摘要与解释把门级网表转换成文本描述让LLM生成功能摘要。这种方式适合快速理解大规模电路的粗粒度结构。第二种是模式识别辅助把局部几何或连接模式描述给LLM让它判断可能对应的器件或功能。第三种是逆向流程编排用LLM做任务规划和工具调用比如根据当前进展决定下一步该做图像增强还是网表分析。需要强调的是这些方式目前都还是“辅助”性质。LLM的输出需要人工验证不能直接作为最终结论。原因很简单LLM没有物理世界的 grounding它对芯片的理解完全来自训练数据里的文本描述而芯片的物理细节和电气特性很难用文本完整表达。5.3 LLM辅助逆向的局限与风险LLM在逆向里的局限主要有几个方面。第一是幻觉问题LLM可能会给出看似合理但实际上错误的功能推断而且往往很自信。第二是上下文长度限制大规模网表动辄几十万门远超当前LLM的上下文窗口必须做摘要或分块而摘要过程本身会丢失信息。第三是缺乏验证手段LLM给出的推断需要额外的验证步骤而验证本身可能和重新分析一样耗时。风险方面最需要警惕的是过度依赖。我见过一些尝试团队把LLM的输出直接当成分析结果跳过了验证环节最后发现推断完全错误。逆向的本质是建立可信的证据链LLM可以是链条里的一环但不能替代整条链。6. 常见问题与排查技巧实录6.1 图像拼接错位怎么办图像拼接错位是逆向里最常见的问题之一。表现是拼接缝处出现明显断裂或重影。排查思路如下先检查重叠率是否足够如果重叠率低于20%拼接算法很难找到可靠对应点再检查图像质量如果某张图模糊或者曝光过度特征点提取会失败最后检查配准模型如果芯片有非线性形变刚性或仿射模型可能不够需要换非刚性模型。6.2 网表提取漏识别怎么定位网表提取漏识别通常表现为某些节点悬空或者某些器件缺失。定位方法是先在版图上标记出可疑区域然后回到图像层看这些区域的几何特征是否清晰如果几何清晰但识别失败说明识别规则或模板需要更新如果几何本身模糊说明图像采集阶段需要改进。6.3 功能推断出现多义性怎么处理功能推断的多义性是指同一段网表可能对应多种功能解释。处理方法是引入额外约束比如结合芯片的整体架构、结合已知的输入输出行为、结合工艺库信息。如果约束仍然不足以消歧可能需要做动态分析或者形式化验证来确认。常见问题可能原因排查方向解决思路图像拼接错位重叠率不足、图像质量差、形变模型不当检查重叠率、图像清晰度、配准残差提高重叠率、重拍、换非刚性配准网表漏识别模板不覆盖、几何模糊、规则过严定位可疑区域、回看图像更新模板、改进采集、放宽规则功能多义上下文不足、结构不典型引入架构约束、行为约束动态分析、形式化验证LLM推断错误幻觉、上下文丢失人工复核、交叉验证不直接采信、多方法交叉6.4 几个独家避坑技巧第一个技巧是先做小范围试点。不要一上来就全芯片铺开先选一个功能明确的区域做完整流程验证工具链和参数再推广到全芯片。第二个技巧是保留中间结果。每一步的输出都要存好因为逆向经常需要回退没有中间结果就得重做。第三个技巧是建立自己的样本库。把每次逆向遇到的典型结构、典型问题、典型解法记录下来时间长了就是最宝贵的资产。7. FPGA与逆向结合的一些实战观察FPGA在逆向领域其实有两个角色。一个是被逆向的对象比如分析第三方bitstream另一个是逆向的工具平台比如用FPGA加速图像处理或网表分析。这两个角色都值得展开。作为被逆向对象FPGA的bitstream逆向在安全评估里很常见。评估目标是确认bitstream里有没有未声明的功能比如隐藏的调试接口、未授权的数据通路。这类逆向通常从bitstream格式解析开始然后做资源映射和布线分析最后做功能推断。难点在于不同厂商、不同系列的FPGA配置格式差异很大而且很多细节没有公开文档需要靠实验和逆向工程慢慢摸索。作为工具平台FPGA在逆向里的价值主要体现在加速。图像处理和网表分析都是计算密集型任务用FPGA做硬件加速可以显著缩短处理时间。比如图像配准里的特征点提取和匹配用FPGA并行化之后速度可以比CPU实现快一个数量级。网表分析里的图算法也可以用FPGA做定制加速。这里分享一个实际观察FPGA加速逆向工具的开发门槛不低因为你需要同时懂逆向算法和FPGA设计。但一旦做出来收益很大尤其是对于需要反复迭代的逆向项目。我见过一些团队前期花几周做FPGA加速后期节省的时间是几倍甚至十几倍。8. 我对IC逆向这件事的一些个人体会做了这些年逆向相关的工作最大的体会是逆向的难点从来不是某一个单点技术而是如何把整条链路串起来并且在每个环节都保持足够的可信度。图像处理、版图重建、网表提取、功能恢复每一环都有成熟方法但把它们组合成一个可靠流程需要大量的调试和验证。另一个体会是逆向和正向设计是互补的。做过逆向的人对设计的理解往往更深刻因为他见过各种实现方式知道哪些设计决策会带来哪些后果。反过来做过正向设计的人做逆向时更容易理解设计者的意图推断功能时更有方向感。LLM的引入给逆向带来了新的可能性但也带来了新的风险。我的建议是把LLM当成一个知识渊博但容易自信犯错的助手用它来加速探索但不要用它来替代验证。逆向的最终结论必须建立在可验证的证据上而不是模型的输出上。最后再分享一个小技巧如果你刚开始接触逆向不要从最复杂的芯片入手。找一块结构简单、文档相对完整的芯片把整条流程走一遍哪怕结果不完美你也会对每个环节的难点有直观感受。这种感受是看多少篇综述都换不来的。