某学姐

Android Female Developer, Technology Fan, Reader.

Charles抓包工具安装和破解

2020-05-16 | Comments

1.下载和安装

参考文档:
https://www.charlesproxy.com/download/

命令行安装:
(1) 安装GPG公钥
wget -q -O - https://www.charlesproxy.com/packages/apt/PublicKey | sudo apt-key add
(2) 添加charles仓库到源列表sources.list
sudo sh -c 'echo deb https://www.charlesproxy.com/packages/apt/ charles-proxy main > /etc/apt/sources.list.d/charles.list'
(3)升级源列表sources, 安装charles
sudo apt-get update
sudo apt-get install charles-proxy

2.破解

破解网址:
https://www.zzzmode.com/mytools/charles/

(1) 从以上网址获取破解的charles.jar文件
(2) Charles安装目录下的charles.jar文件替换成破解的charles.jar

安装目录:
macOS: /Applications/Charles.app/Contents/Java/charles.jar
Windows: C:\Program Files\Charles\lib\charles.jar
Ubuntu/usr/lib/charles-proxy/charles.jar

Ubuntu下文件替换:
sudo cp charles.jar /usr/lib/charles-proxy

Ubuntu cp命令
https://blog.csdn.net/lianchao668/article/details/8097113

3.HTTP & HTTPS抓包

3.1 HTTP抓包

proxy-setting

手机连接xx.xx.xx.xx:8889代理后,即可抓取HTTP的包

3.2 HTTPS抓包(Android 7.0以下)

ssl-proxy-setting

此时还不能抓HTTPS的包, 需要安装证书.

3.2.1 下载和安装SSL证书

(1) 手机连接charles代理
(2) 手机下载证书
Charles → Help → SSL Proxying → Install Charles Root Certificate on a Mobile Device or Remote Browser
此时会弹出一个提示窗
local-ip

在手机QQ浏览器输入chls.pro/ssl,下载charles-proxy-ssl-proxying-certificate.pem证书
(3) 安装证书
设置 -> 密码、隐私与安全 -> 系统安全 -> 加密与凭据 -> 从SD卡安装 → 选择下载的pem证书

证书安装完后, 就可以抓取HTTPS的包了(仅对于Android 7.0以下设备)

4 HTTPS抓包(Android 7.0及以上)

对于Android 7.0及以上的设备HTTPS抓包, 除以上步骤外, 还要额外做一些处理.
主要有2种方式:
(1) ROOT方式
(2) 非ROOT方式

4.1 ROOT方式抓包

4.1.1 手机ROOT

以小米手机为例. 其他三方机型找官方文档步骤类似.

(1) 手机解锁(只能Windows平台)

参考:
http://www.miui.com/unlock/download.html

1.进入“设置 -> 开发者选项 -> 设备解锁状态”中绑定账号和设备
2.手动进入Bootloader模式(关机后,同时按住开机键和音量下键)
3.下载解锁工具,解压zip包,运行miflash_unlock.exe
4.通过USB连接手机,点击 “解锁”按钮

(2) 下载线刷包

根据机型查找名称:
设备打包信息 → 当前打包分支信息, 机型Redmi Note 8对应的名称为ginkgo

下载线刷包:
下载包 → 线刷包,选择Dev&Alpha和Root,查找ginkgo对应的包,Rom Type选Root, 下载得到线刷包

(3) 执行刷机脚本

线刷包解压后得到如下脚本文件:
flash_all.bat / flash_all.sh (刷所有文件,清除用户数据,清除内置存储数据)
flash_all_except_data_storage.bat / flash_all_except_data_storage.sh (刷升级文件,保留用户数据和内置存储数据)
flash_all_except_storage.bat / flash_all_except_storage.sh (刷升级文件,清除用户数据,保留内置存储数据)

Windows环境运行bat脚本, Ubuntu环境运行sh脚本

手机进入fastboot模式(关机后长按开机+音量下键), 运行./flash_all.sh直到运行完成, 一般会很快.

至此, 手机ROOT完成, 在设置中可以看到版本信息为开发版.

4.1.2 系统证书目录安装SSL证书

前面步骤已经介绍了SSL下载和安装过程.

接下来需要额外做的就是将SSL证书安装到系统证书目录.

(1) 将charles-proxy-ssl-proxying-certificate.pem证书文件上传pull到电脑端.
(2) 运行命令openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem, 生成md5(第一行数字即为md5)
(3) 将pem证书文件更名为< md5>.0
(4) 将更名后的文件push到手机目录: sudo adb push < md5>.0 /system/etc/security/cacert

如果出现权限或只读问题,则执行adb root命令:

adb root
adb disable-verity
adb reboot
adb root
adb remount

检查证书是否安装成功:在 设置 → 安全 → 加密与凭据 → 信任的凭据 可以看到.

至此Android 7.0及以上的设备都可以抓取所有APP的HTTPS请求了.

4.2 非ROOT方式抓包

这种方式只能抓取当前APP的HTTPS请求.

(1) 在AndroidManifest.xml文件中配置android:networkSecurityConfig属性

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config" ... >
    ...
    </application>
</manifest>

(2) 创建并配置res/xml/network_security_config.xml文件

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" /> <!--信任系统证书-->
            <certificates src="user" overridePins="true" /> <!--信任用户证书-->
        </trust-anchors>
    </base-config>
</network-security-config>

然后重新打包安装抓包就可以了.

本文原文发自 某学姐, 转载请保留出处, 谢谢.

Comments