一句话:移动端的活一半在"读代码"(反编译后的 Java/Swift),这正好是 AI 的主场。
一、移动端渗透的特点
| 特点 | 说明 | AI 适配度 |
|---|---|---|
| 反编译产物可读 | Java/Smali、Swift/OC 伪代码 | ★★★★★ |
| 硬编码问题多 | 密钥、接口、凭据 | ★★★★★ |
| 组件暴露 | Android 四大组件 | ★★★★☆ |
| 加壳/混淆 | 加固后的代码 | ★★☆☆☆ |
| 抓包/改包 | 需要工具链 | ★★★☆☆ |
| 动态调试 | Frida hook | ★★★★☆ |
二、反编译代码的批量审计
APK 反编译后有几千个类,人工看不完。让 AI 批量扫:
# 任务
扫描以下反编译的 Java 代码,找出安全问题:
1. 硬编码敏感信息(API Key、密钥、账号密码、内网地址)
2. 不安全的加密使用(ECB、硬编码 IV、弱随机)
3. 明文传输(http:// 而非 https://)
4. 日志泄露敏感信息(Log.d 打印 token)
5. WebView 配置不当(setJavaScriptEnabled + addJavascriptInterface)
6. 不安全的外部存储(SD 卡写敏感数据)
# 输出
| 类型 | 文件 | 代码片段 | 风险 | 建议 |
# 代码
[java 代码]
硬编码检测是 AI 的高价值场景——它比正则强,因为能区分"这是个示例字符串"和"这是个真实密钥"。
三、硬编码密钥的智能识别
# 任务
判断以下字符串是否为真实敏感信息(而非示例/占位符):
- "AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY" (Google API Key?)
- "AKIAIOSFODNN7EXAMPLE" (AWS?)
- "sk-xxxx" (占位符?)
- "http://192.168.1.100:8080/api" (内网地址?)
# 输出
{"value": "", "type": "", "is_real": bool, "confidence": 0.0, "note": ""}
AI 能识别出 AWS Key 的格式规律、Google API Key 的前缀特征,以及哪些明显是文档示例。
四、Android 组件暴露分析
# 输入
AndroidManifest.xml:
```xml
<activity android:name=".UserProfileActivity" android:exported="true">
<intent-filter>
<action android:name="com.app.PROFILE"/>
</intent-filter>
</activity>
<provider android:name=".FileProvider"
android:authorities="com.app.file"
android:exported="true"
android:grantUriPermissions="true"/>
<receiver android:name=".SmsReceiver" android:exported="true">
<intent-filter><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter>
</receiver>
任务
- 找出所有导出的组件
- 分析每个组件的安全风险
- 给出利用思路(如通过 adb 构造 Intent 调用)
- 标出高危项
AI 会指出:导出的 Activity 可被任意 App 调用、导出的 Provider 可能造成任意文件读取、导出的 Receiver 可能被伪造广播。
并给出验证命令:
```bash
# 调用导出的 Activity
adb shell am start -n com.app/.UserProfileActivity --es user_id 1002
# 尝试访问导出的 Provider
adb shell content query --uri content://com.app.file/../../data/data/com.app/shared_prefs/
五、Frida Hook 脚本生成
这是 AI 在移动端最有价值的用法之一:
# 背景
目标 App 使用 AES 加密请求参数,我需要拿到明文和密钥。
已定位到类 com.app.utils.EncryptUtil,方法 encrypt(String)。
# 任务
生成 Frida hook 脚本,要求:
1. hook encrypt 方法,打印入参和返回值
2. hook 密钥相关方法,打印密钥
3. 输出可直接运行的 JS 脚本
AI 输出:
Java.perform(function() {
var EncryptUtil = Java.use('com.app.utils.EncryptUtil');
EncryptUtil.encrypt.implementation = function(input) {
console.log('[+] encrypt 输入: ' + input);
var result = this.encrypt(input);
console.log('[+] encrypt 输出: ' + result);
return result;
};
// hook 密钥获取
try {
var KeyUtil = Java.use('com.app.utils.KeyUtil');
KeyUtil.getSecretKey.implementation = function() {
var key = this.getSecretKey();
console.log('[+] 密钥: ' + key);
return key;
};
} catch(e) { console.log('[-] KeyUtil 未找到'); }
});
六、SSL Pinning 绕过
# 背景
目标 App 启用了证书校验(SSL Pinning),Fiddler 抓包失败。
App 未加固。
# 任务
给出 3 种绕过方案:
1. Frida 通用脚本(SSL unpinning)
2. 基于常见库(OkHttp/TrustManager)的定向 hook
3. 重打包方案(修改 AndroidManifest + 注入)
每种给出完整代码和操作步骤。
AI 会输出常用的 frida-multiple-unpinning 脚本核心逻辑,以及 OkHttp 的 CertificatePinner hook 代码。
七、iOS 端辅助
# 输入
iOS 二进制中的类方法列表(class-dump 输出):
[贴入]
# 任务
1. 识别与安全相关的类(加密、认证、存储)
2. 找出可能的敏感方法
3. 生成对应的 Frida hook 脚本(Objective-C)
iOS 的 Objective-C 方法名可读性好,AI 分析效果比 Android 更好。
八、协议与接口梳理
从 App 里提取所有接口,让 AI 整理:
# 输入
从 APK 中提取的 URL 列表(部分):
https://api.target.com/v1/user/login
https://api.target.com/v1/order/list
http://old-api.target.com/debug/test
https://test-api.target.com/v1/admin/all
# 任务
1. 按功能分组
2. 标出高风险接口(admin/debug/test/old)
3. 标出使用 http 的接口
4. 推测哪些接口可能无鉴权
5. 输出测试优先级
这一招在实战中极其有效——测试环境接口、老版本接口往往是突破口。
九、自动化流水线
解包(apktool/jadx)
→ 提取敏感字符串(AI 过滤)
→ 分析 Manifest 组件暴露(AI 分析)
→ 提取接口清单(AI 分组排序)
→ 静态审查代码(AI 扫描)
→ Frida 动态验证(AI 生成 hook)
→ 输出报告(AI 汇总)
十、注意事项
- 只测授权 App:包括你自有的和客户授权的
- 加固 App 处理:AI 对加固代码帮助有限,需要先脱壳
- 隐私合规:测试中接触的用户数据要严格保密
- Frida 反检测:部分 App 有反调试,需要配合绕过
- 环境隔离:用模拟器/测试机,不用主力手机
十一、小结
移动端渗透是静态分析密集的场景,AI 优势明显:
| 环节 | AI 价值 |
|---|---|
| 反编译代码审计 | ★★★★★ |
| 硬编码识别 | ★★★★★ |
| Manifest 组件分析 | ★★★★☆ |
| Frida 脚本生成 | ★★★★★ |
| 接口梳理 | ★★★★☆ |
| SSL Pinning 绕过 | ★★★★☆ |
| 加壳/混淆处理 | ★★☆☆☆ |
下一篇:AI 辅助云安全配置审计。
系列文章:AI 渗透测试与漏洞挖掘实战