20

この質問は、GoogleがJS APIに使用するものと同じことを行うJavascriptミニファイア(クランチャー)とは正反対です。

人気のないJSツールキットを使って自分で作成できるように、Googleがどのようにロードするのかを知りたいです。

4

10 に答える 10

32

これを試してください:JS Beautifier

于 2009-09-07T06:28:00.173 に答える
20

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 で床を拭きます。

于 2014-12-03T15:03:10.197 に答える
15

うーん、利用可能な縮小された->元の変数名のマッピングがなければ、変数名を復元することは不可能です。そうでなければ、そのツールの作成者は超能力者としてランディ賞を受賞できると思います。

于 2009-09-07T07:10:28.683 に答える
2

メソッド名または変数名を再構築することはできません。期待できる最善の方法は、単純な JS コード フォーマッタ (前述のようなもの) であり、ファイルをメソッドごと、行ごとに調べて、各部分が何をするかを調べます。

おそらく、優れたJSリファクタリングツールを使用すると、これも簡単になります(メソッドの名前を変更/ドキュメント化できる)

于 2009-09-07T07:11:25.093 に答える
1

\b正規表現で (単語境界) 機能を使用して、ファイル内の 1 文字の変数名を見つけることができます。

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

于 2012-07-13T21:59:56.683 に答える
-1

コードを適切にフォーマットするツールについては、 SD ECMAScript Formatterを参照してください。

編集:名前変更プロセスを元に戻したい場合は、難読化された名前を元の名前に戻すことができるものが必要です。

このツールは技術的にそれを行うことができます: SD Thicket ECMAScript Obfuscator .

これは、正確に制御できる名前変更マップを適用することによって行われます。通常、難読化する名前と保持する名前を選択することにより、難読化プロセス中にそのようなマップを暗黙的に構築し、難読化ツールはそのマップを適用して難読化されたコードを生成します。

Thicket 難読化ツールは、参照およびデバッグの目的で基本的に一連のペア (元の名前、難読化された名前) の形式で難読化するときに、副作用としてこのマップを生成します。

要素を交換すると、マップ (obfuscatedname,originalname) が得られます。その逆マップを Thicket が適用して、難読化されたコードから元の名前のコードを復元できます。また、Thicket 難読化ツールには Formatter が含まれており、見栄えを良くすることができます。

「縮小化を元に戻す」ことの難点は、マップが必要なことです。難読化を行っている人はマップを渡さないので、難読化されたコードを受け取ったあなたは適用する必要がありません。海賊志願者は、おそらく痛みを伴うリバース エンジニアリングによってマップを再構築する必要があります。

「元に戻す」プロセスもコメントを復元できません。彼らは永遠に消えてしまいました。

これはすべて設計によるものなので、本当の問題は、なぜ難読化を逆転させようとしているのかということです。

于 2009-09-07T07:05:02.860 に答える
-2

Javascript minifier と Javascript Obfuscator は 2 つの異なるものです。

ミニファイア - コメント、不要な空白、改行をプログラムから削除します。

難読化ツール - プログラムを変更し、変数、関数、およびメンバーの名前を変更して、プログラムを理解しにくくします。一部の難読化ツールは、コードを非常に積極的に変更します。

このJavascript 難読化ツールは、コードを難読化します。

コードの難読化を解除したい場合は、 Javascript Beautifier を試してください。難読化が見つかった場合は難読化を解除し、コードを美しくします。

于 2015-11-30T19:19:29.637 に答える