是否有诸如javascript的deminifier(deobfuscator)之类的东西? [关闭]

问题描述 投票:16回答:10

此问题与Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?完全相反

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

obfuscation reverse-engineering minify unminify
10个回答
30
投票

尝试一下:JS Beautifier


-2
投票

Javascript minifier和Javascript Obfuscator是两个不同的事物。

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

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

Javascript Obfuscator将使您的代码模糊。

如果要对代码进行模糊处理,请尝试Javascript Beautifier。如果发现混淆,它将消除混淆,然后美化代码。


15
投票

呃,除非有缩小的->原始变量名的映射,否则将无法恢复变量名。否则,我认为该工具的作者可能会因心理专长而获得兰迪奖。


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擦地板。



2
投票

您将无法重构方法名称或变量名称。您可以期望的最好的方法是一个简单的JS代码格式化程序(如前面提到的那些代码格式化程序),然后逐行逐个检查文件方法,弄清楚每个部分的作用。

也许使用良好的JS重构工具也会使此操作更容易(能够重命名/记录方法)


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之类的东西一起使用。


0
投票

要缩小js文件的大小,Unminify最好!


0
投票

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


-1
投票

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

编辑:如果要撤消重命名过程,则需要将已混淆的名称重命名为原始名称。

此工具从技术上可以做到这一点:SD Thicket ECMAScript Obfuscator

它通过应用重命名地图来实现,您可以对其进行精确控制。通常,您在混淆过程中通过选择要混淆的名称和要保留的名称来隐式构造这样的映射,混淆器将使用该映射来生成混淆的代码。

当您混淆时,丛生混淆器会生成此贴图作为副作用基本上是一对对的形式(原始名称,混淆名称)供参考和调试。

交换元素会给出地图(混淆名称,原始名称)。加密树可以应用该反向映射,以从经过混淆的代码中恢复具有原始名称的代码。灌木丛混淆器包含格式化程序,可让您再次使它看起来不错。

“逆向缩小”的陷阱(正如您所说的很糟糕,您正试图逆向模糊化,是因为您需要地图。由于进行混淆处理的人不会放弃地图,因此您作为混淆处理代码的接收者没有什么可应用的。可能的海盗可能必须通过痛苦的逆向工程来重建地图。

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

这都是设计使然,所以真正的问题是为什么要寻找消除混淆的方法?

© www.soinside.com 2019 - 2024. All rights reserved.