• XSS.stack #1 – первый литературный журнал от юзеров форума

Деобфускация JavaScript кода

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Варианты деобфускации JavaScript кода

1. Читаемый вид JavaScript в браузере

Современные браузеры умеют сжатый для экономии трафика код разворачивать в исходное состояние.
В Chrome (Chromium) - кнопка F12, выберите вкладку Sources и нажмите на иконку с фигурными скобками { }
В Firefox эта кнопка доступна на вкладке «Отладчик»

2. JStillery
Bash:
git clone https://github.com/mindedsecurity/JStillery
cd JStillery
sudo npm install
+ программа доступна как в виде онлайн сервиса от автора: https://mindedsecurity.github.io/jstillery/

3. JavaScript онлайн деобфускатор
Адрес сервиса: http://deobfuscatejavascript.com

4. JS Beautifier
Bash:
sudo apt install npm
sudo npm -g install js-beautify
js-beautify -h
онлайн сервис от авторов: https://beautifier.io

5. UglifyJS
Bash:
sudo apt install uglifyjs
Пример запуска: для улучшения вида файла используется опция -b; файл (или несколько файлов) нужно указывать перед опциями:
uglifyjs medium.js -b
Также программа может обрабатывать файлы переданные по стандартному вводу:
cat medium.js | uglifyjs -b
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ни один из них не умеет деобфусцировать результаты работы obfuscator.io.
Поэтапное снятие всего должно помочь
 
Поэтапное снятие всего должно помочь

ну у меня самописный скрипт чтобы снимать его, просто констатирую факт ?
 
То что выдал мой движок ни 1 из выше представленных не осилил.
Можно посмотреть пример обфускации?)
Чисто интересно, что у тебя там за жесть происходит :D
 
Ну, то что паблик деобфускатор не берет конкретный малоизвестный обфускатор - это вполне нормально, при наличии определённого количества обфусцированных семплов можно реализовать утилиту для деобфускации
 
Ну, то что паблик деобфускатор не берет конкретный малоизвестный обфускатор - это вполне нормально, при наличии определённого количества обфусцированных семплов можно реализовать утилиту для деобфускации
Каким образом без полноценного эмулятора реализовать снятие слоев обфускации? Как мы определим автоматикой, что вот сейчас данные ноды в AST являются порождением обфускатора, а не оригинального сорца и только их надо эмулировать(не полноценным эмулятором, а костылем имею ввиду)?
Учитывая тот факт, что каждая N + 1 итерация обфускации сбивает сигнатуры для обнаружения техники обфускации с N итерации.
А если днк генератора не один и тот же, а меняется? Последовательность накладываемых на сорц техник, имеется ввиду.
 
Последнее редактирование:
Каким образом без полноценного эмулятора реализовать снятие слоев обфускации? Как мы определим автоматикой, что вот сейчас данные ноды в AST являются порождением обфускатора, а не оригинального сорца и только их надо эмулировать(не полноценным эмулятором, а костылем имею ввиду)?
Учитывая тот факт, что каждая N + 1 итерация обфускации сбивает сигнатуры для обнаружения техники обфускации с N итерации.
А если днк генератора не один и тот же, а меняется? Последовательность накладываемых на сорц техник, имеется ввиду.
Каким образом без полноценного эмулятора реализовать снятие слоев обфускации?
Код, генерируемый обфускатором легко отличить от оригинального как минимум по его логической составляющей (в большинстве случаев), поправь, если я не прав.
Аесли днк генератора не один и тот же, а меняется? Последовательность накладываемых на сорц техник, имеется ввиду.
Это панацея против любой автоматики, тут уже априори нужна будет полноценная эмуляция для восстановления частей обфусцированного кода.
 
Код, генерируемый обфускатором легко отличить от оригинального как минимум по его логической составляющей (в большинстве случаев), поправь, если я не прав.
Ну смотри, если речь идёт про подобное
То понятное дело что это легко снимается автоматикой, даже без фулл эмуляции яп.
А если техники обфускатора сами строятся на эмуляции? Ну то есть вот возьмём задачу по морфингу строки. Распарсим с помощью рефлексии все методы(или декларируем руками), которые имеются в стандарте определенной платформы по работе со строками. Например у дотнета это всякие Trim(), Insert(), Remove(), ToLowerCase(), ToUpperCase().
А теперь в цикле, где глубина построения рандомна, будем в генераторе применять к исходной строке рандомный метод из созданной ранее выборки, а в декод стек будем писать обратные операции. Например, исходная строка ‘abc’. Выбранный рандомный метод допустим Remove(0,1) ( с 0 позиции удалить 1 элемент), аргументы тоже рандомные, но работающие в range длины строки, которую мы перевычисляем на каждую итерацию.
После Remove, у нас в буфере окажется ‘bc’. И генератор знает об этом, поскольку на каждой итерации мы в генераторе можем вычислять eval() от того, что получилось. Чтобы восстановить до исходного ‘abc’ - нам в декод стек надо записать инструкцию Insert(0, ‘a’).
После достижения глубины - мы вставляем в исходник
Decoder_func(opaque_str){ pop from decode stack, apply methods to opaque_str and return }
str = Decoder_func(‘opaque_string’)
———
Вот и вопрос, как ты определишь что это обфускация вообще, а не реальный код, какой нибудь текстовой утилиты. Программно именно. Куда тут лепить костыль? Decode stack разный, всегда, аргументы у методов тоже. Кроме эмуляции ничего в голову не приходит. Так это 1 метод, повторюсь. И функция Decoder_func будет разбавлена другими методами на некст итерациях обфускации.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх