首先,你必须将打包的 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 类。