小程序逆向和抓包技巧浅析
1.抓取移动端项目的前端页面和后台的交互数据,对请求信息和响应内容进行分析
(1).普通手机APP的前端页面和后台一般是通过http请求进行交互
(2).微信小程序的前端页面和后台一般是通过https请求进行交互
以前微信是可以直接信任用户证书,从某个版本以后,这个特性被限制了
Android系统
(1).Android7.0及以下(不影响)
(2).Android7.0以上
微信7.0以下版本(不影响)
微信7.0及以上版本(无法抓包)
iOS系统(不影响)
Android版本大于7.0,微信版本大于等于7.0,是无法抓包的,微信App去掉了信任用户证书的配置。技术上的实现可能是通过android:networkSecurityConfig,xml安全配置代码,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates
overridePins="true"
src="system" />
<certificates
overridePins="true"
src="user" />
</trust-anchors>
</base-config>
</network-security-config>
//清单文件配置
<application
android:networkSecurityConfig="@xml/network_security_config_debug">
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 允许明文HTTP(非HTTPS)请求 -->
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<!-- 其他情况只允许信任系统内置证书 -->
<certificates src="system"/>
</trust-anchors>
</base-config>
<!-- 仅Debug包允许用户证书 -->
<debug-overrides>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
2.针对Android系统上微信小程序的抓包方案
(1).使用微信版本6.7.3
(2).使用VirtualXposed(实现Android高版本的抓包)
不需要Root权限,不会修改系统属性,安装JustTrustMePlus模块(JustTrustMePlus升级版能够对抗okhttp混淆加密),禁止证书校验,抹掉Xposed特征
(3).Android系统级证书/无需安装任何证书 + 全局代理工具 + 隐藏Root检测 + 隐藏Xposed/Frida等Hook检测 + 安装JustTrustMePlus模块(实现Android高版本的抓包)
(4).VirtualXposed + Google Play版本的微信 + JustTrustMePlus(实现Android高版本的抓包)
Google Play商店拥有更加严格的审核标准,扫描用户应用列表和调用栈检测的代码会通不过商店的审核,使用Google Play商店版微信会更有安全保证(这种方案综合更好)
3.解决配置Charles/Burp Suite/Fiddler代理之后手机无法上网的问题
(1).关闭Windows10防火墙
(2).检查Charles黑白名单,如果没有特别需要可以关闭黑白名单功能
(3).Charles上安装SSL证书(配置Charles的SSL)、手机安装SSL证书(无需安装证书/Android系统证书)