无感知抓包有什么用?
要分析app的流量需要需要进行抓包,常用的抓包方式就是给手机设置一个代理将流量导到抓包软件。这里给手机设置代理,不管是使用wifi代理还是VPN代理都可以被检测到。
有没有不会被检测到的方式呢?有的。
分享几种app无感知的抓包方式,前2种除了ssl pinning,app无法检测
一、 手机只管连上wifi,让wifi帮我把流量导到抓包软件上去
这个实现方式不止一种的,我介绍我在用的这种来阐述这个思路
1.准备2台手机,1台用于开启热点,1台是我们要抓包的手机
2. 开启热点
手机要求:要root、要能连着wifi的同时能开启热点、安装软件“vpn热点”、安装postern
这个热点的作用是为了把连这个热点的手机的流量导到抓包软件上去,先用postern设置抓包软件为我们这台手机的vpn代理,然后开启vpn热点,将vpn作为热点共享出去。
3.手机连上热点
手机要求:安装抓包软件的证书
连上上台手机的热点,这时手机的流量就会通过热点流到抓包软件上去,我们这时候就可以在抓包软件上看到连了热点的手机的流量了,当然也包括https的流量。
特点:开启几个应用就可以抓包,很方便,需要2台手机
二、在网上看到的一个方案,安卓上基于透明代理对特定APP抓包
Android系统在用户安装好某个APP后,就会给这个APP分配一个设备内唯一的user id,这个user id的生存周期是从APP成功安装开始到APP被用户卸载结束。APP的包名和它的user id直接的映射关系可以在系统的/data/system/packages.xml文件得到,这个文件内容类似于如下,里面就有package name和userId的映射关系。
安卓查看应用的userId:
cat /data/system/packages.xml | grep userId | grep com.qiyi.video
iptables -t nat -A OUTPUT -p tcp ! -d 127.0.0.1 -m owner --uid-owner 10332 --dport 0:65535 -j DNAT --to-destination 127.0.0.1:16666
修改 redsocks.conf
su
/data/local/tmp/redsocks2_arm64
特点:一台手机就行,步骤比较多
三、r0capture
特点:无视ssl pinning!开箱即用。
四、得到https的会话密钥解密通信内容
使用tcpdump抓取网络流量再通过wireshark进行分析,这种方式也是app无感知的,但是无法查看https的流量,因为https通信是加密的,所以不能直接查看或分析https传输的明文内容。https通信是客户端和服务端通过非对称加密协商出一个用于对程加密的密钥而后使用这个密钥进行对称加密的通信,如果我们能通过hook的方式得到这个密钥,是不是我们就可以解密出明文内容了呢?
手机在我们手上了,要得到密钥肯定是可以做到的,但如何得到这个密钥,我对https的通信还需要有更深刻的理解,,,
进一步说,可以得到密钥,不同tcp连接的https使用不同的密钥,要自动实现记录密钥组成一个文件(Pre-)Master-Secret log filename给wireshark分析,工作量也不小。。。
再进一步说,我们还要对不同的SSL/TLS 库进行兼容处理。
Android 应用程序可能使用不同 SSL/TLS 库:系统提供的 javax.net.ssl 库、OpenSSL 或 BoringSSL、其他 SSL/TLS 库、app自定义的SSL/TLS 库