Есть ли такая вещь, как javascript deminifier (deobfuscator)?
Этот вопрос прямо противоположен тому, какой минимизатор Javascript (cruncher) делает то же самое, что Google использует для своих JS API?
Я хочу узнать, как Google выполняет загрузку, чтобы я мог создать свой собственный с непопулярными JS-инструментами.
9 ответов
Попробуйте 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 также облегчит эту задачу (возможность переименовывать / документировать методы).
Вы можете использовать \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 есть средство форматирования, которое позволяет вам снова выглядеть красиво.
Уловка "отмены минимизации" (как вы плохо это понимаете, вы пытаетесь изменить запутывание) состоит в том, что вам нужна карта. Поскольку люди, делающие запутывание, не раздают карту, вам, как получателю запутанного кода, нечего применять. Будущий пират должен был бы реконструировать карту, предположительно, путем болезненного реверс-инжиниринга.
"Обратный" процесс также не может восстановить комментарии. Они ушли навсегда.
Это все по замыслу, поэтому реальный вопрос в том, почему вы хотите изменить запутывание?