通过 PHP 的 JS 解包器 - 函数(p,a,c,k,e,r)

2024-03-24

我在互联网上搜索但到目前为止没有找到解决方案。

我必须抓取用以下内容压缩的页面(具有视频流)的内容Dean Edwards 封隔器工具 http://dean.edwards.name/packer/, 实时。

因此,我只需要通过 PHP 来解码压缩的 JS。 (完整的场景:curl页面内容,找到JS内容并实时解码,这样我就可以获得动态视频流)。

那么,有没有办法仅通过 PHP 来解码这个压缩的 js 示例呢?

An example压缩后的代码:

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(0(){4 1="5 6 7 8";0 2(3){9(3)}2(1)})();',10,10,'function|b|something|a|var|some|sample|packed|code|alert'.split('|'),0,{}))

谢谢


首先,你必须将打包的 javascript 拆分成相关的部分。

从“eval”到“}('”的第一部分与您无关:

eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('

第二部分是最小化函数(有效负载):

(0(){4 1="5 6 7 8";0 2(3){9(3)}2(1)})();

第三部分是基数,在解码有效负载时将其用作基数:

10

第四部分是字数统计:

10

第五个相关部分是您的关键字(用 | 分隔):

function|b|something|a|var|some|sample|packed|code|alert

最后一部分也无关紧要:

'.split('|'),0,{})) 

所以基本上你现在已经拥有了解码所需的所有部分:

$payload = '(0(){4 1="5 6 7 8";0 2(3){9(3)}2(1)})()';
$radix = 10;
$wordCount = 10;
$words = array("function","b","something","a","var","some","sample","packed","code","alert);

现在,您必须将有效负载中的所有单词字符替换为单词数组中的相应单词。在您的示例中这很简单,因为您的源 JavaScript 仅包含 10 个单词。

第一个单词字符为 0,将其替换为 $words[0] = function

第二个单词字符是4,将其替换为$words[4] = var

等等...

完成后你的结果应该是:

(function(){var b="some sample packed code";function something(a){alert(a)}something(b)})();

当然,当单词数 > 10 时,情况会稍微复杂一些。

但为此,你可以查看我的解包器课程PHP JavaScript 解包器 https://github.com/rkaradas/php-javascript-unpacker.

特别是源代码中的 Unbaser 类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 PHP 的 JS 解包器 - 函数(p,a,c,k,e,r) 的相关文章