ARTICLE DETAIL

建站实战干货

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

IC逆向工程全解析:从图像到网表、FPGA辅助与LLM应用

2026/10/6 1:19:56 拓冰建站 浏览量
IC逆向工程全解析:从图像到网表、FPGA辅助与LLM应用 1. 从一篇综述说起IC逆向到底在逆什么第一次看到“TCHES 2026 IC逆向综述”这个标题我脑子里冒出来的不是学术论文而是几年前帮朋友看一块来路不明的开发板时那种抓耳挠腮的感觉——板子上那颗芯片没有丝印封装是QFN引脚定义全靠猜最后只能靠示波器一点点摸。IC逆向这件事说白了就是在没有完整设计资料的前提下把一颗芯片“看懂”它内部有哪些功能模块、模块之间怎么连、关键信号走哪条路、配置寄存器怎么摆。TCHES作为硬件安全领域的顶会出一篇IC逆向的综述意味着这个方向已经从“手工作坊”走向了系统化方法论。这篇综述覆盖的范围很广从最传统的网表netlist级逆向到FPGA平台上的加速逆向再到最近两年被反复提及的LLM辅助逆向基本把当前主流的技术路线都串了一遍。我读完最大的感受是IC逆向不再是单纯的“看图说话”而是图像处理、图论、机器学习、硬件加速多学科交叉的活儿。对做硬件安全、芯片取证、IP核分析、甚至做竞品拆解的工程师来说这篇综述相当于一张地图告诉你哪条路已经修好了哪条路还是泥巴路。需要先说明的是我下面讲的内容一部分来自这篇综述的框架一部分是我自己在实际项目里踩过的坑和总结的经验。综述给的是“应该怎么做”我补的是“实际做起来会怎样”。两者结合才是一份能落地的参考。2. 综述的整体框架三条主线与一个交叉点2.1 为什么IC逆向需要被“综述”IC逆向这个领域有个尴尬的特点需求一直存在但方法论长期碎片化。做模拟电路逆向的人靠显微镜和经验做数字电路逆向的人靠网表工具和脚本做FPGA逆向的人靠比特流分析和布局布线规律。三拨人各干各的术语都不太一样。TCHES这篇综述的价值就在于它试图用统一的视角把这几条线拉齐。从需求侧看IC逆向的驱动力主要有三类。第一类是安全审计比如检查一颗芯片里有没有隐藏的后门电路、有没有未声明的调试接口。第二类是知识产权取证判断某颗芯片是否抄袭了已有设计。第三类是遗留系统维护很多工业设备里的芯片已经停产原厂资料丢失只能靠逆向恢复功能。这三类需求对逆向的精度、速度、自动化程度要求完全不同综述里也分别讨论了对应的技术选型。2.2 三条技术主线综述把IC逆向的技术路线归纳为三条主线我按自己的理解重新组织一下图像驱动的逆向从芯片去封装、逐层剥离、SEM/TEM成像开始通过图像分割、连线提取、标准单元识别最终重建网表。这条线最传统也最依赖工艺和成像质量。网表驱动的逆向已经有了门级网表需要把它还原成更高层的功能描述比如识别出加法器、状态机、存储器阵列。这条线的核心是图论和模式匹配。FPGA辅助的逆向利用FPGA的可重构特性把待分析的电路或算法映射到FPGA上通过激励-响应分析来推断内部结构。这条线最近几年升温很快因为它能绕开部分成像瓶颈。三条线不是孤立的。实际项目里经常是图像先给出粗略结构网表分析细化功能FPGA验证关键假设。综述里专门有一节讲这种混合流程我觉得这是最实用的部分。2.3 LLM作为交叉点LLM进入IC逆向是这篇综述里最“新”的部分。逻辑也很直接逆向过程中有大量非结构化信息需要处理比如数据手册的残片、引脚描述、寄存器命名、甚至工程师的注释。LLM擅长从这些文本里抽取语义然后和网表结构做对齐。举个例子网表里有一个模块叫ctrl_07单看名字完全不知道干什么但如果数据手册里提到“offset calibration control”LLM就能把这个语义映射过去帮助逆向人员快速定位功能。不过综述也泼了冷水LLM目前只能做辅助不能替代结构分析。它会产生幻觉会把不相关的信号强行关联。所以实际用法是“LLM提假设工程师验证”而不是“LLM给答案”。3. 图像驱动逆向从硅片到网表的关键步骤3.1 样品制备与成像一切的基础图像驱动逆向的第一步不是算法是样品。芯片要去封装通常用发烟硝酸或等离子体刻蚀把塑封料去掉露出裸片。这一步听起来简单实际上非常考验经验。刻蚀过头会把金属层也腐蚀掉刻蚀不足则看不到底层。我见过有人用激光开盖结果热影响区把顶层金属烧变形后面图像全废。去封装之后是逐层成像。现代芯片动辄十几层金属需要一层一层磨掉再成像。常用的是化学机械抛光CMP配合SEM。每磨一层拍一次高分辨率图像然后对齐、拼接。这里的关键参数是磨削速率和层间对齐精度。磨太快层厚控制不住对齐不准后面连线提取全是错的。综述里给了一个经验值对于28nm工艺单层磨削厚度控制在50-100nm比较稳妥SEM分辨率至少要达到5nm才能看清标准单元边界。这些数字不是绝对的但提供了一个起点。3.2 图像分割与标准单元识别拿到多层图像后第一步是分割。把金属线、通孔、多晶硅、扩散区分开。传统方法是阈值分割加形态学操作但对先进工艺效果一般因为线宽已经接近光学极限对比度很差。综述里提到现在主流做法是深度学习分割用U-Net或Mask R-CNN这类网络在标注好的SEM图像上训练。标准单元识别是下一个难点。同一个功能比如一个反相器在不同工艺下长得不一样甚至同一工艺不同版本也有差异。综述里讨论了几种思路一种是基于模板匹配预先建一个标准单元库然后滑窗匹配另一种是基于特征分类提取单元的几何特征栅极数量、扩散区形状、接触孔位置然后用分类器判断。实际项目里模板匹配对已知工艺很有效但遇到新工艺就得重新建库迁移成本高。注意标准单元识别阶段最容易犯的错误是忽略“冗余单元”。有些芯片里会故意插入假单元来干扰逆向它们看起来像标准单元但实际不连接。识别时如果只看局部形状很容易误判。必须结合连线关系做全局校验。3.3 连线提取与网表重建单元识别完之后要把单元之间的连线提出来。金属层图像里线是可见的但通孔连接哪两层、线在哪个位置拐弯需要仔细追踪。综述里把这一步叫“net tracing”本质是一个图搜索问题把每个单元端口当作节点金属线段当作边通孔当作跨层边然后找连通路径。这里有个实际经验优先追踪时钟线和电源线。这两类线通常最宽、最规则容易识别而且它们能帮你快速建立坐标参考。时钟树的结构往往能反映芯片的整体布局电源网格则能帮你判断哪些区域是核心逻辑、哪些是IO。网表重建的最后一步是把提取出的连接关系写成标准格式通常是SPICE网表或Verilog网表。这时候的网表还是门级的功能不明确需要进入下一阶段的分析。4. 网表驱动逆向让门级网表“说人话”4.1 功能模块识别的核心思路门级网表就是一堆逻辑门和触发器的连接关系。人眼看几万个门是不可能的必须靠算法。综述里把功能模块识别分成两个层次结构识别和行为识别。结构识别是找“长得像”的模块。比如一个32位加法器在网表里表现为一串全加器单元每个全加器又是几个门。通过子图同构算法可以在大网表里搜索这种模式。行为识别更进一步不仅看结构还看时序行为。比如一个状态机结构上可能很普通但通过分析状态转移图能判断出它是控制器。我自己的经验是结构识别适合规则性强的模块加法器、乘法器、移位器行为识别适合控制逻辑状态机、计数器、仲裁器。两者结合覆盖率能到80%以上剩下的20%往往是工艺相关的特殊单元或设计者故意混淆的逻辑。4.2 图论方法在网表分析中的应用综述里花了不少篇幅讲图论因为网表天然就是图。节点是门或触发器边是连线。常用的图算法包括支配树分析找出哪些节点支配了其他节点用于识别时钟树和复位树。强连通分量分解找出反馈环路用于识别状态机和锁存器。社区发现把网表划分成若干簇每个簇可能对应一个功能模块。这些算法在软件工程里很成熟搬到硬件网表上需要注意一点硬件图是有向且带时序的。软件里的调用图可以递归硬件里的组合逻辑环路通常意味着锁存器或设计错误。所以做图分析时必须先区分组合逻辑和时序逻辑否则算法会给出莫名其妙的结果。4.3 从网表到RTL还有多远很多人以为逆向到网表就结束了其实网表离可读的RTL还差得远。网表里没有变量名、没有循环、没有条件分支只有线和门。要把网表还原成RTL需要做高层综合的逆过程也就是“高层反综合”。综述里提到目前这块主要靠模式识别加手工重写。工具能帮你把加法器识别出来但把它写成a b还是a - (-b)取决于上下文。实际项目中逆向人员会先识别出所有功能模块然后根据数据手册或测试结果推断接口协议最后手工写出行为级描述。这个过程非常耗时一颗中等复杂度的芯片从网表到可综合RTL几个月是常态。提示如果你只是想做安全审计不一定需要完整RTL。很多时候识别出关键模块加解密引擎、调试接口、存储器控制器就足够了。把精力集中在这些高风险区域比全面逆向效率高得多。5. FPGA辅助逆向用可重构硬件做“探针”5.1 FPGA在逆向中的角色定位FPGA辅助逆向的思路和图像、网表两条线不太一样。它不是去“看”芯片内部而是去“刺激”芯片通过外部激励和响应来推断内部行为。具体做法是把待测芯片放在测试板上用FPGA产生精确的激励信号同时采集响应然后通过分析激励-响应关系来反推内部逻辑。这种方法的优势在于非侵入。不需要开盖不需要成像芯片可以正常工作。缺点是只能分析有外部接口的功能对纯内部模块无能为力。综述里把FPGA辅助定位为“黑盒逆向”或“灰盒逆向”和图像/网表的“白盒逆向”形成互补。5.2 激励生成与响应采集的实操要点用FPGA做激励生成核心是时序精度和协议兼容。比如你要逆向一个SPI接口的芯片FPGA需要产生符合SPI时序的时钟和数据同时采样MISO线上的响应。这里的关键参数是时钟频率、相位、建立保持时间。如果FPGA的IO标准不匹配比如芯片是1.8VFPGA是3.3V还需要电平转换。响应采集方面高速ADC采样是常用手段。比如要分析芯片的模拟输出或电源电流波动可以用FPGA控制高速ADC比如100MSPS以上连续采样然后把数据传到上位机做频谱分析或统计分析。综述里提到一个案例通过分析芯片在加解密操作时的功耗曲线结合FPGA的精确触发成功推断出AES的轮密钥。这就是典型的侧信道辅助逆向。5.3 基于FPGA的多端口DDR读写程序在逆向中的妙用热词里出现了“基于FPGA的多端口DDR读写程序”这个在逆向场景里其实很有用。逆向过程中经常需要缓存大量采集数据比如连续几秒的高速ADC采样数据量可能到GB级别。FPGA片内RAM根本存不下必须外挂DDR。多端口DDR控制器允许同时写入采集数据、读出给上位机、以及给激励生成模块提供波形数据三个端口互不干扰。我自己搭过类似的平台FPGA通过LVDS接收待测芯片的高速输出数据先写入DDR的一个端口另一个端口把数据打包通过千兆网传到PC第三个端口从DDR读取预存的激励波形通过DAC输出给芯片。整个系统跑起来相当于一个可编程的芯片测试仪。这套东西对逆向高速接口特别有用因为你可以任意构造激励序列然后观察芯片怎么响应。注意多端口DDR控制器的仲裁策略很关键。如果三个端口优先级没设好采集数据可能被激励读取阻塞导致丢数。我的做法是给采集端口最高优先级激励端口用大缓冲加突发传输上位机读取端口用最低优先级但保证带宽下限。6. LLM在IC逆向中的真实作用与边界6.1 LLM能做什么语义对齐与假设生成LLM在IC逆向里最实际的作用是语义对齐。逆向过程中会收集到各种文本资料数据手册残页、引脚定义表、寄存器描述、甚至网上找到的驱动代码。这些资料用的命名和网表里的信号名往往对不上。LLM可以把“offset calibration”和网表里的cal_offs[7:0]关联起来把“power-down mode”和pwdn_n关联起来。这种关联不需要精确匹配LLM靠语义相似度就能给出候选。另一个作用是假设生成。比如网表里有一个从没见过的模块输入是8位输出是8位中间有一堆异或和移位。LLM可以根据常见算法模式提出“这可能是CRC”或“这可能是S盒”的假设然后逆向人员去验证。综述里强调LLM的价值在于缩小搜索空间而不是给出最终答案。6.2 LLM的局限幻觉与验证成本LLM的幻觉在IC逆向里是致命的。它可能信誓旦旦地说某个信号是时钟实际上是个数据线。如果逆向人员不加验证就采信后面全错。综述里给了一个数据在标准测试集上LLM对信号功能的预测准确率大约60-70%意味着三分之一是错的。这个准确率作为辅助可以作为决策依据远远不够。验证成本也是问题。LLM提出一个假设工程师需要花时间设计实验去验证。如果假设质量不高验证成本可能超过自己从头分析。所以实际用法是LLM只处理高置信度的关联低置信度的直接丢弃不要浪费人力去验证。6.3 一个可落地的LLM辅助流程结合综述和我的经验一个务实的LLM辅助逆向流程是这样的资料收集把所有能找到的文本资料手册、注释、驱动、论坛帖子整理成纯文本。实体抽取用LLM抽取所有信号名、寄存器名、功能描述建立实体列表。语义匹配把实体列表和网表里的信号名做匹配LLM给出候选对应关系按置信度排序。人工筛选只保留高置信度匹配低置信度的标记为待验证。实验验证对高置信度匹配设计简单的激励-响应实验确认。比如LLM说cal_en是校准使能那就拉高它看输出有没有变化。迭代验证结果反馈给LLM让它调整匹配策略。这个流程里LLM做的是“粗筛”人做的是“精验”。效率比纯人工高但前提是资料质量不能太差。如果资料全是乱码或扫描件LLM也无能为力。7. 常见问题与排查技巧实录7.1 图像逆向中的典型问题问题现象可能原因排查思路解决技巧图像对比度低看不清线磨削过度或不足检查磨削厚度记录重新制备样品控制磨削速率层间对齐错位成像时样品移动用基准标记做对齐每层成像前拍基准点标准单元识别率低模板库不匹配检查工艺节点用少量标注数据微调模型连线提取出现断线通孔识别失败检查通孔图像结合上下层图像交叉验证7.2 网表分析中的坑网表分析最常遇到的问题是组合环路。正常设计里不应该有组合环路但逆向提取时可能因为连线错误产生假环路。我的做法是先标记所有环路然后逐个检查。如果环路里包含锁存器那是正常的如果全是组合门那大概率是提取错误需要回到图像阶段核对。另一个坑是总线位序。网表里data[0]到底是最低位还是最高位不同工具、不同设计习惯不一样。搞错了后面功能识别全反。解决办法是找已知模块比如计数器来校准位序。计数器加一的时候哪一位先翻转哪一位就是最低位。7.3 FPGA辅助逆向的注意事项FPGA辅助逆向最大的风险是损坏待测芯片。激励信号电平不对、时序违规、电源波动都可能把芯片打坏。我的经验是先用低电平、慢时钟试探确认芯片能正常响应再逐步提高频率和电平。电源一定要加限流保护电流异常立即断电。另一个问题是FPGA资源不够。高速多通道采集很吃资源BRAM、DSP、IO都可能成为瓶颈。选型时留足余量或者用多片FPGA级联。热词里提到的“fpga 高速adc采样”和“fpga的lvds接收”都是资源消耗大户规划时要仔细算账。8. 写在最后一些个人体会IC逆向这个方向工具在进步但核心还是人。综述里列的方法论再全落到具体项目上还是得靠工程师的判断力。LLM能帮你省时间但省不了思考。FPGA能帮你做实验但实验设计还是靠人。我自己的习惯是每逆向一个模块先画一张草图标出输入输出和关键控制信号然后拿这张图去和网表对照。图对不上说明理解有偏差图对上了再往下走。这个笨办法看起来慢但比盲目跑工具靠谱。另外逆向的伦理边界要清楚。做安全审计、做遗留系统维护、做学术研究都没问题。但拿逆向结果去抄设计、去破解别人的产品那是另一回事。技术本身中性用技术的人得有底线。这篇综述值得反复读尤其是里面关于混合流程和LLM辅助的部分。等2026年正式发表后我打算把里面的案例逐个复现一遍到时候再分享具体的实操记录。