You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ghidra与FindCrypt查找STM32裸机二进制文件中的AES密钥

裸机ARM固件AES128密钥提取方案

原理澄清

FindCrypt插件的特征库仅覆盖AES算法内置的固定常量(如你识别到的加密/解密S盒),用户自定义的密钥属于可变数据,不在特征匹配范围内,因此无法通过FindCrypt直接定位,属于正常情况。

基于Ghidra的定位步骤

你已经完成基础分析识别到S盒,按以下流程操作即可快速找到密钥:

  • 定位AES_init_ctx函数
    对找到的AES S盒做交叉引用,追溯到调用S盒的AES算法实现代码,其中接收2个输入参数(第一个为AES上下文结构体指针,第二个为密钥指针)的函数就是你代码中使用的AES_init_ctx。
  • 追溯函数调用点
    对AES_init_ctx做交叉引用,找到你业务代码中调用该函数的位置,对应C代码AES_init_ctx(&TestAes, key);的第二个入参就是密钥的存储地址。
  • 提取密钥
    跳转至上述入参指向的存储地址,即可读出连续16字节的AES128密钥。如果你已经知道密钥的部分片段,也可以直接在Ghidra内存视图中按字节搜索对应片段,直接定位到密钥位置。

备用验证方案

你代码中使用的明文是固定值{1,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0},可以写脚本遍历固件中所有连续16字节的序列作为密钥,加密上述明文后和实际运行得到的密文做匹配,命中的序列就是目标密钥。

内容的提问来源于stack exchange,提问作者guenthernagel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:15:05