凌晨两点十七分,爬取频网我盯着Chrome开发者工具里那串加密的某视码m3u8地址,骂了一句脏话。站付这已经是费电第三个需要逆向的JS文件了,而目标网站上的影源《流浪地球2》付费版,正用4K画质在预览窗口里循环播放着预告片。爬取频网
爬虫写多了会形成条件反射。某视码看到付费墙,站付第一反应不是费电充值,而是影源F12。这个视频网站的爬取频网会员体系做得相当粗糙——视频流接口返回的JSON里,居然带着`is_vip:0`这样的某视码明文标记。真正的站付难点在别处:它的播放密钥藏在某个混淆过的WebAssembly模块里,每次会话动态生成。费电
我换了条思路。影源既然前端要播放视频,最终必然拿到可执行的解密逻辑。抓包发现它的`/api/play/token`接口会返回一个24小时有效的临时凭证,而凭证里的`sign`字段是用时间戳加固定盐值做的MD5。这种低级加密,连我隔壁学会计的室友都能用Python还原。
实际动手时踩了个坑。网站对请求头做了指纹校验,单纯用requests库伪造UA会被403。我改用`curl_cffi`模拟浏览器TLS指纹,再配合`playwright`自动执行一次真实登录拿cookie,总算绕过了风控。代码核心就三块:先请求`/login`接口拿JWT,再用JWT换取播放token,最后拿着token去拼`/stream/{ vid}.m3u8`的地址。
解密那段最折腾。视频分片是AES-128加密,密钥藏在`/keys/{ token}.key`里,但这个接口要求请求头带上`Referer`字段,值必须是当前页面URL。我直接在代码里写死了一个`https://www.example.com/movie/123`的Referer,居然就过了。这些网站的防护水平,说难听点,就是给门上了把塑料锁。
最终跑通时,控制台打印出第一个.ts分片的内容长度——187204字节。我用ffmpeg把所有分片合并成完整的MP4,1小时58分的电影,下载耗时4分37秒。整个过程没碰任何付费API,纯粹利用了网站前端逻辑的漏洞:它把解密密钥直接暴露在浏览器环境里,而我的爬虫只是模拟了浏览器行为。
写这种代码的乐趣在于,你永远在跟一群半吊子工程师斗智斗勇。真正严谨的视频平台会做DRM硬件级加密,但国内多数付费网站连JS混淆都懒得做完整。我甚至遇到过某个平台把私钥硬编码在源码注释里,注释写着"TODO: 上线前移除"。
当然,这种爬虫的寿命通常不超过两周。网站一旦更新加密策略,代码就得重写。但没关系,爬虫技术本身就是一场猫鼠游戏,而我享受的是破解时那种肾上腺素飙升的瞬间——就像你明明知道保险箱密码是123456,但还是要亲手转三圈才能确认。
顶: 99踩: 615






评论专区