乐于分享
好东西不私藏

iOS逆向一条指令让AI自动逆向生成frida代码:手把手教你写instagram抓包的SKILL

iOS逆向一条指令让AI自动逆向生成frida代码:手把手教你写instagram抓包的SKILL

以 Instagram SSL Pinning 绕过为例,教你把逆向经验封装成 AI 可执行的自动化流程,获取完整skill方式在文末

这篇文章不是教你怎么抓包。

我之前写过一篇 Instagram 最新版抓包的文章,核心就是绕过 SSL Pinning——在 IDA 里搜 SecTrustSetAnchorCertificates,查交叉引用,定位到核心验证函数,hook 它返回 0,搞定。

问题是,每次 ins 更新版本我都得重新来一遍。步骤是固定的,但每次都要从头走,挺烦的。

后来我就想:我现在有 IDA Pro MCP,Claude 可以直接操作 IDA。那我为什么不把这套流程写成一个 Skill,让 Claude 自己搜函数、查交叉引用、反编译、生成 Frida 脚本?

这篇文章就是教你怎么干这件事。学会以后,不光是 SSL Pinning,任何你经常重复的逆向流程都可以这样封装。

先说一下 Skill 是什么

如果你用过 Claude Code(Anthropic 官方的命令行 AI 工具),你应该知道它能帮你写代码、改代码、跑命令。

但它有个问题:它不知道你的工作习惯。

比如你每次分析 SSL Pinning 都是固定的流程,但 Claude 不知道。你每次都得从头跟它解释一遍。

Skill 就是解决这个问题的。简单说:

  • • 你把自己的分析流程写成一个 Markdown 文件
  • • Claude 读了以后,就知道该怎么一步步帮你干活
  • • 下次你只要说一句话,它就按你定义的流程走

Skill 的文件结构

一个 Skill 其实就是一个文件夹,里面放一个 SKILL.md

~/.claude/skills/└── ios-ssl-pinning-bypass/      ← 你的 Skill 文件夹    └── SKILL.md                 ← 核心文件,就这一个

放在 ~/.claude/skills/ 下面就是全局 Skill,所有项目都能用。

如果你只想在某个项目里用,也可以放在项目根目录的 .claude/skills/ 下面。

就这么简单,不需要装插件,不需要配环境,写个 Markdown 文件放对位置就行。


SKILL.md 怎么写

一个 SKILL.md 分两部分:

第一部分:头部信息(frontmatter)

用 --- 包裹,告诉 Claude 这个 Skill 叫什么、什么时候用:

---name: ios-ssl-pinning-bypassdescription: 针对 iOS App 的 SSL Pinning 绕过分析流程,自动生成 Frida 脚本metadata:  short-description: iOS SSL Pinning 绕过---

这里几个字段说一下:

  • • name:Skill 的名字,也是你用 /skill名 调用时的名字
  • • description:描述,Claude 会根据这个判断什么时候自动触发这个 Skill
  • • metadata.short-description:短描述,显示用的

第二部分:正文

正文就是你的流程,用 Markdown 写。Claude 会把这部分当作"操作手册"来执行。

这是最关键的部分,下面我用 Instagram SSL Pinning 这个真实案例来讲。


实战:Instagram SSL Pinning 绕过 → 全自动 Skill

先回顾一下手动流程

我之前那篇文章里,Instagram 抓包的核心流程是这样的:

在 IDA 里搜索 SecTrustSetAnchorCertificates → 找到 thunk 函数 → 查交叉引用 → 定位到核心证书验证函数 sub_46B8D4 → hook 它返回 0 → 抓包成功。

每次 ins 更新版本,验证逻辑不变,只是函数偏移地址变了。

现在的目标

我有 IDA Pro MCP,Claude 可以直接操作 IDA——搜函数、查交叉引用、反编译代码。

所以这个 Skill 要做到:用户只说一句"帮我分析 ins 的 SSL Pinning",Claude 通过 IDA MCP 全自动走完流程,直接输出可用的 Frida 脚本。

下面一步步拆解怎么写。

第一步:写清楚适用场景

## 适用场景用户需要对 iOS App 进行抓包但被 SSL Pinning 拦截。前提:用户已在 IDA Pro 中打开目标二进制,且 IDA MCP 已连接。

注意这里写了前提条件——IDA MCP 必须连着。Claude 看到这个就知道它可以直接调用 IDA 的能力。


第二步:写 IDA MCP 自动化调用流程

这是整个 Skill 最核心的部分。

之前是写给人看的步骤:"在 IDA 里搜索 XXX,然后按 X 查交叉引用"

现在是写给 Claude 执行的 MCP 调用链:"调用 list_functions_filter("XXX"),然后调用 get_xrefs_to(地址)"

### Step 1: 搜索关键 API 函数用 IDA MCP 搜索 SSL 验证相关的系统 API:```调用顺序:1. list_functions_filter("SecTrustSetAnchorCertificates")2. 如果没找到,尝试 list_strings_filter("SecTrustSetAnchorCertificates")3. 备选:list_functions_filter("SecTrustEvaluateWithError")```预期结果:找到一个 thunk 函数,类似:```c// attributes: thunkOSStatus __cdecl SecTrustSetAnchorCertificates(    SecTrustRef trust, CFArrayRef anchorCertificates){    return _SecTrustSetAnchorCertificates(trust, anchorCertificates);}```记录该函数的地址。

你看,我直接写了 IDA MCP 的调用命令。Claude 看到 list_functions_filter,就知道该调用这个 MCP 工具去 IDA 里搜函数。


第三步:写交叉引用的自动追踪

### Step 2: 交叉引用,找到调用者对 Step 1 找到的函数地址做交叉引用:```调用:get_xrefs_to(Step1找到的地址)```预期结果:返回多个调用者。筛选规则:优先选 xref 数量少的那个。### Step 3: 反编译候选函数,确认核心验证函数```调用:decompile_function(候选地址)```核心验证函数的识别特征(满足越多越确定):1. 同时调用了 SecTrustSetAnchorCertificates 和 SecTrustEvaluateWithError2. 包含字符串 "Pinning validation failed"3. 包含字符串 "Certificate is revoked"4. 有循环遍历证书链的逻辑5. 有 SHA256 指纹比对逻辑6. 函数返回 0 表示成功,非 0 表示失败

这段的关键在于识别特征。Claude 反编译出代码后,会根据这些特征自己判断是不是找对了函数。不对就自动继续追踪下一个 xref——这就是为什么要把特征写清楚。


第四步:写 Frida 脚本模板

### Step 5: 生成 Frida 绕过脚本方案 A(推荐):直接 hook 核心验证函数返回 0```jsInterceptor.attach(    Module.findBaseAddress("{模块名}").add({偏移地址}), {    onLeave: function(retval) {        console.log("[*] SSL Pinning bypassed, ret:", retval);        retval.replace(0x0);    }});```

注意模板里用了 {模块名} 和 {偏移地址} 占位符。Claude 会用前面 IDA MCP 分析出来的真实值自动替换。


第五步:写备选路径

逆向不是一条直线,所以要告诉 Claude 走不通的时候怎么换方向:

## 备选路径:字符串搜索法如果 Step 1 搜不到 SecTrustSetAnchorCertificates,换用字符串搜索:```1. list_strings_filter("Pinning validation failed")2. 对找到的字符串地址做 get_xrefs_to3. 反编译引用该字符串的函数4. 该函数大概率就是核心验证函数```

这样即使主路径走不通,Claude 也知道该怎么绕。


怎么用这个 Skill

写好以后,创建文件夹,把 SKILL.md 放进去:

mkdir -p ~/.claude/skills/ios-ssl-pinning-bypass# 然后把你写好的 SKILL.md 放进去

用的时候,确保 IDA Pro 已经打开了目标二进制,IDA MCP 已连接。然后:

方式 1:手动调用

/ios-ssl-pinning-bypass

方式 2:自动触发

直接跟 Claude 说"帮我分析 ins 的 SSL Pinning",它会自动匹配到这个 Skill,然后通过 IDA MCP 一步步执行:搜函数 → 查交叉引用 → 反编译 → 确认特征 → 生成 Frida 脚本。

全程你只需要看着它干活就行。


写 Skill 的几个要点

写了几个 Skill 以后,我总结了一些经验:

1. 写 MCP 调用链,不要写人工操作步骤

之前我写的是"在 IDA 里搜索 XXX,然后按 X 查交叉引用"——这是写给人看的。

现在应该写"调用 list_functions_filter("XXX"),然后调用 get_xrefs_to(地址)"——这是写给 Claude 执行的。Claude 有 IDA MCP,它可以直接操作 IDA,不需要你手动点。

2. 写清楚判断条件,让 AI 能自己决策

比如反编译出来的函数,怎么判断是不是核心验证函数?你要把特征列清楚:包含什么字符串、调用了什么 API、返回值是什么含义。Claude 看到这些特征,就能自己判断对不对,不对就继续追踪下一个。

3. 写备选路径,不要只写一条线

逆向不是一条直线。主路径走不通的时候,Claude 需要知道该怎么绕。比如搜函数名搜不到,就换成搜字符串;字符串也搜不到,就逐个追踪系统 API。

4. 给模板代码,不要让 AI 从零写

你自己验证过的 Frida 脚本,直接贴在 Skill 里当模板。Claude 基于你的模板改,比它自己从零写靠谱得多。

5. 维护一个历史记录

加一个版本表格,每次成功后更新。这样你的 Skill 会越来越"聪明",积累的数据越多,后面适配越快。

6. description 要写准

description 决定了 Claude 什么时候自动触发你的 Skill。写太宽泛会误触发,写太窄又触发不了。建议写具体场景,比如"针对 iOS App 的 SSL Pinning 绕过",而不是"iOS 逆向"。


举一反三:你还能封装什么

这个思路不只是抓包能用。任何你经常重复的逆向流程,只要有 MCP 工具支持,都可以写成全自动 Skill:

  • • Android 脱壳流程:jadx MCP 搜索 ClassLoader → 追踪 loadClass → 定位壳入口 → 生成 dump 脚本
  • • 协议逆向流程:IDA MCP 搜索加密 API → 交叉引用追踪调用链 → 还原算法 → 生成复现代码
  • • 反调试绕过流程:IDA MCP 搜索 ptrace/sysctl → 定位检测函数 → 生成 Frida 绕过脚本
  • • 签名算法还原:jadx MCP 搜索 Interceptor → 追踪 sign 方法 → 提取密钥 → 生成 Python 复现

每个流程你走过一遍,就可以封装成一个 Skill。下次遇到类似的 App,Claude + MCP 全自动帮你干完。


Skill 的一些进阶用法

如果你想玩得更深一点,Skill 还支持这些:

限制工具权限

---allowed-tools: Read, Grep, Glob---

这样 Skill 执行时只能读文件和搜索,不能改你的代码。适合那些只做分析不做修改的场景。

只允许手动调用

---disable-model-invocation: true---

加了这个,Claude 不会自动触发,只有你手动 /skill名 才会执行。适合有副作用的操作,比如自动提交代码。

注入动态数据

## 当前环境- 分支: !`git branch --show-current`- Frida 版本: !`frida --version`

!command`` 这个语法会在 Skill 执行前先跑命令,把结果注入进去。Claude 就能拿到你当前的实时环境信息。


最后

回顾一下整个思路:

  1. 1. 你手动走通一遍 Instagram SSL Pinning 的绕过流程
  2. 2. 把流程里的每一步翻译成 IDA MCP 的调用命令
  3. 3. 写清楚判断条件,让 Claude 能自己决策
  4. 4. 加上备选路径和 Frida 脚本模板
  5. 5. 打包成一个 SKILL.md,放到 ~/.claude/skills/ 下

以后 ins 更新版本,你只需要 IDA 打开新二进制,跟 Claude 说一句话,它就自动帮你搞定。

你提供思路,Claude 提供执行力。你走过一遍的路,它以后可以自己走。


获取完整SKILL公众号发送 ins抓包,注意大小写

END

扫码添加好友,一起探讨逆向技术、交流行业经验、共享学习资料,还能加入逆向技术同好社群