前文
最近做了一个小项目,做个批量提取 某音/某手/某书/视频号/头条 等平台的无水印视频、逐帧转换成图片的软件。
抖音可以直接抓官方接口,但是要求登录拿到Cookie,比较稳定,就不多说了直接用。
视频号无解,微信PC加密搞不定,直接拿GitHub上的成品先下载出来视频再保存到指定路径一键读取。
头条也有官方接口而且不用登陆,属于是非常良心了。
快手/小红书,你们的前端加密搞得真的牛批,搞不了一点。浏览器模拟成本太高,直接拿网上的解析工具对接。
这个解析平台接口有一个很简单的JS加密,几分钟搞定。但是他每天限制30次,客户又需要大批量的下载视频,所以不能用他了……
r是随机字符 e是md5(URL+@&^+r),属于是非常基础的验签了。
搞小程序
客户发了一个解析助手小程序,可以提取很多短视频平台的链接,又不限制次数不用登录,于是决定抓他的接口。
方法1-抓包!
- 使用 Proxifier 转发 Wechatappex.exe 的流量到 Fiddler 监听的 8888 端口,失败(只能看到Host)!
- 改用 Wireshark、Burp Suite,失败(全是只能看到Host 连URI都看不到)!
- iOS端设置Proxy,用Fiddler、Wireshark、Burp Suite,均失败!
方法2-反编译拿到源码
使用Github上的项目 https://github.com/system-cpu/wxappUnpacker 可以反编译小程序包文件,阅读源码 里面肯定有请求信息!
第一步,安装 NodeJS。
第二步,设置npm国内源(此处出现证书错误 需要设置忽略SSL证书)。
第三步,npm install 漫长等待。
第四步,node wuWxapkg.js D:\WechatFiles\WeChat Files\Applet\xxxxxxxx\3\__APP__.wxapkg。
芜湖,失败。
查阅资料发现 PC小程序包加密了
找到另一个项目 https://github.com/maotoumao/wxpc-miniprogram-decryption 可以解密小程序包,然后再反编译即可。
第一步,npm install。
第二步,node wxmd.js [APPID] D:\WechatFiles\WeChat Files\Applet\xxxxxxxx\3\__APP__.wxapkg
成功拿到 decrypt_xxxxxxx.wxapkg 文件,再去反编译,又失败了。
不再折腾 直接看WXAPKG
解密完成后,拿一个在线16进制编辑器(我这里用hexed.it)就可以看到源码了,虽然很乱。
搜索抓包拿到的域名Host,最终找到一个 extractVideoInfo 函数,发送 {linkData:"XXX"} 格式的JSON数据到一个云函数的地址,这个就是我们需要的解析接口了。
把这部分JS全部COPY下来到VS CODE中分析。
我把其中的变量 a,b,c,d,xxx 都替换了,现在阅读起来很直观。
接口会加入 appId(小程序包目录名就是) version timestamp nonceStr 等参数 并且用这个生成sign签名,我们再去源码里搜索 generateSignature 这个函数,此处省略 我把它用PHP重写了一遍(chatgpt的功劳)。
完成
把这个接口搬到了PHP里面,现在可以直接用我的接口去解析视频信息啦。
悲报
搞了这么半天发现,这接口根本没有验证签名,只需要POST带上参数JSON就能用,不验证appid sign那些参数。捏麻的,源码里写的那么详细严谨 后端啥也没有。
我去,小程序还活着呢