抓包进阶之双端校验
zsk Lv4

挂上vpn,打开charles抓包可以看到没网络,但是可以抓到包,怀疑是服务器校验客户端证书了
image
image
这里推荐一下肉老师的文章 https://www.anquanke.com/post/id/197657
引用里面一张图
image
原本服务器校验的是app的证书,但是挂上charles,服务器校验的是charles的证书,一匹配发现不是app的证书,就返回网络失败,所以我们要将app中内置的证书导入到Charles中去。
这个操作通常需要完成两项内容:

  1. 找到证书文件
  2. 找到证书密码
    首先找证书文件,直接对apk进行解包,直接过滤搜索后缀名为p12的文件即可,一般常用的命令为tree -NCfhl |grep -i p12,直接打印出p12文件的路径

image
找证书密码一般解密会调用现成的API,java.security.KeyStore ,直接使用frida打印出来,
也可以hook系统文件库,这里直接使用现成的代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function hook_KeyStore_load() {
Java.perform(function () {
var StringClass = Java.use("java.lang.String");
var KeyStore = Java.use("java.security.KeyStore");
KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
console.log("KeyStore.load1:", arg0);
this.load(arg0);
};
KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
this.load(arg0, arg1);
};

console.log("hook_KeyStore_load...");
});
}

setImmediate(hook_KeyStore_load)

使用spawn的模式启动,密码一下子就吐出来了
image
把证书导入到charles,并输入刚才的密码
image
再次抓包试试,这次页面跳转了,请求也是正常了
image
image

 评论