Подтвердить что ты не робот

Есть ли такая вещь, как javascript-деминератор (деобфускатор)?

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

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

4b9b3361

Ответ 1

Попробуйте следующее: JS Beautifier

Ответ 2

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

Ответ 3

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

Ответ 5

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

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

Ответ 6

Вы можете использовать функцию \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.

Ответ 7

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

Ответ 8

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

EDIT: Если вы хотите отменить процесс переименования, вам нужно что-то переименовать обфусканные имена обратно в оригиналы.

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

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

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

Элементы свопинга дают карту (obfuscatedname, originalname). Эта инвертированная карта может быть применена Thicket для восстановления кода с исходными именами из обфускационного кода. И обфускатор Thicket включает в себя Formatter, чтобы вы могли снова выглядеть хорошо.

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

Процесс "реверсирования" также не может восстанавливать комментарии. Они ушли навсегда.

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

Ответ 9

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

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

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

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

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