拿到题目,给了.saz
和.wacz
的网络数据包存档,那肯定是选择.saz
啦,毕竟君Fiddler
本当上手。
导入一看,很明显是需要把这个m3u8
视频给解出来,而/api/drm/
这个drm
命名一看就是key,所以思路就多起来了:
- 如果是标准
m3u8
加密算法,那么Fiddler
开个自动回复然后N_m3u8DL_CLI
一把梭。 - 如果是写在
js
里的加密算法,那么Fiddler
开个自动回复然后尝试播放。
但是思路一很快就被否决了,因为我看了下key
是32字节的,但是标准算法是16字节的。
所以那就按思路二来吧。
由于数据包是https
的,但是域名本身并不存在SSL证书,所以即使开了自动回复也不能正常访问,那么咱给数据包全选然后拉到自动回复里,右键导出所有
,存起来然后把里面的https://52tube.mmxxii/
全给替换成https://www.baidu.com/
这种实际存在SSL证书的域名,任何导入回去就行。
开启自动回复,浏览器直接访问https://www.baidu.com
,尝试播放发现报错。
于是猜测可能跟上面那个/api/drm/
数据包有关系,因为那个数据包有一个h
参数,但是似乎是随机生成的,我尝试访问产生的值和存档里并不一样。
那么就去控制台断点看看吧,看一下这个数据包的调用堆栈,从后往前依次看过去,找找哪个是提交参数的地方。
结果很明显,调用堆栈顶部的那个就是。
在h
参数那边下个断点,看看e
变量处理前后是啥关系。
很明显,就是把数据转成十六进制字符串而已,那么追前面去看看e
的数据源头在哪,尝试改成存档里的应该就行。
e
果然就是个随机生成的,而且e
就是源头,那就不怕没改全面漏掉其他地方了,直接写个js
给e
赋值就行。
let i=0;
e[i++]=0x7b;
e[i++]=0x10;
e[i++]=0x31;
e[i++]=0x1e;
e[i++]=0x6e;
e[i++]=0x31;
e[i++]=0x0f;
e[i++]=0x0d;
e[i++]=0xf0;
e[i++]=0x68;
e[i++]=0xd9;
e[i++]=0xed;
e[i++]=0xe1;
e[i++]=0x04;
e[i++]=0x75;
e[i++]=0xa8;
视频成功加载,在00:12
成功拿到flag。
flag{like_sub_52tube}