反证书检验:SSL证书绑定(单向校验和双向校验)
单项校验:客户端校验服务端的证书。
双向校验:客户端不仅要校验服务端的证书,同时APP内也存在证书供服务端检验。
一、反单向校验
0.0 Xposed简介
Xposed是一款可以在不修改APK的情况下影响程序运行的框架,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以编写并加载自己编写的插件APP,实现对目标apk的注入拦截等。
原理:控制zygote进程,通过替换/system/bin/app_precess程序控制zygote进程,使得它在系统启动的时候会加载Xposed framework的一个jar文件即XposedBridge.jar,从而完成对zygote进程及其创建的Dalvik/ART虚拟机的劫持,并且能够允许开发者独立的替代任何class。
1.1 准备工作
模拟器准备:逍遥模拟器,安卓7系统(64位)
准备APK工具:JustMePlush.apk、JustTrustMe.apk、XposedInstaller.apk、终端模拟器.apk
现将工具安装完成:
现在打开XposedInstaller,显示Xposed框架尚未安装
打开模拟器分享文件夹,将xposed文件夹复制进行
在模拟器里的找到该文件夹,并将他复制到system文件夹下
接下来使用终端模拟器.apk执行系统命令su提升至root权限
接下来进入system文件夹中的xposed文件夹,并运行其中的memu-script.sh脚本文件
重启模拟器后,再次进入Xposed Installer,已经显示安装成功了
1.2 开始反单向证书校验
打开Xposed Installer的模块功能
将以下两个模块勾选上,然后重启模拟器
在vuls.apk软件中执行SSL Pinning,成功访问,此时反单向证书校验已经完成。
二、反双向校验
0.0 Firda简介
Firda 是一款易用的跨平Hook工具, Java层到Native层的Hook无所不能,是一种动态的插桩工具,可以插入代码到原生App的内存空间中,动态的去监视和修改行为,原生平台包括Win、Mac、Linux、Android、iOS全平台。
1.1 准备工作
系统准备:夜神模拟器 + 安卓7(x86)
工具准备:Frida、frida-server、FridaScripts(SSLUnpinning.js)、frida-server、BurpSuite
1.2 开始反双向证书校验
本次使用的方案为:Firda + HOOK-JS + BurpSuite
这里的HOOK-JS指的是FridaScripts中的SSLUnpinning.js脚本
1.2.1 本地安装Frida
pip install frida
pip install frida-tools
安装成功会显示Frida的版本,我这里是frida-16.1.4
1.2.2 模拟器安装Frida-server
下载地址:GitHub - frida/frida: Clone this repo to build Frida
首先需要确定模拟器系统是x86还是x64的,使用以下命令可以查看系统位数。
getprop ro.product.cpu.abi
在Release中选择与本地frida版本相同的frida-server,我这里是x86的所以选择下面红色方框的。前面两个是用于真机的,后面两个才是用于模拟器的。
下载下来之后,利用 adb 将 frida-server 传上模拟器
添加执行权限,并执行frida-server-x86
新开一个命令行窗口,执行frida-ps -U,如果有显示进程则frida-server运行成功
1.2.3 转发并启动Frida
adb forward tcp:27042 tcp:27042
在输入以上命令后,通过frida-ps -R查看是否发现进程,如果有进程则转发成功。
1.2.4 正式实施
先在模拟器上运行frida-server
开启代理抓包
获取目标APP的包名
输入命令开始绕过证书双向校验
frida -U -f com.p1.mobxxx.xxxxxxx -l SSLUnpinning.js
已经成功抓取APP的数据包,并且不会影响任何的数据交互。