有没有像javascript deminifier(deobfuscator)这样的东西?

时间:2009-09-07 06:25:43

标签: obfuscation reverse-engineering minify unminify

这个问题恰恰与Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?

完全相反

我想了解google是如何加载的,所以我可以使用非流行的JS工具包构建自己的。

10 个答案:

答案 0 :(得分:30)

试试这个:JS Beautifier

答案 1 :(得分:15)

嗯,除非有缩小的映射,否则无法恢复变量名称 - >原始变量名称可用。否则,我认为该工具的作者可以赢得Randi的精神专长奖。

答案 2 :(得分:15)

尝试http://www.jsnice.org/

我偶然发现它很棒。它扩展了代码。它具有统计变量重命名。例如,如果您有此代码:

var g = f.originalEvent.targetTouches[0];

然后它将你的代码变成:

var touches = event.originalEvent.targetTouches[0];

非常好的猜测,可以预测。

它转过来了:

d.slide.hasClass("selected") ? (e.onSlideOpen.call(d.prev.children("div")[0]), q ? (e.rtl && d.slide.position().left > i.w / 2 || d.slide.position().left < i.w / 2) && h.animateSlide.call(d) : t && d.index ? (h.animateGroup(d, !0), h.fitToContent(d.prev)) : d.slide.position().top < i.h / 2 && h.animateSlide.call(d)) : (setTimeout(function() { e.onSlideOpen.call(d.slide.children("div")[0]) }, e.slideSpeed), h.animateGroup(d), t && h.fitToContent(d.slide)), e.autoPlay && (f.stop(), f.play(l.index(j.filter(".selected"))))

进入这个:

if (e.slide.hasClass("selected")) {
    settings.onSlideOpen.call(e.prev.children("div")[0]);
    if (val) {
      if (settings.rtl && e.slide.position().left > box.w / 2 || e.slide.position().left < box.w / 2) {
        self.animateSlide.call(e);
      }
    } else {
      if (isMac && e.index) {
        self.animateGroup(e, true);
        self.fitToContent(e.prev);
      } else {
        if (e.slide.position().top < box.h / 2) {
          self.animateSlide.call(e);
        }
      }
    }
  } else {
    setTimeout(function() {
      settings.onSlideOpen.call(e.slide.children("div")[0]);
    }, settings.slideSpeed);
    self.animateGroup(e);
    if (isMac) {
      self.fitToContent(e.slide);
    }
  }
  if (settings.autoPlay) {
    node.stop();
    node.play(tabs.index(options.filter(".selected")));
  }

我正在处理的库有几个错误,在花了几个小时试图破译代码之后,发现这将节省我一大堆时间。

说真的,这个工具用JS Beautifier擦拭地板。

答案 3 :(得分:7)

答案 4 :(得分:2)

您将无法重建方法名称或变量名称。您可以期待的最好的是一个简单的JS代码格式化程序(如前面提到的那样),然后逐行检查文件方法,找出每个部分的功能。

也许使用一个好的JS重构工具也会让这更容易(能够重命名/记录方法)

答案 5 :(得分:1)

您可以使用正则表达式中的\b(字边界)功能在文件中查找单字母变量名称。

for i in "abcdefghij..z"; do
    sed -i "s/\b$i\b/$(random /usr/share/dict/words)/g" somefile.js
done

你也可以在vim中使用:%s/\<a\>/truesaiyanpower/g

答案 6 :(得分:1)

要解开js文件,Unminify将是最好的!

答案 7 :(得分:0)

要缩小CSS,HTML和JS文件的大小,可以使用UnminifyUnminify JS在线工具!

答案 8 :(得分:-1)

请参阅我们的SD ECMAScript Formatter,了解可以很好地格式化代码的工具。

编辑:如果您想要撤消重命名过程,您需要将某些模糊名称重命名回原始文件。

此工具在技术上可以做到:SD Thicket ECMAScript Obfuscator

通过应用您可以精确控制的重命名贴图来实现此目的。 通常,您在混淆过程中通过选择要混淆的名称和要保留的名称来隐式构造此类映射,并且混淆器应用该映射来生成混淆的代码。

当您进行模糊处理时,Thicket混淆器会生成此映射作为副作用 基本上是一组对的形式(originalname,obfuscatedname) 用于参考和调试目的。

交换元素给出了地图(obfuscatedname,originalname)。可以通过Thicket应用该反转映射来从混淆代码中恢复具有原始名称的代码。而Thicket混淆器包括Formatter,让你再次看起来很漂亮。

“扭转缩小”(因为你说得不好,你试图扭转混淆),是你需要地图。由于进行模糊处理的人不会泄露地图,因此作为模糊代码的接收者,您无需应用任何内容。一个潜在的海盗必须通过痛苦的逆向工程来重建地图。

“逆转”过程也无法恢复评论。他们永远消失了。

这完全是设计的,所以真正的问题是你为什么要反对混淆?

答案 9 :(得分:-1)

Javascript minifier和Javascript Obfuscator是两回事。

Minifier - 删除程序中的注释,不必要的空格和换行符。

混淆器 - 对程序进行修改,更改变量,函数和成员的名称,使程序更难理解。一些混淆器在修改代码时非常积极。

Javascript Obfuscator会混淆您的代码。

如果要对代码进行反混淆处理,请尝试Javascript Beautifier。如果发现混淆,它会反混淆,然后美化代码。