站点图标 Wankko Ree's Blog

【2022春节】52破解解题领红包之番外篇 WriteUp

拿到题目,给了.saz.wacz的网络数据包存档,那肯定是选择.saz啦,毕竟君Fiddler本当上手。

导入一看,很明显是需要把这个m3u8视频给解出来,而/api/drm/这个drm命名一看就是key,所以思路就多起来了:

  1. 如果是标准m3u8加密算法,那么Fiddler开个自动回复然后N_m3u8DL_CLI一把梭。
  2. 如果是写在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就是源头,那就不怕没改全面漏掉其他地方了,直接写个jse赋值就行。

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}


The End
退出移动版