【问题标题】:De-obfuscate Javascript code to make it readable again [duplicate]去混淆 Javascript 代码以使其再次可读[重复]
【发布时间】:2012-10-16 19:04:20
【问题描述】:

我讨厌把这个带到这里,在学习混淆 JS 代码时,我对我的代码进行了编码,然后在没有任何备份的情况下重写了原始代码:) 以下是我的混淆代码。

var _0xf17f=["\x28","\x29","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x69\x64","\x53\x74\x75\x64\x65\x6E\x74\x5F\x6E\x61\x6D\x65","\x73\x74\x75\x64\x65\x6E\x74\x5F\x64\x6F\x62","\x3C\x62\x3E\x49\x44\x3A\x3C\x2F\x62\x3E","\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x6C\x65\x61\x72\x6E\x69\x6E\x67\x79\x69\x69\x2F\x69\x6E\x64\x65\x78\x2E\x70\x68\x70\x3F\x72\x3D\x73\x74\x75\x64\x65\x6E\x74\x2F\x76\x69\x65\x77\x26\x61\x6D\x70\x3B\x20\x69\x64\x3D","\x22\x3E","\x3C\x2F\x61\x3E","\x3C\x62\x72\x2F\x3E","\x3C\x62\x3E\x53\x74\x75\x64\x65\x6E\x74\x20\x4E\x61\x6D\x65\x3A\x3C\x2F\x62\x3E","\x3C\x62\x3E\x53\x74\x75\x64\x65\x6E\x74\x20\x44\x4F\x42\x3A\x3C\x2F\x62\x3E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x63\x6C\x61\x73\x73","\x76\x69\x65\x77","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x70\x72\x65\x70\x65\x6E\x64","\x2E\x69\x74\x65\x6D\x73","\x66\x69\x6E\x64","\x23\x53\x74\x75\x64\x65\x6E\x74\x47\x72\x69\x64\x56\x69\x65\x77\x49\x64"];function call_func(_0x41dcx2){var _0x41dcx3=eval(_0xf17f[0]+_0x41dcx2+_0xf17f[1]);var _0x41dcx4=document[_0xf17f[3]](_0xf17f[2]);var _0x41dcx5=_0x41dcx3[_0xf17f[4]];var _0x41dcx6=_0x41dcx3[_0xf17f[5]];var _0x41dcx7=_0x41dcx3[_0xf17f[6]];var _0x41dcx8=_0xf17f[7];_0x41dcx8+=_0xf17f[8]+_0x41dcx5+_0xf17f[9]+_0x41dcx5+_0xf17f[10];_0x41dcx8+=_0xf17f[11];_0x41dcx8+=_0xf17f[12];_0x41dcx8+=_0x41dcx6;_0x41dcx8+=_0xf17f[11];_0x41dcx8+=_0xf17f[13];_0x41dcx8+=_0x41dcx7;_0x41dcx8+=_0xf17f[11];_0x41dcx4[_0xf17f[14]]=_0x41dcx8;_0x41dcx4[_0xf17f[17]](_0xf17f[15],_0xf17f[16]);$(_0xf17f[21])[_0xf17f[20]](_0xf17f[19])[_0xf17f[18]](_0x41dcx4);} ;

谁能指导我 URL 或任何使其可读的方法。我是从this 网站完成的,他们似乎在他们的网站上提供了单向混淆服务......这是我在学习期间的测试代码,如果有人能帮助我,那就太好了。

【问题讨论】:

  • 经验教训,使用VCS,这样您就可以改正错误。
  • 我也讨厌你把这个带到这里。这与 SO 无关。 (不过,为了将来参考,如果您使用的是版本控制系统,您就不会遇到这种情况。)
  • yeah..agree..我一直使用它,但因为这是学习项目,所以我正面临着音乐......:)
  • @millimoose 它是 latin-1 十六进制编码,只需通过解码器运行即可。就像我说的,它是手动的。
  • 你好丹尼斯,这是你的 JS 老师,我看到你是如何设法解决你的作业,但在考试中仍然表现不佳。我们应该重新审视你收到的文凭。

标签: javascript deobfuscation


【解决方案1】:

这是一个新的自动化工具,JSNice,可以尝试对其进行去混淆/消除。该工具甚至会尝试猜测变量名称,这非常酷。 (为此目的,它在 github 上挖掘 Javascript。)

http://www.jsnice.org

【讨论】:

    【解决方案2】:

    试试这个: http://jsbeautifier.org/

    我使用您的代码进行了测试,并且工作得尽可能好。 =D

    【讨论】:

      【解决方案3】:

      这里是:

      function call_func(input) {
          var evaled = eval('(' + input + ')');
          var newDiv = document.createElement('div');
          var id = evaled.id;
          var name = evaled.Student_name;
          var dob = evaled.student_dob;
          var html = '<b>ID:</b>';
          html += '<a href="/learningyii/index.php?r=student/view&amp; id=' + id + '">' + id + '</a>';
          html += '<br/>';
          html += '<b>Student Name:</b>';
          html += name;
          html += '<br/>';
          html += '<b>Student DOB:</b>';
          html += dob;
          html += '<br/>';
          newDiv.innerHTML = html;
          newDiv.setAttribute('class', 'view');
          $('#StudentGridViewId').find('.items').prepend(newDiv);
      };
      

      【讨论】:

      • 你是怎么解码的?我还不小心用混淆代码替换了我的原始代码
      • 类似于其他答案提到的,jsnice 或 jsbeautifier。然后我研究它以弄清楚它在做什么并重命名变量。
      • 哇@TrevorDixon 你在哪里学习解码混淆?请给我链接
      • 嗨@Trevor Dixon,我在哪里联系到你做工作?
      • @MarzCT 我给你发了一封电子邮件。
      【解决方案4】:

      来自谷歌上的第一个链接;

      function call_func(_0x41dcx2) {
       var _0x41dcx3 = eval('(' + _0x41dcx2 + ')');
       var _0x41dcx4 = document['createElement']('div');
       var _0x41dcx5 = _0x41dcx3['id'];
       var _0x41dcx6 = _0x41dcx3['Student_name'];
       var _0x41dcx7 = _0x41dcx3['student_dob'];
       var _0x41dcx8 = '<b>ID:</b>';
       _0x41dcx8 += '<a href="/learningyii/index.php?r=student/view&amp; id=' + _0x41dcx5 + '">' + _0x41dcx5 + '</a>';
       _0x41dcx8 += '<br/>';
       _0x41dcx8 += '<b>Student Name:</b>';
       _0x41dcx8 += _0x41dcx6;
       _0x41dcx8 += '<br/>';
       _0x41dcx8 += '<b>Student DOB:</b>';
       _0x41dcx8 += _0x41dcx7;
       _0x41dcx8 += '<br/>';
       _0x41dcx4['innerHTML'] = _0x41dcx8;
       _0x41dcx4['setAttribute']('class', 'view');
       $('#StudentGridViewId')['find']('.items')['prepend'](_0x41dcx4);
      };
      

      它不会让你一路回到源头,这实际上是不可能的,但它会让你摆脱困境。

      【讨论】:

      • 你是怎么做到的?我在谷歌上找不到第一个链接。我尝试了谷歌的所有链接和程序,但你的去混淆效果更好。它用值代替了数组索引!是自动反混淆吗?
      【解决方案5】:

      两种在线jsbeautifier(jsbeautifier, jsnice)我都试过了, 这些工具给了我漂亮的js代码,

      但是无法复制非常大的js(一定是bug,当我复制时,复制的缓冲区只包含一个字符'-')。

      我发现唯一可行的解​​决方案是 prettyjs:

      http://www.thaoh.net/prettyjs/

      【讨论】:

        猜你喜欢
        • 2012-10-06
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-11
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多