抓取电信营业厅APP的视频资源一例
本帖最后由 伤心的笔 于 2018-11-13 19:44 编辑如图,APP提供了一部电影,首先在图一中点击这个电影的广告,会跳到图二的网页,而视频播放器会直接在图二网页中加载。
那么如何提取出来呢?
首先想到的就是抓包看一下。于是在Android上安装了Packet Capture软件。
Packet Capture软件在第一次启动时会询问是否要抓取HTTPS流量,这样会把自签名证书导入系统,以便让系统的浏览器信任它。导入。
这样,我们可以抓取HTTP和HTTPS了。
打开电信营业厅APP,进入图一,点击这个电影,准备进入图二。
然而这时候发生了意外,图二的网页没有正常的显示出来,显示为白屏。此时Packet Capture软件显示的是抓取到了一个0字节的HTTPS连接。
这就说明,APP在HTTPS握手阶段,额外检查了证书的有效性,换句话说不通过系统的根证书库判断证书是否有效,而是自己内置了根证书库,或者直接将域名对应的证书签发者写死在了APP中。这样,传统的HTTPS中间人攻击方式的抓包方法失效了。
这样的软件是比较棘手的,因为一旦软件手动检查了证书有效性,我们不可能在不干扰软件代码正常运行的前提下获得HTTPS流量的内容。
那么看起来需要用xposed等办法对APP进行魔改了。但是,在此之前……
上网时,浏览器有时候会将部分HTTPS网页的绿锁改为黄锁,并且提示不安全。像这样:
这是因为该网页上引用了HTTP资源,比如图像、JS等。一旦引用了这些文件,HTTPS安全性形同虚设,因为我们可以通过劫持JS的方式来获得对网页的完全控制权。
尤其是……视频资源,因为它占用大量带宽。
那么思路就有了:先关闭抓包(也就是关闭HTTPS的中间人),打开APP到图二的网页,然后在视频加载之前,启动抓包,这样APP会去加载网页内嵌的资源,而这些资源就可以被抓到。
确实如此,用这种思路,抓到了一个几MB大小的包,这个大小很可疑。
看一下:
非常接近。从GET请求的Host以及其他参数中恢复出完整的URL,粘贴到浏览器。
网页返回了一个m3u8文件,也就是一个播放列表。胜利在望!
猜测这些ts文件与m38u文件在同一目录下,因此在URL里把m3u8文件名替换为ts的文件名,粘贴到浏览器地址栏。
返回了一个几MB的ts文件。而且可以播放。
ts文件最大的特点是“流媒体”,也就是文件可以被任意地切割和拼接(当然,切的位置如果不好会影响一小段视频的播放,这不在本帖的讨论范围内)。
因此,只需要将m3u8文件指示的所有ts文件的二进制数据直接拼在一起,完整的电影就恢复出来了。也就是copy /b大法。
常见的m3u8下载器无法批量下载这些ts文件,无妨,已经不重要了。到了这个地步,自己写个脚本for循环一下就够了。
由于APP提供的视频只有720P,码率也很一般,没什么下载价值,最后一步我就不编程实现了,脑子里过一遍,权当做完了。
思路就是这些,总结一下:
1. 抓包获取网页资源。Android上可使用Packet Capture软件。
2. HTTPS抓包可通过中间人攻击实现。
3. 软件如果额外检查了HTTPS的证书,则无解,单纯的抓包是不可能实现的。这种情况必须要修改软件本身。
4. HTTPS网页有可能加载了HTTP资源,这是一个很大的突破口。
5. 必要的时候编程实现一些批量操作。
随风丶而逝 发表于 2018-11-14 13:57
@伤心的笔 你是如何从/6/ol/st02这段url中获取到完整的域名的?
GET请求里有写Host: vod3.nty.tv189.cn,
所以URL就是http://vod3.nty.tv189.cn/6/ol/st02...后面的略 wanggggg1 发表于 2018-11-14 22:19
请问有时效性的直播源可以提取吗?http://www.0515yc.cn/tvlook/folder76/,据说可以通过PHP实现啊?
或许可以,看情况
但是和PHP有什么关系? 学习了 ... 非常直观的思路和解析 感谢分享 本人小白,看了略懂一二了!感谢分享! 666学习了:lol 感谢分享!:handshake 感谢分享。。。 牛呀,谢谢分享! 受教学习了。。 感谢楼主分享