在上一章经过还原混淆和稍微处理下代码后,我们得到了这样一张图:
从图中可以看到_0xeb9911(视频下链接地址)是受到_0x2ef354影响,_0x2ef354的值是受到_0x132eed影响的,而_0x132eed却是个未知值。
var _0x132eed = parent.MacPlayer.PlayUrl;
那要完整还原出下载地址,就需要理清_0x132eed即parent.MacPlayer.PlayUrl赋值的来龙去脉。
从上图可以看到,在还没执行到 var _0x132eed = parent.MacPlayer.PlayUrl ,parent.MacPlayer.PlayUrl 就已经是有相应的数值了。说明 parent.MacPlayer.PlayUrl 在第355行代码之前早已被赋值,那是在vod.js?v=0.3507995514310325:formatted 这个js文件里赋的值,还是其它 js 文件赋的值?
在前一章节,我们是在vod.js?v=0.3507995514310325:formatted 的第一行代码下了断点的,所以我们先刷新一下网页,让程序跑到 vod.js?v=0.3507995514310325:formatted 的第一行代码,然后把parent.MacPlayer.PlayUrl 粘贴到控制台观察下情况。
从上图可以看出在进入vod.js?v=0.3507995514310325:formatted 之前,parent.MacPlayer.PlayUrl 就已经被赋值了。
但是如果直接搜索 MacPlayer.PlayUrl 是没搜索不到结果的,如图示。
那就搜索下 MacPlayer 看能搜索到什么
从图中,可以看到返回了很多结果,其中有一个结果名为 MacPlayer.Init(); 这是一个初始化函数,有些可疑。我们在MacPlayer.Init();出现的地方下个断点,然后动态调试看它会去到哪里。
由上图可以看出当程序在MacPlayer.Init()处断下来后,我们点击进入下一个函数调用(F11),就去到了 VM3589:formatted 文件下的 Init 函数。
在往下阅读 Init 函数的代码时,我们能看到一个可疑之处
那我们不妨在这个第75行下个断点,看看 MacPlayer.PlayUrl 在执行此行代码前后的数值变化情况。
由上面三张调试图可看出 this.PlayUrl = player_data.url; 这行代码执行前, MacPlayer.PlayUrl 都是没有值的,而在执行完 this.PlayUrl = player_data.url; 这行代码后, MacPlayer.PlayUrl 就有数值了。那就是关键点在 player_data.url 。那 player_data.url 又是在哪里出现的呢?
常规手法 搜索下 player_data 。
从搜索结果来看, player_data 是在视频网页里面的一个josn数据,而url 则是 player_data 里的一个子变量。
到此,我们就理清楚了 parent.MacPlayer.PlayUrl 的数值来源,所以_0x132eed = player_data.url , 而 player_data 可通过网页源代码使用正则获取得到。
总结:
遇到数据来源不明确时,不可浮躁,善于运用静态分析和动态分析,理清其中的因果关系。