最近几天在研究某视频网站,该视频网站使用国内比较流行视频加密软件供应商——保利威视。不得不说该软件公司在视频流加密上,的确有点厉害,虽然前期使用m3u8(HLS:HTTP Live Streaming直播的索引文件 )来加密的,还是非常容易下载购买的视频的。但今天研究的这个网站使用比较新的加密方法。通过百度,终于从保利威视官网找到了介绍。

一般情况下,POLYV云平台会对用户上传上来的视频统一转码。如果选择非加密功能,视频会统一转成flv(适用于PC端POLYV flash播放器播放) 和MP4(适用于移动端HTML5播放器播放);如果选择加密功能,视频会统一转成pdx+pts(通过POLYV自主研发的切片加密技术转码后的视频格式,只能通过PC端的POLYV flash播放器解密后播放)和m3u8+key+ts(按照苹果的hls协议转码后的加密视频格式,适用于移动端HTML5播放器播放)。无论上传到POLYV云平台的源文件是音频还是视频,都会按照以上标准去统一转码成视频。

通过上面一段话,我也了解了,对于m3u8+key+ts模式,这个是我以前研究的,这个使用Python批量下载问题不大,但对于pdx+pts模式,解密起来还是比较麻烦的,因为PC端的POLYV flash里面的代码混淆了。可以通过JPEXS Free Flash Decompiler软件看到。

混淆的swf文件

虽然PC端Flash我没搞定,期间也尝试了多种办法,包括参考了吾爱破解的调试Flash文章( 使用JPEXS反编译软件来修改SWF代码(插Log) )。因为该Flash被混淆了,所以插Log方法不太好使,flashlog.txt文件中会出现Error错误。下面这是正常调试日志输出,没啥重要的信息。

Cygwin动态显示日志

一、项目结构

今天的前言有点多,大家理解一下,毕竟研究了大半天给卡住的滋味不太好受。 只能说暂时宣告失败,后期还会抽空继续研究一下。在研究调试网页的过程中,我学会了如何动态的调试JavaScript文件。这里以简单的index.html和sut.test.js文件来演示。 项目结构如下:

目录结构

为啥会多出来一个CryptoJS v3.1.2文件夹呢?这是由于这个简单的示例调用了CryptoJS里面的MD5,用来计算一个字符串的MD5值。

二、编写代码

1、编写sut.test.js文件

function md5Encode(str) {
    var sut = CryptoJS.MD5(str).toString();
    return sut;
}

2、编写index.html文件

<html>
  <head>
    <meta charset="UTF-8">
    <title>SUT调试JavaScript</title>
    <script type="text/javascript" src="CryptoJS v3.1.2/components/core-min.js"></script>
    <script type="text/javascript" src="CryptoJS v3.1.2/rollups/md5.js"></script>
    <script type="text/javascript" src="sut.test.js"></script>
    <script type="text/javascript">
        window.onload = function() {
            console.log("MD5加密结果:" + md5Encode("SaveUTime"));
            alert("MD5加密结果:" + md5Encode("SaveUTime"));
      };
    </script>
  </head>
  <body>
  </body>
</html>

三、代码解释

sut.test.js文件比较简单,就是调用CryptoJS v3.1.2文件夹下的MD5并返回为一个字符串。

index.html文件主要又三个大框架构成,分别为<html>……</html>、<head>……</head>和 <body>……</body>。其中内容都放在了 <head>……</head> 中,是不是有种头重脚轻的感觉?不过我们这里只是调试代码,写的简单一点也没关系。

代码的开头设置了编码格式,然后设置浏览器预览时候的标题Title。随后引用了3个js脚本文件。最后一个脚本文件是在页面加载的时候调用sut.test.js中的md5Encode函数并分别输出到console弹窗显示

四、运行代码

代码编写完成后,我们需要怎么运行代码呢?难道搭建到一个云服务器上?当然可以,但没必要,代价太大,而且麻烦,所以可以使用搭建本地服务器来运行代码。这里我介绍一款Chrome插件——Web Server for Chrome。这款软件不要太Nice哦,使用起来非常方便快捷。安装完该插件后,就可以通过 chrome://apps/ 来启动该插件。插件运行的界面如下:

Web Server for Chrome

该插件就是根据选择的文件夹来作为Web Server,还可以自动显示index.html文件。该插件还可以通过局域网或者互联网访问(记得路由器做端口映射或内网穿透哦),是不是很拉风?点击上图中的http://127.0.0.1:80,即可打开如下界面。

运行弹窗显示

五、调试代码

虽然这里只是简单演示一下代码调试,但是对于原先完全不懂的我来说,这个功能真的是太好用了,解决了复杂的js代码返回值问题。

调试JS文件

这里的JS文件比较简单,如果你的JS文件比较复杂,可以多设置几个断点,在右侧调试窗口也可以看到所有变量的值,非常直观,当然你也可以使用console.log输出到Console窗口。到这里我的分享就结束了,各位同学如果有更加好用的调试方法,欢迎留言哦。