Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
YouTube签名解密与VB.Net的工作示例_Vb.net_Youtube_Youtube Api_Youtube Javascript Api_Encryption - Fatal编程技术网

YouTube签名解密与VB.Net的工作示例

YouTube签名解密与VB.Net的工作示例,vb.net,youtube,youtube-api,youtube-javascript-api,encryption,Vb.net,Youtube,Youtube Api,Youtube Javascript Api,Encryption,我知道有很多项目,我可以使用它们。但是我真的很想让它在VB.Net项目中不依赖地运行 所以我想做的是创建一个Youtube下载程序。它在普通视频中效果很好。但是这些特殊的视频,如《Vevo》和其他一些视频都不起作用 他们还有一个签名我需要破译。这里我需要能够提取()的HTMLPlayer JS文件。在这个文件中,我需要搜索一个特殊的函数,看看这个函数在做什么,然后在我的代码中做同样的事情。到目前为止还很简单,但在一些示例中,我甚至无法找到“sig=”或“signature=”,当我找到它们时,它

我知道有很多项目,我可以使用它们。但是我真的很想让它在VB.Net项目中不依赖地运行

所以我想做的是创建一个Youtube下载程序。它在普通视频中效果很好。但是这些特殊的视频,如《Vevo》和其他一些视频都不起作用

他们还有一个签名我需要破译。这里我需要能够提取()的HTMLPlayer JS文件。在这个文件中,我需要搜索一个特殊的函数,看看这个函数在做什么,然后在我的代码中做同样的事情。到目前为止还很简单,但在一些示例中,我甚至无法找到“sig=”或“signature=”,当我找到它们时,它并没有真正帮助我

所以我想知道的是如何从html5.player.js文件中提取所需的信息。正如你在这里看到的,我有那个文件的链接

我也发现这有助于我开始。但是从
Sign\u Decipher开始,我在js文件中找不到这样一个被调用的函数

其他一些链接我找到了,但没有帮助我运行它,或者在太旧的地方:

有些API也不起作用:


您提供的链接网站已包含解决此问题所需的所有信息。大部分工作都可以用一些简单的正则表达式来完成。以下是解码此类加扰签名所需的步骤:

  • 下载要下载的视频页面所使用的html5player.js
  • 确定用于解码编码签名的函数的名称
  • 使用此名称,从脚本中提取函数定义
  • 在JS解释器中运行提取的函数,并用它简单地解码签名
  • 获取html5player.js 第一步应该没有问题,因为你已经完成了。大多数脚本URL将始终相同(
    https://s.ytimg.com/yts/jsbin/html5player-VERSION/html5player.js
    )。只有版本部分会不时更改(例如de_de-vflR89yTY)。这意味着,您只需在视频页面中找到脚本版本并调整默认脚本URL。生成的URL如下所示:

    播放器版本:
    html5player-([\w\d\-]+)\\/html5player\.js

    可以在第一个捕获组中找到该版本

    提取解码函数 在提取函数之前,我们必须知道它的名称。不幸的是,解码函数的名称可能会随着版本的不同而变化,但使用此函数的代码部分通常不会改变

    解码函数名:
    \.sig\\\\\\\\\([a-zA-Z0-9$]+)\(

    函数名将位于第一个捕获组中

    现在我们知道了函数名,我们可以再次使用正则表达式提取函数。只需将#name#替换为函数名即可

    解码函数定义:
    函数#名称#\([^\)]+\{.*?}


    除了实际的解码函数外,我们还需要提取解码函数正在使用的一些实用函数。这些函数包含在对象中。在从html5player.js中提取对象定义之前,我们必须确定对象的名称

    记住这次使用提取的函数定义作为正则表达式的输入

    辅助对象名称:
    ;([A-Za-z0-9]+)\。

    对象名称将位于第一个捕获组中

    使用对象名和一些正则表达式,我们可以从播放器脚本中提取对象定义,就像我们之前对函数定义所做的那样。将#NAME#替换为上一步中的对象名称

    辅助对象定义:
    var#NAME#={.*?}

    现在我们有了恢复加密签名所需的一切

    解码签名 最后一步是使用提取的函数对签名进行解码。为了在.NET中实现这一点,我们必须解析并执行JavaScript代码。幸运的是,有现成的解决方案可以为我们做到这一点。其中之一是JS解释器。另一个选项是使用Windows中可用的选项之一。在以下答案中为这些引擎提供了一个方便的包装:


    下面是一个小示例程序,它结合了上述所有步骤,并使用Simon的包装器对在硬编码视频页面中找到的第一个签名进行解码,然后将编码和解码的签名打印到控制台

    代码是用C#编写的,但将其转换为VB.NET应该很容易

    类程序
    {
    私有常量字符串播放器ScriptUrlTemplate=”https://s.ytimg.com/yts/jsbin/html5player-{0}/html5player.js”;
    私有常量字符串DecodeFunctionPatternTemplate=@“函数名([^\)]+\{.*?};”;
    私有常量字符串HelperObjectPatternTemplate=@“var#NAME#={.*?};”;
    私有静态只读正则表达式SignatureRegex=新正则表达式(@“s=(?[A-F0-9]+\[A-F0-9]+);
    私有静态只读Regex PlayerVersionRegex=new Regex(@“html5player-(?[\w\d\-]+)\\\\/html5player\.js”);
    私有静态只读正则表达式DecodeFunctionNameRegex=新正则表达式(@“\.sig\\\\\\\\\\”(?[a-zA-Z0-9$]+)\(”;
    私有静态只读正则表达式HelperObjectNameRegex=新正则表达式(@“;(?[A-Za-z0-9]+)\”;
    静态void Main()
    {
    常量字符串videoUrl=”https://www.youtube.com/watch?v=6pIyg35wiB4";
    var client=new WebClient();
    var videoPageData=client.DownloadString(videoUrl);
    var encodedSignature=SignatureRegex.Match(videoPageData).Groups[“Signature”].Value;
    var playervision=PlayerVersionRegex.Match(videoPageData).Groups[“playervision”].Value;
    var playerScri
    
    xr=function(a)
    {
    a=a.split("");
    wr.rF(a,54);
    wr.fs(a,75);
    wr.N0(a,1);
    wr.rF(a,52);
    wr.N0(a,3);
    wr.fs(a,31);
    wr.rF(a,16);
    wr.fs(a,38);
    return a.join("")
    }
    
    wr=function(a)
    {
    a=a.split("");
    wr.rF(a,54);
    wr.fs(a,75);
    wr.N0(a,1);
    wr.rF(a,52);
    wr.N0(a,3);
    wr.fs(a,31);
    wr.rF(a,16);
    wr.fs(a,38);
    return a.join("")
    }
    
    N0=function(a,b){Tb(nga,b)&&tm(H_(a),a.O,b,a.Pq,a)}