前言
在前天的沙龙上,师傅们积极探讨,期间提出了一些关于app抓包的相关问题。在此小小的总结一波有关的分析以及解决办法。
01
检测代理
首先是当设置手机代理后,APP无法获取网络数据。会出现无法连接网络的情况出现。这就说明app设置了代理检测。常见的检测代码如下
public static boolean isWifiProxy(Context context) {
final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
String proxyAddress;
int proxyPort;
if (IS_ICS_OR_LATER) {
proxyAddress = System.getProperty("http.proxyHost"); //获取代理主机
String portStr = System.getProperty("http.proxyPort"); //获取代理端口
proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
} else {
proxyAddress = android.net.Proxy.getHost(context);
proxyPort = android.net.Proxy.getPort(context);
}
Log.i("代理信息","proxyAddress :"+proxyAddress + "prot : " proxyPort")
return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}
此时可以利用postern等工具,进行全局的流量转发,跳过代理检测。另外的方法就是反编译app,进行hook或者是直接修改smali代码重打包。关于修改smali代码这个也很适用于Android7以上,系统不再信任用户级的证书,只信任系统级的证书。换一条路,不改证书,改app也是可以达到这个效果。
02
No Proxy
其次就是通信协议代码中使用了proxy(Proxy.NO_PROXY),即使是设置了代理也是会被绕过的。此时是网络可以正常使用,但是就是抓不到包。这时候可能就是这个原因了。
public void run() {
Looper.prepare();
OkHttpClient okHttpClient = new OkHttpClient.Builder().
proxy(Proxy.NO_PROXY). //使用此参数,可绕过系统代理直接发包
build();
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
Looper.loop();
}
此时也是可以使用全局系统代理工具,如HttpCanary等工具进行绕过,或者是直接hook该方法。
03
SSL Pinning证书锁定
抓包时,无法连接网络并且也接收不到任何数据
将APP代码内置仅接受指定域名的证书,而不接受操作系统或者浏览器内置的CA根证书对应的任何证书。通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此移动端APP与服务端(例如API网关)之间的通信可以保证绝对的安全。
这种方法有多种实现,比如说开发者将SSL证书的某些字节码硬编码在APP中。当应用程序与服务器通信时,它将检查证书中是否存在相同的字节码。如果存在,则应用程序将请求发送到服务器。如果字节码不匹配,它将抛出SSL证书错误。此技术可防止攻击者使用自己的自签名证书。
这个时候就需要往抓包工具中导入app的证书, 通常在assets文件夹中,.p12 .pem .cer。然后再hook。不过此时要对抗混淆。
搬运之前的文章https://www.52pojie.cn/thread-1405170-1-1.html
总结
其次最强工具目前就是肉丝师傅的r0capture。
可以通杀任何抓包问题。让天底下没有抓不到的包。在之前的文章中,也提供了一份frida的justTrustme的脚本,可以hook常见的通信协议的代理检测。大家可以用一下测试一下。
最后,求赞求赞求赞!
【火线短视频精选】
【周度激励】2021.8.23 ~ 2021.8.29公告
【相关精选文章】
【招人专区】
本文始发于微信公众号(火线Zone):APP抓包问题总结及常见绕过方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论