反混淆Javascript

Dav*_*och 12 javascript obfuscation

这怪物是什么?有人知道一种让它可读的方法吗?

<script type="text/javascript"> 
    //<![CDATA[
    <!--
    var x="function f(x){var i,o=\"\",l=x.length;for(i=0;i<l;i+=2) {if(i+1<l)o+=" +
    "x.charAt(i+1);try{o+=x.charAt(i);}catch(e){}}return o;}f(\"ufcnitnof x({)av" +
    " r,i=o\\\"\\\"o,=l.xelgnhtl,o=;lhwli(e.xhcraoCedtAl(1/)3=!76{)rt{y+xx=l;=+;" +
    "lc}tahce({)}}of(r=i-l;1>i0=i;--{)+ox=c.ahAr(t)i};erutnro s.buts(r,0lo;)f}\\" +
    "\"(0),9\\\"\\\\$.;(.34U03\\\\\\\\16\\\\0E\\\\NSCZhC24\\\\03\\\\01\\\\\\\\St" +
    "DEMPbM02\\\\0C\\\\x#opms58aJ}qb<jb7`17\\\\\\\\hc7s17\\\\\\\\rzEeljdp7m03\\\\"+
    "\\\\36\\\\0F\\\\24\\\\06\\\\01\\\\\\\\25\\\\01\\\\02\\\\\\\\26\\\\03\\\\03\\"+
    "\\\\\\(W4N02\\\\\\\\24\\\\02\\\\00\\\\\\\\07\\\\0N\\\\14\\\\0P\\\\BI07\\\\0" +
    "4\\\\00\\\\\\\\02\\\\02\\\\02\\\\\\\\14\\\\06\\\\02\\\\\\\\24\\\\0L\\\\25\\" +
    "\\06\\\\01\\\\\\\\3:?(>4\\\"\\\\f(;} ornture;}))++(y)^(iAtdeCoarchx.e(odrCh" +
    "amCro.fngriSt+=;o27=1y%i;+=)y90==(iif){++;i<l;i=0(ior;fthnglex.l=\\\\,\\\\\\"+
    "\"=\\\",o iar{vy)x,f(n ioctun\\\"f)\")"                                      ;
    while(x=eval(x));
    //-->
    //]]>
</script> 
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 22

这是一个真正模糊的版本:

document.writeln("<a href=\"mailto:cameron@curvycorners.net\" title=\"Contact\">Contact</a>");
Run Code Online (Sandbox Code Playgroud)

我认为这样做是为了避免垃圾邮件发送者.但是当然,spambots可以使用Webkit渲染页面并遍历DOM以获取电子邮件地址......;)

那么......如何去混淆?

  1. 转到http://jsbeautifier.org/
  2. 粘贴源并美化它
  3. 编辑功能f(x),console.log(o)而不是return o
  4. 执行修改后的代码并美化其输出.
  5. 重复步骤2-4直到它可读.

  • 根据[此测试](http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/),似乎没有太多的垃圾邮件那里实际上评估JavaScript(参见ROT13变体).嗯,我应该这样说吗? (2认同)