Android 第三方app https 抓包

本文指导如何在高版本Android上配置Charles/Fiddler,处理SSL问题,以及解密、打包和签名APK的过程。

工具选择

Charles 或 Fiddler 都可以

在PC上安装工具并进行设置

Charles
Fiddler
设置按官网说明设置一下好。
Charles设置
Fiddler设置

Android Api Level >= 24 SSL特殊设置

当Android 的 Api Level > 24时需要修改一下app的一起配置

1.在项目中添加 Android/src/main/res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
        <!-- Trust preinstalled CAs -->
        <certificates src="system" />
        <!-- HERE: Additionally trus user-added CAs -->
        <certificates src="user"/>
    </trust-anchors>
    </base-config>
</network-security-config>

2.在AndroidManifest.xml中的application中添加networkSecurityConfig属性

android:networkSecurityConfig="@xml/network_security_config"

结果如下:

<application
    android:name="com.tns.NativeScriptApplication"
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:networkSecurityConfig="@xml/network_security_config">
    ...

问题

我是想要查看别人的apk包,要怎么添加上面提到的配置呢?

方案

1. apktool 解包
apktool d xxx.apk -o xxx_folder
2. 修改及添加相关xml配置
3. apktool 打包
apktool b xxx_folder -o xxx_tmp.apk
4. 使用zipalign将apk包4字节对齐
zipalign -p -f -v 4 xxx_tmp.apk xxx_final.apk
5. 签名

不签名的apk是无法安装的, 使用自己的key签名

apksigner sign --ks <your_keystore> --ks-key-alias <your_key_alias> --out xxx_final_sign.apk xxx_final.apk

xxx_final_sign.apk 即为修改后的最终文件。

<think> 我们正在讨论APPHTTPS抓包解密方法。根据引用内容,我们可以总结出以下几个关键点: 1. 客户端证书绑定(SSL Pinning)使得抓包工具无法直接解密HTTPS流量(引用[1])。 2. 由于HTTPS的会话密钥是临时协商的,中间人攻击(MITM)无法直接获取对称密钥(引用[2])。 3. 需要借助一些工具和技术来绕过这些限制,例如: - 使用JustTrustMe等工具绕过SSL Pinning(引用[1])。 - 使用mitmproxy进行二次开发以支持多种解密方式(引用[3])。 - 使用Frida进行Hook,修改APP的加密函数,实现解密(引用[4])。 因此,我们可以将APPHTTPS抓包解密方法归纳为以下步骤: ### 一、准备工作 1. **配置抓包环境**: - 安装抓包工具(如Charles、Fiddler、mitmproxy)并配置HTTP/HTTPS代理。 - 在手机上安装抓包工具的CA证书,并信任该证书(注意:Android 7.0以上需要将证书安装到系统信任区,否则可能不被信任)。 2. **解决SSL Pinning**: - 使用工具如JustTrustMe(Xposed模块)或Frida脚本绕过SSL Pinning。这些工具可以阻止APP验证服务器的证书,从而使抓包工具能够拦截HTTPS流量。 - 对于未Root的设备,可以考虑使用虚拟环境(如VirtualXposed)或重新打包APP(去除证书验证)。 ### 二、解密HTTPS流量 根据引用[2]和[3],我们可以知道,仅仅配置代理和CA证书可能不足以解密HTTPS流量,因为: - HTTPS的对称密钥是每次会话临时协商的,且被服务器的公钥加密,因此无法直接从网络流量中获取。 - 抓包工具(如Charles、mitmproxy)实际上是通过中间人攻击(MITM)的方式,即模拟服务器与客户端通信,同时模拟客户端与服务器通信,从而能够解密流量。但这就要求客户端信任抓包工具的CA证书(即第一步中安装的证书)。 然而,如果APP使用了自定义的证书验证(SSL Pinning),则上述方法失效,需要先绕过SSL Pinning(如第一步所述)。 ### 三、处理自定义加密 有些APPHTTPS的基础上还额外对请求和响应体进行了加密(如AES、RSA等)。此时,即使HTTPS被解密,我们看到的仍然是加密后的内容。针对这种情况,我们可以: - 使用Frida等工具Hook加密/解密函数,获取明文(引用[4])。 - 反编译APP(使用Jadx、JEB等工具)分析加密算法,然后模拟加密过程构造请求。 ### 四、具体步骤 下面以使用mitmproxy和Frida为例,给出详细步骤: #### 步骤1:配置mitmproxy 1. 安装mitmproxy:`pip install mitmproxy` 2. 启动mitmproxy:`mitmproxy` 3. 配置手机代理,指向运行mitmproxy的电脑的IP和端口(默认为8080)。 4. 在手机浏览器访问`mitm.it`,下载并安装CA证书。 #### 步骤2:绕过SSL Pinning 使用Frida脚本绕过SSL Pinning: 1. 在电脑上安装Frida:`pip install frida-tools` 2. 下载一个通用的SSL Pinning绕过脚本,如`frida-multiple-unpinning`(https://github.com/m0bilesecurity/frida-multiple-unpinning)。 3. 将脚本保存为`unpinning.js`,然后运行: ```bash frida -U -f com.example.app -l unpinning.js ``` 其中`com.example.app`为目标APP的包名。 #### 步骤3:使用mitmproxy捕获流量 此时,mitmproxy应该能够捕获到APPHTTPS流量,并显示明文。如果APP有自定义加密,则捕获到的请求/响应体可能是加密的。 #### 步骤4:处理自定义加密(如果需要) 1. 使用Frida Hook加密/解密函数,将输入输出打印出来(如引用[4]所示)。 2. 修改Frida脚本,将加密前的请求体或解密后的响应体打印出来,或者直接修改请求/响应。 ```javascript Java.perform(function() { var DecryptUtils = Java.use("com.example.utils.DecryptUtils"); DecryptUtils.decrypt.implementation = function(encrypted) { console.log("Encrypted data: " + encrypted); var result = this.decrypt(encrypted); console.log("Decrypted data: " + result); return result; }; }); ``` 运行该脚本后,Frida会输出解密后的数据。 ### 五、注意事项 - **法律合规性**:抓包仅用于合法目的,如安全测试或调试,不得用于非法用途。 - **复杂加密**:有些APP可能使用白盒加密或强混淆,使得逆向难度极大,此时需要更深入的分析。 ### 六、相关问题 §§相关问题§§ 1. 如何绕过APP的SSL Pinning? 2. 如何使用Frida对APP进行Hook? 3. 如何处理APP自定义的加密请求? </think> ### APPHTTPS抓包解密方法详解 APPHTTPS抓包解密需要突破**双向加密验证**和**动态密钥机制**,以下是完整操作流程: --- ### 一、核心原理 HTTPS抓包本质是**中间人攻击(MITM)**,需解决两个关键问题: 1. **证书绑定(SSL Pinning)** APP内置服务器证书指纹验证,拒绝第三方证书[^1] 2. **动态密钥协商** 每次会话生成临时对称密钥,无法直接获取传输层密钥[^2] --- ### 二、操作步骤 #### ▶ 阶段1:基础抓包环境搭建 ```mermaid graph TD A[安装抓包工具] --> B[Charles/mitmproxy] B --> C[配置代理端口] C --> D[手机安装CA证书] D --> E[配置手机网络代理] ``` 1. **工具选择**: - Charles/Fiddler:图形化操作友好 - mitmproxy:支持Python二次开发[^3] - Wireshark:底层协议分析 2. **证书安装**: - Android 7+需将CA证书放入系统证书目录: ```bash adb push charles.pem /system/etc/security/cacerts ``` - iOS需通过描述文件信任证书 #### ▶ 阶段2:突破证书绑定(SSL Pinning) | 方法 | 适用场景 | 工具 | |---------------------|--------------------------|--------------------------| | Frida动态Hook | 主流APP | Objection + Frida脚本[^4] | | Xposed框架模块 | Root设备 | JustTrustMe[^1] | | 逆向修改APK | 无Root设备 | Apktool + Jadx | **Frida脚本示例**(绕过证书验证): ```javascript Java.perform(() => { const X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); X509TrustManager.checkServerTrusted.implementation = function() { console.log("[+] Bypassing SSL verification"); }; }); ``` 执行:`frida -U -f com.target.app -l ssl_bypass.js` #### ▶ 阶段3:处理自定义加密 当APPHTTPS基础上叠加加密时: 1. **定位加密函数**: ```bash jadx -d output target.apk # 反编译APK grep -r "encryptData" output/ # 搜索加密方法 ``` 2. **Hook解密过程**(Frida示例): ```javascript Java.perform(() => { const CryptoUtil = Java.use('com.app.util.Crypto'); CryptoUtil.decrypt.implementation = function(data) { console.log(`原始密文: ${data}`); const plain = this.decrypt(data); console.log(`解密结果: ${plain}`); return plain; }); }); ``` #### ▶ 阶段4:流量解析(mitmproxy示例) ```python from mitmproxy import http def response(flow: http.HTTPFlow): if "api.target.com" in flow.request.url: raw = flow.response.content.decode('utf-8') decrypted = custom_decrypt(raw) # 调用自定义解密 print(f"解密响应: {decrypted}") # 启动:mitmproxy -s decrypt_script.py ``` --- ### 三、常见问题解决方案 | 问题现象 | 解决方案 | |---------------------------|-----------------------------------| | 抓包工具显示`TLS handshake failed` | 检查SSL Pinning是否绕过成功 | | 看到乱码数据 | Hook应用层加解密函数 | | 频繁断连 | 关闭APP的证书吊销检查(OCSP Stapling) | | 抓包APP闪退 | 检测反调试机制,使用Frida Anti Anti-debug | --- ### 四、进阶技巧 1. **自动化解密**: - 使用mitmproxy的[addon API](https://docs.mitmproxy.org/stable/addons-api/)实现实时解密 - 结合FRIDA实现动态密钥提取 2. **协议逆向**: - 对Protobuf/Thrift等二进制协议:使用`protoc --decode_raw`解析 - 对自定义压缩:Hook`GzipInputStream`等Java类 --- ### 五、注意事项 1. **法律边界**: - 仅用于安全测试或授权分析 - 避免抓取用户隐私数据 2. **技术限制**: - HTTPS双向认证(客户端证书)需额外处理 - 强混淆APP(如银行类)可能需要动态调试 > 提示:优先选择官方开放API,抓包应是最后手段[^1][^2]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值