ARTICLE DETAIL

资讯详情

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

IC逆向工程全流程解析:从样品制备到LLM辅助网表分析

IC逆向工程全流程解析:从样品制备到LLM辅助网表分析 1. 从一篇综述聊起IC逆向到底在做什么第一次看到“TCHES 2026 IC逆向综述”这个题目很多人第一反应是IC逆向是不是就是拿砂纸磨芯片、在显微镜下拍照、然后抄电路这个印象不算错但只覆盖了整条链路里最靠后、最物理的一小段。真正的IC逆向Integrated Circuit Reverse Engineering是一套从封装到版图、从版图到网表、从网表到功能语义的完整还原流程它的产出物最终要落到一份可读、可仿真、可对比的netlist上而netlist能不能被读懂又直接决定了后续的安全分析、专利取证、供应链核验、教学研究能不能往下走。我这些年接触过不少做FPGA开发和数字IC验证的朋友大家平时更熟悉的是“正向设计”写RTL、跑仿真、综合、布局布线、上板调试。IC逆向恰好是把这条流水线倒过来走一遍而且每一步都充满信息损失。正向设计里你随手写的一句assign led ~key;逆向回来可能变成一堆LUT、触发器和布线延迟语义全靠人去猜。这也是为什么这个方向一直被认为是“脏活累活”但同时又极其关键——你永远不知道一颗来路不明的芯片里藏了什么。这篇综述之所以值得拿出来聊是因为它把散落在各个子领域的方法系统性地串了起来样品制备、成像、版图提取、网表重建、功能识别再加上这几年越来越热的LLM辅助分析。热词里同时出现了netlist、FPGA、LLM其实正好对应了这条链路的三个关键节点逆向的中间产物是netlistFPGA是逆向分析里常用的验证载体而LLM正在成为处理海量网表和文档的“语义加速器”。这篇文章适合谁看如果你是做FPGA项目实战、数字IC设计、硬件安全、或者单纯对“芯片里到底有什么”好奇的工程师都能从中找到可复用的思路。哪怕你只是想知道cadence 23.1怎么导出netlist这种具体操作在逆向流程里处于什么位置读完也会有个清晰的坐标感。下面我就按自己的理解把这篇综述背后的技术脉络拆开讲尽量说人话也尽量把能落地的细节补上。2. 逆向流程的整体设计与思路拆解2.1 为什么逆向要分这么多层而不是一步到位很多人会问既然最终目标是拿到netlist为什么不直接一步从芯片照片生成网表答案在于信息抽象层级不同每一层能拿到的信息类型完全不一样。你可以把IC逆向想象成考古先确定遗址范围封装与去层再清理出墙面成像然后描出砖块轮廓版图提取接着推断砖块之间怎么咬合网表重建最后判断这栋建筑是住人的还是祭祀用的功能识别。跳过任何一层后面的推断都会失去依据。综述里把流程拆成这几层核心考量是可控性和可验证性。每一层都有明确的输入输出和误差来源工程师可以在每一层做交叉验证。比如版图提取阶段如果发现某条金属线宽度异常可以回到成像阶段重新拍高分辨率图确认而不是等到网表阶段发现逻辑对不上再从头返工。这种分层设计还有一个好处不同团队可以专精不同环节做成像的不用懂网表做网表的不用会磨片形成产业分工。从工程实践角度看分层还解决了一个现实问题——成本。全套逆向设备动辄千万级但很多分析任务并不需要走完全程。比如你只是想确认某颗芯片有没有用某个专利里的标准单元结构可能做到版图提取就够了如果你要验证固件里的一段算法那必须走到网表甚至功能级。综述强调“按需选择深度”这一点对预算有限的团队尤其重要。2.2 方案选型背后的取舍逻辑逆向领域没有“万能方案”每个环节都是取舍。我把它归纳成三组核心矛盾理解了这三组矛盾你就能明白综述里为什么对每种方法都要列优缺点。第一组是分辨率与视场的矛盾。光学显微镜视场大、速度快但分辨率受衍射极限限制先进工艺的金属间距早就低于可见光波长电子显微镜分辨率够高但视场小、速度慢拍一颗完整芯片可能要几天甚至几周。所以实际流程往往是“光学粗定位电子束精成像”先用低倍率找感兴趣区域再切到高倍率逐块扫描。这个思路和FPGA图像处理里的“金字塔多尺度搜索”几乎一模一样先降采样找大致位置再在原图精匹配。第二组是自动化程度与准确率的矛盾。全自动版图提取工具跑得快但遇到工艺偏差、成像噪声、遮挡就会出错纯人工描图准确率高但一颗芯片几十万门人力根本扛不住。综述里提到的折中方案是“自动提取人工校验迭代修正”先用工具生成初版再用规则检查DRC类思路筛出可疑区域人工只处理这些区域。这跟FPGA开发里“综合工具自动优化关键路径手工约束”是一个道理。第三组是语义还原深度与工作量的矛盾。从netlist还原到门级已经很难再往上还原到RTL级、算法级工作量呈指数增长。综述的建议是按分析目标决定还原深度做安全分析可能只需要识别出加密模块的位置和接口做专利取证需要还原到门级并画出结构图做教学研究才需要还原到可读的RTL。盲目追求“全还原”是新手最容易踩的坑投入巨大但产出未必有价值。2.3 FPGA在逆向链路里扮演什么角色热词里FPGA出现频率极高这不是偶然。在IC逆向里FPGA主要承担两个角色验证载体和原型加速器。验证载体好理解你从芯片里提取出一份netlist怎么确认它是对的最直接的办法是把netlist综合到FPGA上给它相同的输入激励看输出是否和原芯片一致。如果一致说明你的提取和重建基本正确如果不一致就回去查是哪一层出了问题。这个思路和fpga如何正确写testbench是相通的——testbench写得好验证效率翻倍。我见过有人用黑金FPGA开发板做这类验证成本低、迭代快比流片验证划算太多。原型加速器则更进阶有些逆向分析需要对海量输入做功能探测比如穷举某个状态机的所有跳转纯软件仿真太慢把重建出的逻辑映射到FPGA上跑速度能提升几个数量级。这跟基于fpga的多端口ddr读写程序里用FPGA做数据吞吐加速是同一个逻辑——把并行、重复的计算交给硬件。综述里提到用FPGA做“网表功能等价性验证”本质上就是拿FPGA当一台可重构的“逻辑比对仪”。2.4 LLM为什么会被引入逆向分析LLM出现在热词里一开始我也觉得有点违和逆向不是硬件活吗跟大语言模型有什么关系仔细想想就通了。逆向流程里最耗时的不是成像也不是提取而是理解。一份门级netlist可能有几十万个实例命名全是U1234、N5678人眼根本看不过来。LLM擅长什么擅长在大量文本里找模式、做归纳、生成可读描述。具体来说LLM在逆向里能干三件事。第一是网表语义标注把U1234这种无意义命名结合它的连接关系推断成“这大概率是个32位加法器”“这像是一个状态机”。第二是文档与代码关联逆向时常要对照datasheet、专利文档、固件代码LLM可以快速把自然语言描述和网表结构对应起来。第三是知识库构建把历次逆向的结论沉淀成llm wiki知识库下次遇到类似结构直接检索不用从零开始。热词里的rag graphrag llm wiki 本体rag说的就是这套思路——用检索增强生成把零散知识组织起来。不过要泼盆冷水LLM在逆向里目前还是辅助不是主力。它会产生幻觉会把相似结构认错所以它的输出必须经过人工或形式化验证。综述里对LLM的定位很克制基本是“加速初筛和文档整理”最终判断还是靠工程师。这个态度我觉得很对工具再好也不能替代对电路的理解。3. 核心细节解析与实操要点3.1 样品制备别小看磨片这一步样品制备是整条链路的起点也是最容易被低估的环节。芯片封装去掉之后你面对的是多层金属、钝化层、衬底要一层一层剥开才能看到下层结构。这一步做不好后面成像再牛也白搭。常见的方法有机械研磨、化学腐蚀、等离子刻蚀、聚焦离子束FIB。机械研磨便宜但容易产生应力损伤把细金属线磨断化学腐蚀选择性好但速率难控容易过腐蚀FIB精度高但设备贵、速度慢适合做局部截面分析。综述里提到的典型策略是“机械减薄到接近目标层再用选择性化学腐蚀或FIB做最终暴露”兼顾成本和精度。实操心得磨片时一定要边磨边看用显微镜定期检查表面状态。我见过有人一口气磨了半小时结果磨过头目标层整个没了样品报废。正确做法是每磨几十秒就停下来看一眼接近目标层时改用更细的砂纸或抛光液。另外不同金属层对腐蚀液的响应不一样铝层和铜层的配方完全不同用错试剂可能把整层金属全溶掉。这些细节综述里不会写太细但实际做的时候每一条都能决定成败。注意样品制备涉及强酸强碱和精细机械操作务必在专业防护条件下进行个人不要随意尝试。3.2 成像分辨率、对齐与拼接成像阶段的核心指标是分辨率和信噪比。分辨率决定了你能看清多细的线宽信噪比决定了你能不能把线和背景分开。先进工艺的金属线宽已经到几纳米光学显微镜完全无能为力必须上扫描电子显微镜SEM。但SEM一次只能拍很小一块要得到整颗芯片的图就得拼接。拼接的难点在于对齐。相邻两张图必须有重叠区域通过特征匹配算出偏移量再把它们拼在一起。这和fpga图像处理里的图像拼接是同一套数学特征点检测、描述子匹配、变换矩阵估计、重采样融合。区别在于芯片图像的特征更规则重复的金属网格容易产生误匹配所以综述里强调要用多尺度匹配全局优化不能只靠局部特征。实操要点拍图时保持恒定的加速电压和工作距离否则不同区域的对比度会不一致拼接后出现明显接缝。另外样品表面要尽量平整倾斜或起伏会导致同一层在不同区域聚焦不同图像模糊。我试过在拍图前用导电胶把样品边缘固定好减少充电效应效果比不固定好很多。3.3 版图提取从像素到多边形版图提取的任务是把图像里的金属线、通孔、晶体管区域矢量化成多边形。这一步的输入是灰度图输出是GDSII之类的版图格式。核心算法包括阈值分割、边缘检测、形态学处理、轮廓提取。阈值分割是最基础的一步把图像分成“金属”和“非金属”两类。但实际图像有噪声、有渐变、有阴影固定阈值往往不行得用自适应阈值或基于聚类的方法。边缘检测常用Canny或Sobel算子把金属线的边界找出来。形态学处理用来去噪和补洞比如开运算去掉小噪点闭运算填补线内的小孔。最后用轮廓提取算法把边界连成闭合多边形。这里有个容易忽略的点工艺偏差补偿。芯片制造过程中金属线实际宽度和设计值有偏差成像时又会有边缘模糊。如果直接按图像边缘提取得到的线宽可能比真实值大或小几个纳米。综述里建议用已知结构做标定比如找一条已知宽度的测试线用它反推成像系统的点扩散函数再对提取结果做反卷积校正。这个思路和fpga spi adc里做ADC校准是一样的——用已知参考信号修正系统误差。3.4 网表重建从版图到连接关系版图提取出来只是几何图形网表重建要解决的是谁连谁。这一步要识别晶体管、提取器件参数、追踪金属连线、生成网表。难点在于多层金属的连通性上层金属通过通孔连到下层通孔在图像里可能只是一个小圆点容易被漏掉或误判。综述里提到的典型流程是先识别每一层的金属和通孔再建立层间连接图最后用图算法追踪从器件到器件的完整路径。这和fpga实现emmc 5.1控制ip核里追踪信号路径的思路类似——都是在一个多层网络里找连通关系。区别在于芯片的层数更多、通孔更密图规模大得多。实操技巧重建网表时一定要保留层次信息不要一上来就展平。层次化网表更容易和原始设计对照也更容易发现重复结构比如标准单元阵列。我见过有人直接把所有门展平成一张大网表结果几十万个门混在一起根本没法分析。正确做法是先按功能块分组再在组内细化这和fpga项目实战里做模块化设计是一个道理。3.5 功能识别从网表到语义网表重建完你手里是一堆逻辑门和触发器但不知道它们是干什么的。功能识别就是给这些结构贴标签这是加法器、这是状态机、这是存储器、这是加密模块。常用方法有三种。第一种是结构匹配预先建立常见功能块的结构模板比如全加器、D触发器、多路选择器在网表里搜索匹配。第二种是仿真探测给网表加输入激励观察输出反推功能。第三种是机器学习分类把网表结构编码成特征向量用分类器判断功能类型。综述里提到这三种方法往往结合使用结构匹配做初筛仿真探测做确认机器学习处理大规模网表。LLM在这里的切入点是辅助结构匹配。传统模板匹配只能识别预定义的结构遇到变体就失效。LLM可以结合上下文推断“这个结构虽然和标准加法器不完全一样但它的连接模式和进位链特征表明它大概率是加法器”。这就像llm的token三个点key我是谁、query我在找什么、value我能提供什么描述的那样LLM通过注意力机制捕捉结构间的关联比死板的模板匹配灵活得多。但如前所述LLM的输出必须验证不能全信。4. 实操过程与核心环节实现4.1 一个可复现的逆向分析流程下面我把综述里的流程整理成一个可操作的步骤清单假设目标是分析一颗中小规模数字芯片的功能。这个流程不是唯一的但每一步都有明确的输入输出适合作为入门参考。第一步信息收集与目标定义。先搞清楚你要分析什么。是整颗芯片还是某个模块是要确认有没有某个专利结构还是要还原完整功能目标不同后续投入差别巨大。这一步还要收集所有能找到的公开资料datasheet、封装信息、引脚定义、应用笔记。这些资料能帮你缩小分析范围比如知道某几个引脚是电源和地就不用去追它们的内部连接。第二步封装去除与样品制备。根据封装类型选择方法。塑料封装常用化学腐蚀发烟硝酸或等离子刻蚀陶瓷封装可以机械开盖。去封装后要确认芯片表面状态必要时做减薄处理。这一步的目标是暴露出目标金属层且不损伤结构。第三步分层成像。用SEM逐层拍照。每拍完一层用选择性腐蚀去掉该层金属暴露下一层继续拍。每层都要记录成像参数加速电压、工作距离、放大倍数方便后续对齐。拍完后用拼接软件生成每层的完整图像。第四步版图提取。对每层图像做阈值分割、边缘检测、轮廓提取生成该层的多边形表示。然后用标定数据做尺寸校正。最后把所有层的版图叠加建立层间连接关系。第五步网表重建。识别晶体管和通孔追踪连线生成层次化网表。用形式化方法检查网表的一致性比如有没有悬空节点、有没有短路。第六步功能验证与识别。把网表导入仿真工具加激励对比原芯片行为。用结构匹配和LLM辅助识别功能块标注语义。第七步结果整理与知识沉淀。把分析结论整理成文档存入知识库。如果用了LLM辅助把它的推断和人工验证结果都记录下来方便后续复用。4.2 关键参数的计算与选择逆向流程里有几个参数直接决定成败这里展开说两个最关键的。成像放大倍数的选择。放大倍数不是越高越好。倍数越高视场越小拼接工作量越大倍数太低细线看不清。合理的选择是让最小特征尺寸在图像里占3到5个像素。比如你的目标工艺最小线宽是50纳米SEM在某个倍数下每像素对应20纳米那线宽只占2.5个像素偏小调到每像素10纳米线宽占5个像素合适。这个计算和fpga的lvds接收里选择采样率是一个逻辑——采样率至少要是信号最高频率的两倍工程上还要留余量。腐蚀时间的确定。化学腐蚀的速率受温度、浓度、搅拌影响很大不能照搬文献值。正确做法是先用陪片做试验拿一片同类型的废弃芯片在相同条件下腐蚀不同时间用显微镜观察效果画出“腐蚀时间-剩余厚度”曲线再据此确定正式样品的腐蚀时间。这个思路和fpga如何正确写testbench一样——先用简单用例摸清工具行为再上真实场景。4.3 用FPGA做网表验证的实操网表重建完怎么验证我推荐用FPGA做功能等价性验证成本低、迭代快。具体步骤网表转换。把重建的网表转换成FPGA综合工具能读的格式通常是Verilog或VHDL。这一步要注意逆向网表里可能有组合环、多驱动等非综合结构需要先做处理。综合与实现。用常规FPGA流程综合、布局布线。如果资源不够可以分块验证先验证子模块。激励生成。给原芯片和FPGA施加相同的输入序列。输入序列要覆盖各种情况正常数据、边界值、随机数据。这跟fpga实现串口接收控制led里写testbench是一个思路——激励要全面才能暴露问题。输出比对。逐周期比对原芯片和FPGA的输出。如果一致说明网表功能正确如果不一致定位第一个不一致的周期回溯网表里对应的逻辑。迭代修正。根据比对结果修正网表重复上述过程直到一致。这个流程我实际跑过几次最大的坑是时序。原芯片的工作频率可能远高于FPGA直接跑会时序违例。解决办法是降频验证只要功能等价频率不影响正确性判断。另外原芯片如果有模拟部分或特殊IOFPGA无法完全模拟这部分要单独处理。4.4 LLM辅助分析的落地方式LLM在逆向里的落地我总结成三个具体用法。用法一网表命名语义化。把网表的连接关系整理成文本描述喂给LLM让它给每个模块起个有意义的名字。比如输入“模块A有32个输入、1个输出输入两两之间有进位链”LLM可能输出“32位加法器”。这个用法能大幅减少人工阅读量但命名结果要人工确认。用法二文档关联检索。把datasheet、专利、论文建成向量库分析网表时用自然语言查询。比如“这颗芯片里有没有用双端口RAM”LLM从向量库里检索相关描述再和网表结构对照。这就是rag graphrag llm wiki 本体rag的典型应用。用法三分析报告生成。把逆向过程中的发现整理成结构化报告LLM负责润色和补全。注意LLM只负责表达不负责判断所有技术结论必须来自工程师。提示用LLM辅助分析时一定要把它的输出当作“草稿”而非“结论”。我见过有人直接采信LLM的功能判断结果把存储器认成了状态机后续分析全跑偏。5. 常见问题与排查技巧实录5.1 成像模糊、拼接错位怎么办这是逆向里最高频的问题。成像模糊通常有三个原因聚焦不准、样品充电、振动。聚焦不准就重新对焦用自动对焦加手动微调样品充电就镀一层薄导电膜或降低加速电压振动就检查设备减震、远离振动源。拼接错位通常是特征匹配错误。芯片图像里重复结构多匹配算法容易把A处的特征匹配到B处。解决办法是增加重叠区域比例从10%提到30%用全局优化约束拼接顺序人工检查接缝处。如果还是错就在样品上做几个人工标记比如用FIB打几个小孔作为拼接的绝对参考点。5.2 网表提取出来逻辑不对怎么排查逻辑不对问题可能出在任何一层。排查要从后往前先确认网表本身有没有语法错误悬空、短路、多驱动再确认版图提取有没有漏线或多余线再确认成像有没有模糊或错位最后确认样品制备有没有损伤结构。我常用的方法是注入已知信号在网表的某个输入加一个特定序列看输出是否符合预期。如果不符合沿着信号路径往回查找到第一个不符合预期的节点问题就在那附近。这和fpga实现uart_rx接收仿真里调试接收逻辑是一个套路——逐级比对定位第一处异常。5.3 常见问题速查表问题现象可能原因排查方法解决技巧图像模糊聚焦不准、充电、振动重新对焦、镀导电膜、检查减震降低加速电压增加工作距离拼接错位特征误匹配、重叠不足检查接缝、增加重叠加人工标记做参考版图漏线阈值不当、噪声对比原图、调阈值用自适应阈值形态学补洞网表短路通孔误判、层间对齐错检查通孔识别、层间对齐用已知结构标定功能识别错模板不全、LLM幻觉仿真验证、人工复核多方法交叉验证FPGA验证不一致时序违例、IO差异降频、隔离模拟部分分块验证先子模块后整体5.4 几个容易踩的坑坑一忽视样品制备。很多人把精力全放在成像和分析上样品制备随便搞结果后面全是问题。我的经验是制备花的时间应该占总时间的30%以上磨片、腐蚀、检查每一步都不能急。坑二过度依赖自动化工具。自动提取工具确实快但它不理解电路遇到异常结构就出错。正确姿势是工具做初筛人工做校验两者结合。坑三LLM输出不验证。前面说过LLM会幻觉。我见过有人用LLM识别功能块结果LLM把两个不相关的模块说成有连接关系导致后续分析全错。LLM的输出必须用仿真或形式化方法验证。坑四不做知识沉淀。逆向一次很费劲如果做完就扔下次遇到类似芯片又得从头来。建议建一个llm wiki知识库把每次逆向的结构、结论、踩过的坑都记下来用检索增强的方式组织下次直接查。6. 这套方法还能怎么扩展IC逆向这套流程表面上是为安全分析和专利取证服务的但它的方法论其实可以迁移到很多场景。比如你做fpga项目实战想确认自己综合出来的电路和预期是否一致可以用逆向的思路做“正向验证”把综合后的网表当成逆向对象提取结构、识别功能、和RTL对照。这比单纯看综合报告直观得多。再比如microchip fpga coreedac ip更新与配置优化实战指南这类工作本质上是理解一个IP的内部结构并优化配置。如果你能逆向分析IP的网表搞清楚它的资源占用和关键路径优化起来就有据可依而不是盲目试参数。LLM辅助分析这条线也远没到头。现在主要是做语义标注和文档检索未来可能做到自动生成分析报告、自动提出验证方案、自动对比不同芯片的结构差异。但前提是知识库要建好rag graphrag llm wiki 本体rag这套东西得先跑通。我个人的体会是工具再强也得有人懂电路。LLM能帮你读网表但读不懂电路的人连LLM的输出对不对都判断不了。所以基础功还是得练逆向的每一层原理都得吃透工具只是放大器。最后分享一个小技巧做逆向分析时先画框图再抠细节。拿到网表先别急着看门级连接先用工具或LLM生成模块级框图搞清楚大结构再逐块深入。这跟fpga入门时先学模块化设计是一个道理——自顶向下先框架后细节效率高得多也不容易迷路。
返回列表