Skip to content
Kurisu
Go back

App 与小程序渗透入门:抓包原理、证书绑定绕过与反编译审计

移动端渗透的第一个门槛不是找不到洞,而是根本抓不到包。这次课程从 TLS 握手原理讲起,把”为什么抓不到”和”怎么让它能抓”一次讲透,最后落到小程序的完整测试流程。配套的参考资料里有一篇很全的小程序渗透指北,本文按课程思路整理,工具清单在文末。

0x01 为什么抓不到包:从 TLS 握手说起

正常 HTTPS 握手:

① Client Hello      → 客户端发支持的加密套件 + 随机数
② Server Hello      → 服务端选套件 + 返回证书 + 随机数
③ 证书校验          → 客户端用内置 CA 根证书链验证服务端证书
④ 密钥协商          → 客户端用服务端公钥加密 pre-master 随机数(RSA 场景)
⑤ 对称加密通信      → 双方用协商出的会话密钥 AES 加密传输

抓包工具(Burp 等)的原理是 MITM:对客户端冒充服务端、对服务端冒充客户端。装了 Burp 证书后,步骤③能骗过普通应用——于是浏览器和大多数 App 都能抓。

但安全要求高的 App 会在代码里再加一层:SSL 证书绑定(SSL Pinning),把预期的服务端证书/公钥硬编码进客户端,握手时额外比对。这就是”装了证书还是抓不到”的原因。绑定分两档:

0x02 绕过证书绑定

单向绑定:Frida Hook 校验函数

思路是 Hook 应用里的证书校验逻辑,让它永远返回 true。现成方案按省事程度排序:

# 方案一:objection 一条命令
objection -g 包名 explore
android sslpinning disable

# 方案二:JustTrustMe / 自写 Frida 脚本(Xposed 亦可)
frida -U -f com.target.app -l ssl_pinning_bypass.js

自写脚本盯的目标通常是 X509TrustManager.checkServerTrustedOkHttp CertificatePinner.checkSSLSocketFactory 这几个点。

双向绑定:两条路

  1. R0capture:直接在 Java 层(SSLSocket 之上)抓取加密前的明文数据,不跟 TLS 握手纠缠,对双向绑定场景特别省事;
  2. 提取客户端证书:从 APK 的资源/资产目录里找到带口令的 p12/pfx 客户端证书,提取后安装进 Burp(Options → TLS → Client TLS Certificates),让 Burp 能代表客户端通过服务端校验。

实操提醒(笔记原话的教训):抓包失败先排查环境。我按课上演示复现时代理报错,最后发现是浏览器代理插件在捣乱——先退代理、切无代理模式验证基线,再逐个排除干扰源。

0x03 反编译审计:比抓包看得更全

抓包只能看到”运行时走了哪些接口”,反编译能看到”全部接口 + 硬编码秘密”:

jadx-gui target.apk          # 打开即看 Java 源码
# 全局搜索关键词(课堂推荐清单):
#  token / key / secret / AK / SK / jdbc / api.
#  http://(找内网接口和测试环境)
#  encrypt / RSA / AES(加密逻辑定位)

高频产出:云厂商 AK/SK 泄露、第三方 API key、JWT 签名密钥、数据库连接串、未鉴权的内部管理接口。找到加密函数后,配合抓包里的密文对还原加密算法,就能篡改请求参数继续测越权。

课程案例的典型链路:小程序/ App 抓包 → 发现富文本编辑器接口 → Ueditor 未授权文件上传controller.ashx?action=catchimage 一类)→ 配合文件包含 → RCE。

0x04 微信小程序测试全流程

小程序本质是”逻辑层 JS + 视图层 WXML/WXSS”,测试对象就是 app.jsapp.json、各页面 js 和 json 配置。

抓包:Proxifier 转发 PC 微信

PC 版微信小程序的流量用 Proxifier 转 Burp 最省事:

  1. Proxifier 添加代理服务器指向 Burp 端口;
  2. 代理规则的目标进程填:
    WeChat.exe;WeChatAppEx.exe;WeChatPlayer.exe;WechatBrowser.exe;WeChatAppEx*.exe
  3. Burp 能抓普通网页流量即配置成功。同一套规则连微信内置浏览器也能抓。

Proxifier 不行就 fiddler 中转:fiddler 导出根证书装到”受信任的根证书颁发机构”,再在 fiddler 里挂 Burp 为二级代理。

解包与反编译

小程序包落盘在 微信文件目录/Applet/ 下以 wx 开头的文件夹里,__APP__.wxapkg 是加密包:

# 一键 scan + 解包(推荐):
wxapkg scan -r "D:\WeChat Files\Applet"
# 或传统两步:UnpackMiniApp 解密 → CrackMinApp 反编译

反编译后的源码用小程序开发工具或任意编辑器打开做全局搜索(关键词同 0x03)。注意反编译产物常有缺失,能全局搜索查看即可,不必强求跑起来。

调试模式:给小程序开 F12

WeChatOpenDevTools 通过 hook 偏移地址把小程序窗口当浏览器调出 DevTools(版本敏感,更新后偏移会变;有封号风险,用小号):

pip3 install -r requirements.txt
python main.py -x    # 小程序 F12
python main.py -c    # 微信内置浏览器 F12

0x05 三个实战突破口(脱敏整理)

① 敏感信息泄露:老文章常写 AppSecret/云 key 直接利用——2022 年 6 月后小程序已支持检测这类泄露,纯靠它越来越难。但反编译里的正则匹配信息收集(http://phonetokenkey)依然高产,接口+数据遍历常有意外收获。

② 弱口令横移:小程序抓到的 xxxxx.com 接口域名,很多浏览器直接就能打开。小程序端测不动时,把域名丢进浏览器看有没有 Web 端后台——案例:图形验证码复用 + 忘记密码处用户枚举 → 爆破进后台。

③ 未授权访问的迂回:接口全 403 时不急着放弃。逐层看:响应头 Access-Control-Allow-Origin 里可能藏着另一个可用域名;405 页面可能写着客服联系方式(案例里加 QQ 客服对方直接说明”仅限某省 IP 访问”——改省内 IP 后一发入魂)。发现一个可用的未授权接口后,任意文件下载这类功能可以按”下载行为”和”信息泄露”拆成两个漏洞提交

0x06 课程展望:AI 时代的安全岗

课上最后给的趋势判断值得记下:AI 让自动化渗透(反编译、扫描、payload 构造)的效率大幅提升,攻击门槛下降 → 防守需要覆盖的面和难度远高于单点攻击 → 安全岗位会更多向防守倾斜(WAF/安全策略/AI 对抗)。这对求职方向的选择是个参考信号。

工具清单

用途工具
流量转发Proxifier、fiddler
证书绑定绕过Frida + JustTrustMe、objection、R0capture
反编译jadx-gui
小程序解包wxapkg(wux1an)、UnpackMiniApp、CrackMinApp
小程序调试WeChatOpenDevTools-Python

Share this post:

Previous Post
PHP 代码审计入门靶场复盘:call_user_func、一句话马与 HPP
Next Post
AI Agent 渗透测试:MCP、工具调用与一次黑客松的启示