Есть ли такая вещь, как javascript deminifier (deobfuscator)?

Этот вопрос прямо противоположен тому, какой минимизатор Javascript (cruncher) делает то же самое, что Google использует для своих JS API?

Я хочу узнать, как Google выполняет загрузку, чтобы я мог создать свой собственный с непопулярными JS-инструментами.

9 ответов

Попробуйте это: JS Beautifier

Попробуйте 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.

Э-э-э, было бы невозможно восстановить имена переменных, если бы не было сопоставления минимизированных -> исходных имен переменных. В противном случае, я думаю, что авторы этого инструмента могут выиграть приз Рэнди за экстрасенсорные способности.

Вы не сможете восстановить имя метода или имя переменной. Лучшее, на что вы можете надеяться, - это простой формирователь кода JS (например, упомянутый ранее), а затем пройти метод файла, метод, строка за строкой, выяснить, что делает каждая часть.

Возможно, использование хорошего инструмента рефакторинга JS также облегчит эту задачу (возможность переименовывать / документировать методы).

Чтобы unminify js-файлы, Unminify будет лучшим!

Вы можете использовать \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,

Чтобы удалить файлы css, html и js, вы можете использовать онлайн-инструмент Unminify или Unminify JS!

Javascript minifier и Javascript Obfuscator - это две разные вещи.

Минификатор - удаляет комментарии, ненужные пробелы и новые строки из программы.

Obfuscator - вносите изменения в программу, изменяя имена переменных, функций и членов, что значительно усложняет понимание программы. Некоторые обфускаторы довольно агрессивны в своих модификациях кода.

Этот Javascript Obfuscator запутывает ваш код.

Если вы хотите деобфусцировать свой код, попробуйте Javascript Beautifier. Он будет деобфусцирован, если обфускация найдена, а затем украсит код.

Смотрите наш SD ECMAScript Formatter для инструмента, который будет приятно форматировать код.

РЕДАКТИРОВАТЬ: Если вы хотите отменить процесс переименования вам нужно что-то может переименовать обфусцированные имена обратно в оригиналы.

Технически это может сделать этот инструмент: SD Thicket ECMAScript Obfuscator.

Это делается путем применения карты переименования, над которой вы имеете точный контроль. Обычно вы неявно создаете такую ​​карту во время процесса запутывания, выбирая, какие имена запутывать, а какие сохранять, и обфускатор применяет эту карту для создания запутанного кода.

Обфускатор Thicket генерирует эту карту как побочный эффект, когда вы запутываете в форме по существу набор пар (оригинальное имя, обфусцированное имя) для справочных и отладочных целей.

Замена элементов дает карту (обфусцированное имя, оригинальное имя). Эта перевернутая карта может быть применена Thicket для восстановления кода с исходными именами из обфусцированного кода. Кроме того, в обфускаторе Thicket есть средство форматирования, которое позволяет вам снова выглядеть красиво.

Уловка "отмены минимизации" (как вы плохо это понимаете, вы пытаетесь изменить запутывание) состоит в том, что вам нужна карта. Поскольку люди, делающие запутывание, не раздают карту, вам, как получателю запутанного кода, нечего применять. Будущий пират должен был бы реконструировать карту, предположительно, путем болезненного реверс-инжиниринга.

"Обратный" процесс также не может восстановить комментарии. Они ушли навсегда.

Это все по замыслу, поэтому реальный вопрос в том, почему вы хотите изменить запутывание?

Другие вопросы по тегам