Charles抓包与mock数据
最近有用到Charles,有一些感悟,分享给大家,希望对大家有所帮助。在Windows 平台相信很多人都用过Fiddler抓包,而Mac 平台一般使用Charles进行抓包。不过Charles属于商业软件而Fiddler属于免费软件。
本文无任何入侵计算机系统内容,内容完全为开放信息,可以在网上查到。本文内容仅供学习参考,请勿用于其他非法内容。

本文用到的工具:
1. Charles 用于抓包
https://www.charlesproxy.com/
2. Frida 用于Hook
https://github.com/frida/frida
3. 汇智e站 被抓包对象
https://sj.qq.com/myapp/detail.htm?apkName=com.wiseonline.huizhi
壹---Android HTTPS 抓包
相信用过Charles的人都知道如何使用Charles直接抓包,这里我不在多说,毕竟也没有什么技术含量。我想说的是通过Android端抓HTTPS的包。首先设置Charles,开启SSL。如图:
然后,手机端设置代理,如下图:IP为你Charles的IP,端口为8888.
设置完毕之后安装Root证书。
手机端也需要安装证书,连接Charles之后,打开浏览器输入chls.pro/ssl下载证书并安装。很简单不是,可以开始抓包了。这次我们以汇智e站为对象,看看汇智e站到底使用了什么API。
然鹅,当我们打开APP之后发现依然不能拿到SSL的内容。而当打开一些HTTPS的网站,却能拿到数据(比如百度),说明了证书这种方式并不能实现抓HTTPS的数据。
我查了一下,原因是Android 7 之后如果要抓APP的HTTPS请求需要在APP里面加xml文件,这种方式适合当前APP开发者,不适合抓包第三方APP的情况。
貮---Android HTTPS抓包失败解决方案
解决方案也很简单,就是上文提到的Frida . Frida 是一款Hook工具,可以用来跟踪拦截APP的方法, 需要Python环境。
安装:
pip install frida-tools # CLI tools
pip install frida # Python bindings
下载server端,根据你的模拟器的CPU。比如x86的下载x86
https://github.com/frida/frida/releases
启动frida server
adb root && adb push frida-server-12.7.22-android-x86 /data/local/frida-server && adb shell chmod +x /data/local/frida-server && adb shell /data/local/frida-server
之后可以直接使用frida查看相关进程
frida-ps -U
会列出所有进程
添加支持SSL JS文件
Java.perform(function() {
var array_list = Java.use("java.util.ArrayList");
var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
// console.log('Bypassing SSL Pinning');
var k = array_list.$new();
return k;
}
}, 0);
使用该文件进行SSL拦截跟踪。
frida -l frida.js -U -f com.wiseonline.huizhi --no-pause
这样就可以拿到所有HTTPS的内容。
叁---拦截修改HTTPS请求
经过以上内容,已经可以正常拿到HTTPS的所有内容,接下来就可以尝试拦截并修改请求。以一个POST请求为例。
在请求打断点,右键选择BreakPoints,之后repeat该请求。
这时,已经进入debug模式,已经将该请求拦截。可以先修改request,如果不修改可以直接execute执行request。
然后进入Response编辑模式,可以对Response的内容进行编辑,编辑完毕点execute执行Response。
之后可以save该Response
肆---Mock 数据
以登录为例,可以先抓包拿到Response,并把Response save到本地。然后通过Local Mapping来Mock数据。当用户名和密码错误的时候,success的value是false。对应的登录结果也是登录失败,我们把这个Response save到本地的时候,把success 从false改为true。就可以mock登录成功的情况。
伍---总结
a. Charles 不仅能用来抓包,而且可以用来Mock数据,能非常方便的提供在API不易满足开发测试需求时,根据自己的需要定制Response内容。
b. Charles Root证书并不能拿到所有的HTTPS请求的内容, 这时候可以采取通过Frida 等工具抓包SSL。
c. 该方法不光支持Android也支持iOS,可以下载对应的Frida进行抓包尝试。
点击下方“阅读原文”查看更多精彩内容☺