MiuiVpnsdkManager,这个是什么啊怎么这么耗电啊

转载至/lulianqi/p///SuppSandroB/sandrop/wiki/Drony-FAQ)drony会在你的手机上创建┅个VPN,将手机上的所有流量都重定向到drony自身(不是流向vpn服务器) 这样drony就可以管理所有手机上的网络流量,甚至可以对手机上不同APP的流量進行单独配置

您可以在网络上搜索drony选择自己想要的版本进行安装,或者在这里下载(

2.开启代理抓包软件(这里代理抓包软件使用的是Fiddler)

3.2在网络列表中选择点击当前手机wifi连接的网络 (需要确保该网络与Fiddler代理服务器网络是联通的)

3.3配置要为当前网络使用的代理入口(这里直接填写fiddler代理地址就可以),选择代理模式为手动(Manual)

默认您的规则里应该是空的,这里直接点击上面的加号添加一个规则(符合规则要求的才会被转发)
说明一下后面嘚操作会以咸鱼或支付宝做演示说明不过笔者当前测试项目并不是咸鱼或支付宝,也不是其公司的员工选择这2个APP做演示是因为这些APP比較常用,且无法抓包的原因与笔者当前项目APP是类似的

Hostname 及 Port 不填 表示所有的都会被强制代理,因为APP可能会使用其他的网络协议不一定都是http鈳能不希望把所有流量都引流到http代理服务器,这个时候就会使用这个配置指定ip及端口才转发
完成后保存即可然后返回到SETTING主页,滑动到LOG页点击下面按钮,使其处于ON的状态(表示启用)

这个时候启动支付宝或咸鱼我们就可以在Fiddler上看到正常的流量。不过如果你的运气与笔者┅样可能只能看到这些Tunnel to (TLS管道建立)如果您使用的是Charles在列表里看到的可能是一个个红叉。

当然笔者Fiddler根证书是安装成功的Fiddler配置也是正确嘚(手机上的Chrome https抓包都是正常的)
既然流量已经到Fiddler了,Drony的工作算是完美完成了之所部分APP以不能解密https报文,还是我们自己证书的问题首先先简单描述下证书校验的过程(如果不想看这些过程可以直接看后面操作步骤)

无论Fiddler 或 Charles都使用中间人攻击的方式替换tls链路证書,解密报文然后再加密发送给真实服务器
您可以参看 HTTPS中间人攻击实践(原理·实践)了解中间人攻击的细节

存在代理的情况下客户端艏先连接的是代理服务器(即是图中的攻击者),实际client是直接与Proxy建立的TLS通道所以代理当然TLS通道的传输密钥然后解密报文。

不过由于证书嘚存在client会校验证书的合法性,然后决定是否连接服务器我们使用Fiddler或Charles抓取https前在设备中安装根证书正是为了通过client的证书校验。

在浏览器中任意找一个https的网页查看其证书信息。

从这里面我们能看到证书包含以下内容:
(1) Validity也即有效期有效期包含生效时间和失效时间,是一个时間区间;
(3) 指纹信息指纹用于验证证书的完整性,也是证书校验的关键他保证书没有被修改过。 其原理就是在发布证书时发布者根据指纹算法(此处证书使用了SHA-1和SHA-256算法 有多个指纹是为了兼容老的客户端)计算整个证书的hash指纹【证书内容hash值使用CA私钥加密就是指纹】并和证书放茬一起,client在打开证书时自己也根据指纹算法计算一下证书的hash值,同时使用自己信任的根证书的公钥解密hash指纹计算出原始hash如果hash值不一致,则表明证书内容被篡改过;
(6) 该证书是签发给哪个组织/公司信息Subject;

上图即是证书指纹校验的过程可能看到Client校验证书的核心其实是CA公钥解密原始指纹,CA公钥从哪里来为了确保安全设备系统会有一批自己信任的CA公钥列表(根证书)。这些CA公钥对应的一般是权威机构或组织嘫后由这些权威机构颁发证书时会使用他们自己的私钥去签名(为证书生成指纹)。这样就确保了只有权威机构颁发给各个网站的证书才會被客户端校验通过

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

其实通过上面的描述也很明白了不能正常建立连接解密https报文的原因就是证书校验失败我们的根证書安装不够完全。
从Android7.0以后系统允许每个应用可以定义自己的可信CA集。有部分应用默认只会信任系统预装的CA证书而不会信任用户安装的CA證书(或者说是应用使用的开发框架默认只信任系统证书,因为开发者通常不关心这些配置也不会去更改他)。而在Android中用户安装的证书嘟是用户证书所以无论是Filddler还是Charles我们都只是把他们的根证书安装到了用户证书,这些应用并不使用他们所以我们的安装的证书是无效的。

完成后我们就可以看到代理软件的证书出现在系统区了

也就是说复制证书到该目录需要您root自己的设备。
关于Android手机嘚root通常手机厂家都会有自己官方的教程,建议大家按官方的操作进行root
当前小米手机的root需要手机绑定小米账号7天以上才能解锁解锁后刷叺开发版即可完成root
需要注意的是不是所有小米的手机都有对应的开发版的,所以购买测试设备时留意下( 这里可以看下自己的手机有没囿开发版可以使用)

现在证书也被安装到了系统区,再回到Fiddler看下效果

再次打开闲鱼我们已经可以看到完整的https请求了

下面我们找个请求修改一下请求返回数据看下效果

借助Fiddler插件FreeHttp修改这个请求的返回数据将二手手机修改为二手马总并将图片也替换掉

(FreeHttp的具体使用请参考借助FreeHttp任意篡改http报文 (使用·实现))

再次打开闲鱼,可以看到经过代理的数据已经被篡改了(注意测试时清除咸鱼的缓存及应用数据以保證每次打开APP都会请求firstdata)

经过上面到配置,这些APP的HTTP流量我们就可以通过代理抓包软件获取https流量也可能正常解码。

ios(iphone)同样使用上面提到第3種方法(原理与android是一致的)同样需要使用到VPN,在ios也有许多与drony功能类似的软件大家可以自己选择自己喜欢的使用,笔者这里使用的是Shadowrocket

如仩图您可以直接在App Store找到这些软件(受限于大陆相关规定您的App Store的区域如果在国内可能无法搜索到这些软件,您需要使用美区的账号)

为了唍成流量重新定向Shadowrocket与drony一样会先在设备上创建本地VPN服务,再使用您设置的规则处理流量

不过Shadowrocket的使用会更加方便,直接打开软件如下图配置即可

1.选择全局路由为「代理」
2.添加服务节点(类型选择HTTP及HTTPS 服务器地址及端口为您代理抓包工具的地址与端口)
3.设置状态为启用 (IOS会同時自动创建VPN)

现在直接打开iphone上的任意APP(不用再再wifi上重复设置代理) ,既可以在代理抓包工具上看到流量了同样不能解析HTTPS的流量,不过IOS并沒有像新版的android一样可以让APP拒绝用户手动信任的用户根证书所以IOS证书安装IOS也比android任意的多,并没有这么多额外的操作按正常证书安装流程操作即可。证书安装完成后即可查看HTTPS流量

我要回帖

 

随机推荐