概述
背景是这样的,有一天运营的同事反馈达达可以抓到我们的订单,简单查看了一下流程,发现达达先会下载一个插件,安装后,会提示信任一个vpn证书,然后就可以获取到我们的订单。
上一次达达商家版通过Android的Accessibility api监听我们应用的布局变化,获取了每个view中的数据,拼接成了他们自己的订单,但是这个api随着napos的升级被堵死了。这次他们换了一个思路,通过建立虚拟vpn的方式充当中间人,攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话。大概理解了这次抓单的思路,我们就开始顺着packet capture的线索开始摸索达达的整个方案。
首先我们查到了packet capture这个软件,
Packet Capture免root抓包安卓版是一款数据包捕获/SSL网络流量嗅探的应用程序。
特点:捕获网络数据包,并记录它们使用中间人技术对SSL解密,无须root权限
这个软件使用了Android提供的VpnService api,实现了中间人攻击,完全符合达达的需求,那么我们就以这个为突破口,下载了最新的达达,发现在打开抓取饿了么和美团的订单的时候,他需要下载http://7xl8yn.dl1.z0.glb.clouddn.com/pkg-new.signed.apk 这个软件,下载反编译之,发现这个软件和packet capture 代码完全一样,但是我们在使用这个软件的时候,发现界面是不一样的,再比对,发现达达在这个软件外面包了一层壳,加了com.dada.provider 这个包。
反复查看这几个类的作用,发现
达达只是通过ContentProvider和intent 来实现了控制vpn开始关闭等功能,而vpn本身的实现完全依赖packet capture这个软件,看到这里我好像明白了什么。达达并没有自己实现高打上了的中间人攻击,他的刀,是别人的刀,那就是packet capture。但是达达是如何从packet capture 中获取数据的尼?要解开这个谜团还需要操开达达的包,哎呦,capture,还有mockhttp,日了明目张胆的出现了Elehttp和HttpDecoders$EleDecoders.java,当然美团也躺枪了。
首先我们找到了设置页面的代码,验证了达达在packet capture中的代码只是为了控制vpn的开关,方便他控制抓单。
通过代码可以清晰的看到,在打开监控饿了么美团的开关之后,达达通过contentProvide来检查socket capture 有没有打开,通过com.dada.walkthrough的start,stop 来开关vpn。
很好,现在我们确定了达达的刷单思路,那下面就开始找他如何从socket capture软件中获取所有请求的数据。很快我们从HttpDecoders$EleDecoders中找到了
很明显这里已经获取到了订单数据,正在解析。那么继续往上找,看什么地方调用了这个方法,顺藤摸瓜,找到了这个a方法,传入的参数是一个File,这让我们联想到达达是从文件中读取的数据,还与napos.order.getProcessedOrders 比对了method。
很快我们又发现了很重要的一个类HttpCaptureTool,这里面在使用contentprovide访问一个数据库,而app.greyshirts.sslcapture.captureprovider 正是packet capture软件的包名。
到了这里,我立马root了手机,查看了packet capture应用data->databases 中的数据库文件,哈哈,果然在这里。
这和达达代码中的查询字段完全吻合
这个数据库是socket capture存储请求的,里面有
capture_time:抓取时间
capture_file_name:文件存放地址(/data/data/app.greyshirts.sslcapture/files/capture-1727863624.dat)
capture_server_ip:ip地址
capture_app_name_main:应用名称
capture_pkg_name_all:应用包名(达达就是通过包名来指定抓竞品的数据的)
接下来没有悬念,files文件夹下面的dat文件就是每个请求的数据包
到此为止,我们已经探明了达达的抓单思路,他通过在packet capture的外面包一层壳来灵活的开关使用packet capture作为中间人截获手机的流量,因为我们的https没有校验证书合法性,所以很轻易的就被解密为明文,然后充分利用packet capture每次抓到请求都存到文件中的特性,去files中查找对应包名的文件,对应的sql语句如下:
- 1
- 2
在没有理清达达这次的刷单思路之前,我们没有想出好的应对方式,现在明白了整个过程,那么就可以兵来将挡,水来土掩。
- 1
- 2
- 3
- 4
- 5
- 6
最后
以上就是微笑萝莉为你收集整理的借助Packet Capture实现无Root抓请求的全部内容,希望文章能够帮你解决借助Packet Capture实现无Root抓请求所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复