首页
社区
课程
招聘
[原创]App过代理检测-透明代理
发表于: 8小时前 216

[原创]App过代理检测-透明代理

8小时前
216

目标:在**办(梆梆企业版加固)正常联网的前提下,用 Burp 看到明文 HTTP 报文。

真机环境:小米9 / MIUI(Android 11)/ 自研内核 root(ShadowCore)
电脑环境:Windows + Burp Suite Pro 2022.2.3
最后验证:2026-11-03 10:50,App 首页/服务/我的全部正常,Burp 持续有流量

系统代理关掉(检测天然过)→ iptables 把 App 的 443 在内核层改道到本地 8080 → adb reverse 送到电脑 Burp。

两条都要命:

开系统代理后,启动即弹原生 Dialog:

当前 Activity 直接暴露检测模块:

检测实现(hook 日志实锤)—— 逐个查 System.getProperty:

就算绕过检测,Burp 也一条流量都没有。ss 实锤 App 是直连:

它走自己的 native 网络栈。所以必须在更底层(iptables)动手。

为什么之前 v0.5/v0.6 能抓到 URL?那是 WebView/Weex 加载静态资源
(index.js / 图片),走的是 Chromium 自己的代理逻辑,会读系统代理。
真正的业务 API 一直是直连。

App 包名与 uid:

Android 7+ 用户证书不再被 App 信任,必须装进 system 证书目录。
做法是 bind mount(不 remount、不碰 dm-verity)。

实测 Burp 2022.2.3 的 hash 是 9a5ba575(不同 Burp 版本/CA 会变)。

cert_setup.sh 做的事:把原系统 139 张证书拷进 /data/adb/cacerts,
再放入我们的 1 张 → mount -o bind /data/adb/cacerts /system/etc/security/cacerts。
必须拷全系统证书,否则 App 里所有正常 HTTPS 全炸。

注意:burp_proxy.py 走的是系统代理路线,只适合验证链路。
真正抓苏服办要用第 4 节的透明代理。

为什么用 reverse 而不是同 Wi-Fi:

验证手机侧确实有监听:

默认是 0。不开的话 REDIRECT 到 127.0.0.1 的包会被内核静默丢弃 ——
规则看着加了、计数也在涨,但连接永远建立不起来。

用 -I OUTPUT 1 插到最前面,确保优先于系统的 wmsctrl_nat_OUTPUT 链。

系统代理关着 → ProxyAlertActivity 的检测天然通过,不需要任何 hook。

Proxy → Options → Proxy Listeners → 选中 127.0.0.1:8080 → Edit
→ Request handling 标签 → 勾选 "Support invisible proxying (enable only if needed)" → OK

不开会怎样:Burp 把 TLS ClientHello 当成 HTTP 请求解析,一直等完整
请求头 → 连接挂死 → 表现为 App 卡在闪屏、8080 上一堆 ESTABLISHED 不释放。

验证 Burp 是否已开(不需要手机):

返回证书长度 → 已开;超时 → 没开。

期望(pkts 会持续增长):

期望有 ESTABLISHED + TIME_WAIT。

直接操作 App(点登录、进服务、搜索),Burp 的 HTTP history 就会出现
ydzt.jszwfw.gov.cn 的明文请求。

证书可以留着(bind mount 重启后就没了,不影响日常)。

如果 pinning 实在绕不过,可以完全放弃 TLS 层,直接在 App 进程里
拿加解密后的明文:

优点:确定性最高,pinning 完全不影响。
缺点:看不到原始 HTTP 报文格式(Header、状态码、Cookie 顺序)。

即使 TLS 通了,App 的部分业务数据还有第二层 AES 加密。
下面这些是 v0.5/v0.6 通过 hook SecretKeySpec / Cipher 拿到的:

解密示例(Python):

实测明文(埋点上报):

KEY-2 解出来是 java.util.HashMap 的序列化字节(sr java.util...loadFactor...threshold)。

安全警告
检测到系统代理开启,出于安全考虑请关闭代理后重新启动应用
[退出]                      4秒后自动关闭
com.hanweb.android.product.utils.proxy.ProxyAlertActivity
http.proxyHost    http.proxyPort
https.proxyHost   https.proxyPort
socksProxyHost    socksProxyPort
jszwfw.activity  192.168.137.60:46580 -> 124.236.19.250:443
jszwfw.activity  192.168.137.60:42808 -> 124.236.19.250:443
jszwfw.activity  192.168.137.60:42822 -> 124.236.19.250:443
jszwfw.activity  192.168.137.60:46580 -> 123.183.232.33:443
jszwfw.activity  192.168.137.60:49918 ->  49.77.204.17:443
# 包名
com.hanweb.android.jszwfw.activity
# uid(实测 10264,换机/重装可能变,脚本会自动查)
adb shell dumpsys package com.hanweb.android.jszwfw.activity | grep userId=
curl -s -o certs/burp_ca.der 4c7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0R3H3z5o6m8Q4x3V1k6U0k6i4u0@1
cd certs
openssl x509 -inform DER -in burp_ca.der -out burp_ca.pem
H=$(openssl x509 -in burp_ca.pem -subject_hash_old -noout | head -1)
cp burp_ca.pem "$H.0"
echo "证书名: $H.0"

[招生]科锐逆向工程师培训(2026年11月13日实地,远程教学同时开班, 第57期)

收藏
点赞 ・20
打赏
分享
最新回复 (7)
雪    币: 6823
活跃值: (3640)
能力值: (RANK:180 )
在线值:
发帖
回帖
粉丝
2 楼
附件在哪里下载
8小时前
0
雪    币: 2509
活跃值: (1615)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3 楼
胜负已分,高下立判
6小时前
0
雪    币: 2020
活跃值: (4756)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4 楼
66666
6小时前
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5 楼
学习一下
5小时前
0
雪    币: 0
活跃值: (1225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6 楼
6666
5小时前
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7 楼
666
1小时前
0
雪    币: 2738
活跃值: (5942)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8 楼
666
1小时前
0
游客
登录 | 注册 方可回帖
返回