免责声明:由于传播、利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人自行承担相关法律风险及责任,文章作者、工具提供者不对使用者的未授权行为和后果负责。在进行相关知识学习,技术操作时请务必遵守《中华人民共和国个人信息保护法》、《中华人民共和国网络安全法》等相关法律法规
本文主要记录本人在正常情况下无法抓包或抓不到包的处理方法
有关简单设置WIFI代理与证书问题本文不做考究
注:因部分APP可能存在检测模拟器无法运行并且又无好方法绕过检测,故下文中会给出我个人的两种环境的对应的解决方案,【通解】指两种环境皆可,【真机/模拟器】指定环境可行,仅供参考
简单HTTP代理&WiFi代理检测
在进行简单设置WIFI代理后出现无法抓包的情况,说明APP设置了代理检测
以下是基于Grok3生成的对简单全局HTTP代理&WiFi代理检测代码
import android.content.Context;
import android.text.TextUtils;
public class ProxyChecker {
public static boolean isProxyEnabled(Context context) {
// 1. 检查WiFi代理设置
String wifiProxyAddress = android.net.Proxy.getHost(context);
// 获取WiFi代理主机地址&获取WiFi代理端口号
int wifiProxyPort = android.net.Proxy.getPort(context);
boolean hasWifiProxy = !TextUtils.isEmpty(wifiProxyAddress) && wifiProxyPort != -1;
// 2. 检查全局HTTP代理设置
String httpProxyAddress = System.getProperty("http.proxyHost");
// 获取全局HTTP代理主机地址&获取全局HTTP代理端口号(字符串)
String portStr = System.getProperty("http.proxyPort");
int httpProxyPort = (portStr != null) ? Integer.parseInt(portStr) : -1;
boolean hasHttpProxy = !TextUtils.isEmpty(httpProxyAddress) && httpProxyPort != -1;
// 3. 返回结果:WiFi代理或全局HTTP代理任一有效即返回true
return hasWifiProxy || hasHttpProxy;
}
}
解决方法
【通解】使用Postern代理软件、反编译app、hook
【模拟器】使用Proxifier找到模拟器进程全局代理
参考地址:
postern代理转发流量到charles
Proxifier转发Burpsuite联动xray抓微信小程序数据包
NO_Proxy
代码中强制OkHttp直接连接目标服务器,绕过设备的代理设置(例如全局HTTP代理或WiFi代理)
public class NetworkTask implements Runnable {
private final Context context;
public NetworkTask(Context context) {
this.context = context;
}
@Override
public void run() {
// 为当前线程准备消息循环,以便处理UI相关操作(如Toast)
Looper.prepare();
// 创建OkHttp客户端,配置为不使用系统代理
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.proxy(java.net.Proxy.NO_PROXY) // 绕过系统代理,直接连接目标服务器
.build();
// 构建HTTP GET请求,目标为百度首页
Request request = new Request.Builder()
.url("http://www.abc.com") // 设置请求的URL
.build(); // 生成Request对象,默认方法为GET
try {
// 执行同步网络请求,获取响应
Response response = okHttpClient.newCall(request).execute();
// 从响应中提取正文内容(字符串形式)
String responseBody = Objects.requireNonNull(response.body()).string();
// 在屏幕上显示响应内容,持续时间为短时(约2秒)
Toast.makeText(context, responseBody, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
Looper.loop();
}
}
解决方法
【通解】使用HttpCanary代理软件、hook
【模拟器】使用Proxifier找到模拟器进程全局代理
参考地址:
Android 抓包工具HttpCanary
Proxifier转发Burpsuite联动xray抓微信小程序数据包
证书锁定SSL/TLS Pinning
在公共网络中我们使用安全的SSL/TLS通信协议进行通信,并且使用数字证书来提供加密和认证。HTTPS的握手环节仍然面临(MIM中间人)攻击的可能性,因此CA证书签发机构也存在被黑客入侵的可能性,同时移动设备也面临内置证书被篡改的风险
目前使用的bp还是fiddle都是基于中间人攻击,截获服务器返回的证书并伪造证书发送给客户端骗取信任
客户端简单校验证书合法性有以下几种情况:
- 服务器证书上的域名是否和服务器的实际域名相匹配
- 查看证书是否过期
- 校验证书链
而有的将APP代码内置仅接受指定域名的证书,而不接受操作系统或者浏览器内置的CA根证书对应的任何证书,那如何实现呢,该方法有多种实现手段,以下是最常见的两种
方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
证书锁定 | 简单直接,安全性高 | 证书更新需重新发布APP | 小型项目,证书稳定 |
公钥锁定 | 灵活,证书续期无影响 | 需提取公钥指纹 | 中大型项目,频繁续期 |
解决办法
【通解】
- 证书锁定-需要找到指定的服务端证书(.crt或.pem或.p12格式,多半在raw/assets目录)导入抓包工具、运行时Hook、静态反编译
- 公钥锁定-静态反编译、运行时Hook、动态注入Frida
- 通解-JustTustMe禁用、绕过 SSL 证书检查的基于 Xposed 模块
安卓应用层抓包通杀
【通解】
r0capture - https://github.com/r0ysue/r0capture 以下为原项目介绍
- 仅限安卓平台,测试安卓7、8、9、10、11、12、13、14 可用 ;
- 无视所有证书校验或绑定,不用考虑任何证书的事情;
- 通杀TCP/IP四层模型中的应用层中的全部协议;
- 通杀协议包括:Http,WebSocket,Ftp,Xmpp,Imap,Smtp,Protobuf等等、以及它们的SSL版本;
- 通杀所有应用层框架,包括HttpUrlConnection、Okhttp1/3/4、Retrofit/Volley等等;
- 无视加固,不管是整体壳还是二代壳或VMP,不用考虑加固的事情