APP抓包方法及问题解决2

上文中说了透明代理实现APP抓包的方法 ,来实现用代理方式进行抓包。实际操作过程中发现尽管设置了透明代理,还是有一些app无法正常抓包,具体表现为app显示如:java.security.cert.CertPath Validator Exception:Trust anchor for certification path not found,这种类似的提示。下面来分析下此类问题的处理方法。

要先了解下证书校验原理

无论Fiddler 或 Charles都使用中间人攻击的方式替换tls链路证书,解密报文然后再加密发送给真实服务器。

详细理论不讨论,简单了解下:Client校验证书的核心是CA公钥解密原始指纹,CA公钥从哪里来,为了确保安全设备系统会有一批自己信任的CA公钥列表(根证书)。这些CA公钥对应的一般是权威机构或组织,然后由这些权威机构颁发证书时会使用他们自己的私钥去签名(为证书生成指纹)。这样就确保只有权威机构颁发给各个网站的证书才会被客户端校验通过。

Filddler没有这些证书里公钥对应的私钥(CA只会把为完整颁发的证书对应的私钥给网站的所有者),所以没有办法与客户端完成TLS握手。Filddler为了完成握手只能自己为不同的站点生成证书,自己的生成的证书肯定是用自己的私钥签名的,客户端在自己信任的CA公钥列表找不到对应根证书,肯定是不能通过证书校验的。所以Filddler要求我们安装他的根证书到设备,这样自己签发的证书就可以通过证书校验,自己就能解密https报文了。

这里有个小问题,从Android7.0以后,系统允许每个应用可以定义自己的可信CA集。有部分应用默认只会信任系统预装的CA证书,而不会信任用户安装的CA证书(或者说是应用使用的开发框架默认只信任系统证书,因为开发者通常不关心这些配置,也不会去更改他)。而在Android中用户安装的证书都是用户证书,所以无论是Filddler还是Charles我们都只是把他们的根证书安装到了用户证书,这些应用并不使用他们,所以我们的安装的证书是无效的。

如何解决呢?

我们只要把代理软件的根证书安装成系统证书就可以了。将证书安装到系统区用指定的名称放到指定的位置(/system/etc/security/cacerts/)就可以了。由于我手头就一个平时用的手机也不想瞎折腾嘿嘿,这里我以逍遥模拟器为例演示安装证书到系统中去并用fiddler抓包的详细方法:

1.首先我们导出Fiddler的证书文件FiddlerRoot.cer到桌面。导出方法就不说了太简单。

2.下载OpenSSL利用OpenSSL计算证书文件的hash值,openssl可以自行从网上下载,或者:Win64OpenSSL-1_1_1i 提取码:khdd,这里提供的是windows 版的exe工具,linux自带openssl工具。也可以把证书文件传到linux机上用命令计算下hash值。

cmd窗口中输入openssl, 如安装后提示无此命令就直接到安装目录中去运行。

出现openssl> 输入命令:

x509 -subject_hash_old -in C:\Users\user\Desktop\FiddlerRoot.cer

有可能会报错:

unable to load certificate
16828:error:0909006C:PEM routines:get_name:no start line:crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

可尝试将代码修改为:

x509 -subject_hash_old -in C:\Users\user\Desktop\FiddlerRoot.cer -inform der

根据自已的证书文件路径修改下命令,正常会出现如下,红框就是hash值:

将根证书名称改为 Certificate_Hash.Number。Certificate_Hash表示证书文件的hash值,Number是为了防止证书文件的hash值一致而增加的后缀(用0就行了),根据hash将证书重命名为 e5c3944b.0(改成自已的值,不要跟这一样)

3.将e5c3944b.0文件复制到/system/etc/security/cacerts/

前置条件需要先将逍遥模拟器root打开,调试好正常能链接网络,把代理服务器设置好,这些基础操作不讲,重点说下如何把证书文件放到系统证书下。

打开cmd,进入到逍遥模拟器的安装目录,运行:

adb devices

出现List of devices attached
127.0.0.1:21503 device 这种就是正常的。接下来确认下是否有root权限

adb root

这时正常显示:adbd is already running as root,接下来将/system部分置于可写入模式

adb remount

正常显示:remount succeeded,接下来把e5c3944b.0文件copy到当前目录,运行:

adb push 9a5ba575.0 /system/etc/security/cacerts/

进入模拟器查看系统证书是否安装:

到这一步,正常的话,就已经可以抓到app的包了。

原文链接:http://www.itawp.com/277.html,转载请注明出处。

0

评论0

没有账号? 注册  忘记密码?