美拍无水印视频 js逆向
前言
最近很忙已经差不多一个月没有更新了,今天研究了下美拍
去除水印的方式,更多精彩:join(“q_qun”,1071834648)
以 本视频为例子:
http://www.meipai.com/media/1200571483?client_id=1089857302&utm_media_id=1200571483&utm_source=meipai_share&utm_term=meipai_android&gid=2211243272
最简单的肉眼看到的就是在console这里
我们打开这个地址一看确实是无水印的,但是我们是为了让代码自己去爬去,既然有输出我们就去看源码吧直接。
还是调整为手机模式,查看源码,看到video是一个加密的字符串,感觉看起来像base64
我们尝试 直接解码,结果发现是这种
看来还是不行,那我们就尝试查找关键字,看到上面的输入有输出,我们很显然就去找console,但是又让我们失望了,没有console,那就去看他引入的js里面有没有输出。
查看源文件 发现引入的js只有这么几个,其中还有是框架,就不需要去看框架的源码了.
经过一番搜索终于根据关键词 mp4 定位到了源码地址:
[rihi如下图:
这里的 this.item.video 应该就是我们刚才看到的那个很像base64的代码。
找到decode的具体实现:
方法t就是把上面的地址video地址最终转换为播放地址:
这里附带上了,几个加密函数的源码,同理我们把这几个函数转为php就可以通过video 参数计算最终播放的url了. “`php public function getVideoUrl() { $hex = MeiPaiUtil::getHex($this->videoBase64Url); $arr = MeiPaiUtil::getDec($hex[0]); $d = MeiPaiUtil::subStr($arr[0], $hex[1]); $videoUrl = base64_decode(MeiPaiUtil::subStr(MeiPaiUtil::getPos($d, $arr[1]), $d)); return $videoUrl; } “` 这里附上untils的php代码 “`php class MeiPaiUtil { public static function getHex($base64) { return [ strrev(substr($base64, 0, 4)), substr($base64, 4) ]; } public static function getDec($str) { $a_arr = []; $b_arr = []; foreach (str_split((string)hexdec($str)) as $id => $v) { if ($id >= 2) { $b_arr[] = $v; } else { $a_arr[] = $v; } } return array($a_arr, $b_arr); } public static function subStr($arr, $hex) { $k = $arr[0]; $c = substr($hex, 0, (int)$k); $temp = str_replace(substr($hex, (int)$k, (int)$arr[1]), “”, substr($hex, (int)$arr[0])); return $c . $temp; } public static function getPos($a, $b) { $b[0] = (string)(strlen($a) – $b[0] – $b[1]); return $b; } } “`