Android不信任证书导致无法抓包的解决办法

前言

众所周知,Android7.0以后系统不在信任用户的证书.这一改动使得我们在抓包的时候产生了诸多不便。在Android端很多人的做法是先刷入Magsik在通过Magsik模块的方式来将抓包证书修改成系统证书。
比较出名的就是大名鼎鼎的HttpCanary(小黄鸟),只是它虽然抓包方便,调试起来却没有Fiddler Charles等抓包工具方便。
接下来,我将介绍几种方法能让你像装了Magsik模块的小黄鸟一样方便的抓包,并且方便的调试,希望能对你有所帮助。

1.懒人专用法

Android系统对证书的不信任是从高版本开始的,那直接用低版本的Android系统即可完美解决这一问题。如果你手头没有低版本的安卓真机进行调试,可以尝试用PC端的Android模拟器来解决。诸如夜神(Nox),MuMu等等,绝大多数的模拟器都提供了Android5.0版本等低Android版本的系统。
在使用这些低版本的系统进行抓包时,除了APP使用上可能不如高版本流畅,在抓包这一方面效率绝对是相当的不错。
注意 --> 某些APP由于不支持32位可能无法运行。

2.逆向破解法

此法虽然名字高大上,实际上比较针对于自己写APP进行调试时使用。不过对于一些冷门的小软件或者是没那么注重安全的开发者所作出的产品来说,可能会有奇效。

⑴. 让apk的targetSDKVersion <= 23 即可解决. 碰到做了反编译等保护的很难实现
⑵. 在res/xml目录下添加network_security_config.xml文件,并在application下设置好如下属性:
android:networkSecurityConfig="@xml/network_security_config"
xml文件模板:

<?xml version="1.0" encoding="utf-8"?>  
<network-security-config>
    <!-- 设置允许http明文传输-->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!-- 设置信任系统级别证书-->
            <certificates src="system" />
            <!-- 设置信任用户自定义证书-->
            <certificates src="user" />
        </trust-anchors>
    </base-config> 
</network-security-config>

3.移动证书法

本文的重点方法,通过将证书移动至系统证书目录,来解决不信任证书造成的无法抓包问题。

(1). 导出证书

这里根据你的抓包工具来自行导出,但是你需要注意的是,现阶段的Android有效时间超过两年的证书。所以你导出的来的证书最好有效期不要超过这个时长,以避免不必要的麻烦。
此处以Fiddler为例,我们使用Fiddler的证书制作工具来导出一个证书。

在这里插入图片描述

(2).转换证书格式

使用OpenSSL对cer证书进行格式转换,变为pem格式

openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem

注意自己替换证书路径

在转换成pem格式后查看证书的hash值

openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem

如图所示:
在这里插入图片描述
记住图中圈出来的hash值,这个hash值就是最后转换出来的文件的文件名。
此时我们直接将转换好的pem证书进行重命名即可,如果你想用命令的话,Windows下可以用ren命令

ren FiddlerRoot.pem e5c3944b.0

如果你在Linux操作或者Android中使用终端模拟器的话就用mv命令
最后你将获得一个e5c3944b.0文件

(3).推送证书

将转换好的证书推送到Android的 /system/etc/security 目录下并赋予文件可读权限即可,这个目录就是系统证书的目录。

推送方法1:使用adb进行推送

首先Android端打开adb调试,这里我是用的网络调试,也可以自己接线,如果是模拟器的话,也可以用模拟器的办法连接模拟器的adb。
在这里插入图片描述

PC端使用adb命令连接设备

首先与设备进行配对
adb pair 192.168.2.43:41053
随后连接设备
adb connect 192.168.2.43:37877
最后进入shell环境
adb shell

在这里插入图片描述
注意上面连接设备时输入的ip和端口,是与设备截图中一一对应的。

连接好设备后,来到目标目录

cd /system/etc/security

注意这里的目录权限,是755
在这里插入图片描述
而我们想要往目录中存放文件需要写的权限,此处采用adb临时赋予777权限

chmod 777 cacerts

这里可能会失败,由于我是真机且已经获取了root,所以直接su获取权限给目录加上了777
如果你是带root的模拟器,一般不需要专门su获取权限
在这里插入图片描述
如果碰到提示Read-only file system,可以使用mount -o remount,rw /system,将系统文件夹挂载为可读写。然后再用chmod赋予777权限。
在这里插入图片描述
修改好权限后,输入exit退出shell(如果你su了需要两次exit才能退出)。再用adb命令来推送证书文件

adb push E:\Desktop\e5c3944b.0 /system/etc/security/cacerts

这里的证书文件目录记得自己替换


如果你是模拟器的话,经过上边的操作应该已经推送成功了,不过我这里是真机所以无法直接推送到/system下,所以我这里稍微绕一下,先推送到手机内存中,然后再进入shell转移到cacerts目录下

adb push E:\Desktop\e5c3944b.0 /sdcard/
su
mv /sdcard/e5c3944b.0 /system/etc/security/cacerts

在这里插入图片描述
这里还要检查下你把文件推送过去,一定要给读的权限,不然在已信任的证书中是看不到这个证书的

chmod 666 e5c3944b.0

在这里插入图片描述

同样是真机的话记得推送完文件以后把目录的权限改回755
在这里插入图片描述

推送方法2:Root权限直接转移

既然你已经有了root权限,完全可以通过软件直接在Android端直接进行转移
在这里插入图片描述
图示为使用MT管理器直接将证书移动到系统证书目录中

总结:

不管你用什么办法,只要把证书文件移动到/system/etc/security/cacerts这个目录下,并赋予证书文件可读的权限即可.

4.全局代理法

这个办法我并没有试验过,不过据说雷电模拟器是可行的

adb shell settings put global http_proxy <代理ip>:<代理端口>

参考文章:

https://blog.youkuaiyun.com/qq_43278826/article/details/124291040

<think>好的,用户遇到了Fiddler抓包时手机APP证书安装后仍然被信任的问题。我需要先理清可能的原因,然后逐步分析解决方案。 首先,用户可能已经按照常规流程安装证书,比如通过浏览器下载Fiddler的证书并安装到用户证书区域。但某些Android版本(特别是7.0及以上)要求将证书安装为系统证书,否则应用可能信任用户安装的证书。这需要Root权限,因为系统证书目录是/system/etc/security/cacerts/,普通用户无法直接修改[^1]。用户是否已经尝试过将证书移动到系统证书目录?如果没有,这一步可能是关键。 其次,证书安装的位置是否正确。用户可能在设置中通过“从手机存储安装”选项安装了证书,但默认可能安装到了用户证书而非系统证书区域。需要确认安装路径是否正确,或者是否需要Root来移动证书文件。 另外,证书文件格式是否正确也很重要。Fiddler默认导出的证书可能是.cer格式,而Android系统证书需要特定的文件名和格式,例如需要将证书重命名为特定的哈希值并加上.0后缀。用户是否进行了正确的重命名和权限设置? 还有,部分APP可能使用了证书固定(Certificate Pinning)技术,即使安装了系统证书,这些APP也会检查是否使用特定证书,导致抓包失败。这种情况下,可能需要使用Xposed框架或Magisk模块来绕过证书固定,比如使用JustTrustMe模块。 此外,Android 7.0及以上版本对网络安全配置加强了限制,APP可能只信任系统证书,即使用户证书已安装也行。因此,必须将Fiddler证书作为系统证书安装才能生效[^1][^2]。 总结可能的解决方案步骤: 1. 获取Root权限,将Fiddler证书安装到系统证书目录。 2. 确保证书文件命名和格式正确,权限设置正确。 3. 处理证书固定的情况,使用工具绕过。 4. 检查Android版本,确认是否需要系统级安装。 需要逐步指导用户完成这些步骤,并提醒可能的风险,如Root可能导致设备失去保修。同时,如果用户无法Root,可能需要寻找其他方法,比如使用旧版Android或模拟器。</think>针对Fiddler抓包时手机APP证书安装后仍被信任的问题,以下是分步解决方案: ### 一、强制安装为系统证书(需ROOT) 1. **获取Fiddler证书文件** 在电脑端Fiddler中导出证书:`Tools > Options > HTTPS > Actions > Export Root Certificate to Desktop`,生成`.cer`文件。 2. **转换证书格式并重命名** 将`.cer`转换为`.pem`格式: ```bash openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem ``` 计算哈希值并重命名: ```bash openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem | head -n 1 mv FiddlerRoot.pem <哈希值>.0 # 例如:9a5ba575.0 ``` 3. **推送证书到系统目录** 通过ADB推送至手机(需ROOT): ```bash adb push 9a5ba575.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0 ``` 重启手机后生效[^1]。 ### 二、绕过证书固定(Certificate Pinning) 若APP采用证书固定技术,需配合以下工具: 1. **Magisk模块** 安装`MagiskTrustUserCerts`模块,自动将用户证书挂载到系统目录。 2. **Xposed模块** 使用`JustTrustMe`或`SSLUnpinning`模块,绕过SSL验证。 ### 三、非ROOT替代方案(Android 7.0以下) 1. **直接安装用户证书** 手机访问`http://<电脑IP>:8888`下载证书,通过`设置 > 安全 > 从存储设备安装`完成安装。 2. **修改APP的网络安全配置** 反编译APP并修改`res/xml/network_security_config.xml`,添加: ```xml <certificates src="user" /> ``` ### 四、验证证书状态 1. 使用[SSL Checker](https://play.google.com/store/apps/details?id=com.wstechlab.android.certificates)检查证书是否在系统信任列表。 2. 通过命令查看系统证书: ```bash adb shell ls /system/etc/security/cacerts/ ``` ### 注意事项 - **Android 9+限制**:即使系统证书安装成功,部分APP仍会因`Network Security Configuration`拦截,需结合HOOK工具。 - **证书有效期**:Fiddler证书默认有效期为5年,过期需重新生成。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值