- 去chrales官网下载
# 官网
https://www.charlesproxy.com/download/
# nas
https://nas.nekoneko.vip:5001/sharing/BysGQqO82
- 破解chrales
# 破解包
https://nas.nekoneko.vip:5001/sharing/2iIKF10pK
# 在线破解网站
https://tools.zzzmode.com/mytools/charles/
解压文件夹,进入lib目录替换jar,然后jar给777权限。
配置VPN抓包代理-Postern.APK
1.添加chrales的代理端口。 2.右上角配置规则,设置规则。 3.匹配类型->匹配所有,动作->通过代理连接,代理组->选择chrales的代理。删除所有目标地址域名。 4.点击保存。 5.删了原来旧的规则只留下编辑代理的规则。 6.右上角打开VPN。 7.如果chrales连接上会弹出授权框,点击allow授权。
添加SSL证书
1.Proxy->SSL Proxy settings 2.勾选enable SSL proxying 3.在Location -> ADD host和端口都写 * 4.chrales->help->SSL Proxying -> 第三个查看安装证书地址(chls.pro/ssl)。 5.手机浏览器访问地址下载安装证书(如果访问不到去下载证书push到手机安装)(如果抓不到https尝试重启chrales或者修改手机时间,详见基础刷机部分)
安装个人证书(额外)
> 如果安卓8.0数据包抓不到配置一下个人证书,肉丝环境(8.1.0_r1 + Magisk)。
adb shell
su
cd /data/misc/user/0/cacerts-added
mount -o remount,rw /
#安卓7
mount -o rw,remount /
或者
mount -o remount, rw /system
cp * /etc/security/cacerts/
/etc/security/cacerts/ 拷贝过去的证书给777权限
socket5 VPN抓包
> 有时候有些数据包抓不到的时候切换成socket。
1.charles->proxy->proxy settings->勾选socket5
2.Postern修改成socket5代理,重启VPN即可。
APP证书抓包,客户端校验服务器。
有了Charles置于中间之后,本来C/S架构的通信过程会“分裂”为两个独立的通信过程,app本来验证的是服务器的证书,服务器的证书手机的根证书是认可的,直接内置的;但是分裂成两个独立的通信过程之后,app验证的是Charles的证书,它的证书手机根证书并不认可,它并不是由手机内置的权威根证书签发机构签发的,所以手机不认,然后app也不认;所以我们要把Charles的证书导入到手机根证书目录中去,这样手机就会认可,如果app没有进行额外的校验(比如在代码中对该证书进行校验,也就是SSL pinning系列API,这种情况下一小节具体阐述)的话,app也会直接认可接受。
1.参考文章 https://www.anquanke.com/post/id/197657#h3-12
流程
1.找到证书文件
2.到证书密码
2.找到证书文件很简单,一般apk进行解包,直接过滤搜索后缀名为p12的文件即可,一般常用的命令为tree -NCfhl |grep -i p12,直接打印出p12文件的路径,当然也有一些app比较“狡猾”,比如我们通过搜索p12没有搜到证书,然后看jadx反编译的源码得出它将证书伪装成border_ks_19文件,我们找到这个文件用file命令查看果然不是后缀名所显示的png格式,将其改成p12的后缀名尝试打开时要求输入密码,可见其确实是一个证书。
3.也可以用objection方法来hook出调用file的class,因为证书都要去目录去找文件。
objection -g xxxxxx explore --startup-command "android hooking watch class_method java.io.File.$init --dump-args --dump-backtrace --dump-return"
4.frida进行hook证书密码"自吐",以调试运行模式运行。ps:如果打印不出来试试清理APP所有缓存在操作。
//打印堆栈信息
function printStack() {
Java.perform(function () {
var Exception = Java.use("java.lang.Exception");
var ins = Exception.$new("Exception");
var straces = ins.getStackTrace();
if (straces != undefined && straces != null) {
var strace = straces.toString();
var replaceStr = strace.replace(/,/g, "\r\n");
console.log("=============================Stack strat=======================");
console.log(replaceStr);
console.log("=============================Stack end=======================\r\n");
Exception.$dispose();
}
});
}
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) {
printStack("KeyStore.load1");
console.log("KeyStore.load1:", arg0);
this.load(arg0);
};
KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
printStack("KeyStore.load2");
console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
this.load(arg0, arg1);
};
console.log("hook_KeyStore_load...");
});
}
setImmediate(hook_KeyStore_load)
frida -U -f xxxx -l /root/Desktop/zb/ssl.js --no-pause
每个框架的密码hook点都是有不同的,这个是以安卓自带框架进行Hook
5.证书安装到charles。打开SSL->Cline Certificates-> 新建-> admin admin->add->import p12->输入hook出来的密码->然后host端口都*,如果没效果重启手机和重启charles。
7.SSL双向证书认证SSL Pinning Bypass:https://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js
抓包-翻墙国外APP
注意如果导入了APP证书要取消掉。
- charles->External Proxy Settings
- 勾选 Use external Proxy Servers
总结
一般HTTPS:大部分只采用客户端校验服务器
双向绑定:很少会有服务器校验客户端
SSL Cert Pinning:更少:趣充
你的文章内容非常用心,让人感动。 http://www.55baobei.com/6sQoNuML0d.html
你的文章让我感受到了艺术的魅力,谢谢! http://www.55baobei.com/4lkIP1Yj6r.html
你的文章让我心情愉悦,真是太棒了! https://www.yonboz.com/video/86888.html