天天看点

charles 安装 ssl_Charles抓包与mock数据(I)

Charles抓包与mock数据

 最近有用到Charles,有一些感悟,分享给大家,希望对大家有所帮助。在Windows 平台相信很多人都用过Fiddler抓包,而Mac 平台一般使用Charles进行抓包。不过Charles属于商业软件而Fiddler属于免费软件。

本文无任何入侵计算机系统内容,内容完全为开放信息,可以在网上查到。本文内容仅供学习参考,请勿用于其他非法内容。

charles 安装 ssl_Charles抓包与mock数据(I)

本文用到的工具:

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。如图:

charles 安装 ssl_Charles抓包与mock数据(I)

然后,手机端设置代理,如下图:IP为你Charles的IP,端口为8888.

charles 安装 ssl_Charles抓包与mock数据(I)

设置完毕之后安装Root证书。

charles 安装 ssl_Charles抓包与mock数据(I)

手机端也需要安装证书,连接Charles之后,打开浏览器输入chls.pro/ssl下载证书并安装。很简单不是,可以开始抓包了。这次我们以汇智e站为对象,看看汇智e站到底使用了什么API。

然鹅,当我们打开APP之后发现依然不能拿到SSL的内容。而当打开一些HTTPS的网站,却能拿到数据(比如百度),说明了证书这种方式并不能实现抓HTTPS的数据。 

charles 安装 ssl_Charles抓包与mock数据(I)

我查了一下,原因是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

charles 安装 ssl_Charles抓包与mock数据(I)

启动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

charles 安装 ssl_Charles抓包与mock数据(I)

这样就可以拿到所有HTTPS的内容。

charles 安装 ssl_Charles抓包与mock数据(I)

叁---拦截修改HTTPS请求

 经过以上内容,已经可以正常拿到HTTPS的所有内容,接下来就可以尝试拦截并修改请求。以一个POST请求为例。

charles 安装 ssl_Charles抓包与mock数据(I)

在请求打断点,右键选择BreakPoints,之后repeat该请求。

charles 安装 ssl_Charles抓包与mock数据(I)

这时,已经进入debug模式,已经将该请求拦截。可以先修改request,如果不修改可以直接execute执行request。

charles 安装 ssl_Charles抓包与mock数据(I)

然后进入Response编辑模式,可以对Response的内容进行编辑,编辑完毕点execute执行Response。

charles 安装 ssl_Charles抓包与mock数据(I)

之后可以save该Response

charles 安装 ssl_Charles抓包与mock数据(I)

肆---Mock 数据

以登录为例,可以先抓包拿到Response,并把Response save到本地。然后通过Local Mapping来Mock数据。当用户名和密码错误的时候,success的value是false。对应的登录结果也是登录失败,我们把这个Response save到本地的时候,把success 从false改为true。就可以mock登录成功的情况。

charles 安装 ssl_Charles抓包与mock数据(I)
charles 安装 ssl_Charles抓包与mock数据(I)

伍---总结

a. Charles 不仅能用来抓包,而且可以用来Mock数据,能非常方便的提供在API不易满足开发测试需求时,根据自己的需要定制Response内容。 

b. Charles Root证书并不能拿到所有的HTTPS请求的内容, 这时候可以采取通过Frida 等工具抓包SSL。

c. 该方法不光支持Android也支持iOS,可以下载对应的Frida进行抓包尝试。

charles 安装 ssl_Charles抓包与mock数据(I)

点击下方“阅读原文”查看更多精彩内容☺

继续阅读