Как понять скомпилированный файл или нет js
Перейти к содержимому

Как понять скомпилированный файл или нет js

  • автор:

Javascript скомпилирован или нет? Проверьте внутри

Обратите внимание, что я не знаком с Javascript. Если код javascript начинается следующим образом:

Затем он скомпилирован? Если это так, любой способ его декомпиляции? Если он не скомпилирован, то любая помощь в том, как читать этот тип кода?

Любая помощь будет принята с благодарностью.

EDIT:

Спасибо всем за то, что отвечает. И ничего себе, я понятия не имел, что я бы ответил на это быстро, с удовольствием в Stackoverflow.

Тем не менее, может ли кто-нибудь помочь мне сделать это более понятным, чем:

7 ответов

Он просто запутан. _0x89f8 — нормальная переменная, «\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C» — нормальная строка (кроме всех символов, написанных в шестнадцатеричном формате: \x69 is i и т.д., она говорит «innerHTML» ).

Это выглядит как obfuscated javascript — тот, кто его подставил, не хочет, чтобы его легко читали. Без значимых имен переменных это будет трудно понять (т.е. Что означает _0x89f8 ?).

Строковые параметры — это экранированные строки — \x69 — это шестнадцатеричный символ для символа i и т.д.

Введите в адресную строку вашего браузера следующую информацию:

Скорее всего, вызываемая функция строит строку javascript из параметров, а затем вызывает eval .

Вы найдете их на Facebook LOT. Обычно они не запутываются, и обычно имеют дело с приглашениями друзей или чем-то в этом направлении. Я почти никогда не выполнял javascript в адресной строке, поэтому я никогда не проверял дальше ни на одну из них.

Это означает, что я не знаю, является ли это вредоносным.

Вы можете использовать этот инструмент http://jsbeautifier.org/, чтобы размыть код автоматически магически (ну, по крайней мере, частично).

используя настройки по умолчанию.

Для этого, в частности, хотя я должен был иметь доступ к странице FB, чтобы получить ВСЕ из javascript (я копаю дальше).

К счастью, жена всегда спрашивает перед тем, как выполнить javascript в строке адреса (она нашла javascript именно этим вечером).

Как посмотреть во что компилируется код?

Есть ли в javascript декомпилятор или дизассемблер в байткод? Вот пример из питона.

Для V8 (js-движка из хромиума/хрома) можно использовать встроенный дизассемблер:

Сначала собрать движок их исходников, включив поддержку дизассемблера:

Потом запустить d8 shell, с опциями

Первые две опции распечатают ассемблерный код с комментариями. Третья опция сгенерирует трейс, который можно будет просмотреть с помощью C1Visualizer.

решение честно взял с Quora, на последних исходниках v8 не проверял

Как понять скомпилированный файл или нет js

Это скрипт или программа? Как их отличать и зачем

Это скрипт или программа? Как их отличать и зачем

Это скрипт или программа? Как их отличать и зачем

Как работает JavaScript

JavaScript

Движок JavaScript

Что скрывает движок JavaScript

Движок JavaScript V8

  1. Парсер
  2. AST
  3. Интерпретатор выдает байт-код
  4. Профайлер
  5. Компилятор выдает оптимизированный код
  • Интерпретатор читает код построчно и сразу выполняет его.
  • Компилятор читает весь код, выполняет оптимизации, а затем производит оптимизированный код.
  1. При передаче этого файла интерпретатору, он читает его построчно и сразу выполняет функцию, пока цикл не закончится. Таким образом, он просто переводит код в то, что компьютер понимает на ходу.
  2. При передаче этого файла компилятору, он читает всю программу, выполняет анализ действий и производит оптимизированный код на языке, который понимает машина. Это как взять X (JS-файл) и создать Y (оптимизированный код, понятный машине). Если использовать интерпретатор для Y (оптимизированный код), результат будет таким же, как при интерпретации X (JS-код).

  • Интерпретатор построчно преобразует исходный код в эквивалентный машинный код.
  • Компилятор сразу преобразует весь исходный код в машинный код.
  • Преимущество интерпретатора заключается в немедленном выполнении кода без необходимости компиляции, что может быть полезно для запуска JS-файлов в браузере. Однако процесс замедляется при необходимости преобразования большего количества JS-кода. Вспомните маленький фрагмент кода, в котором функция вызывалась 1000 раз. В этом случае вывод остается прежним, даже если функция add была вызвана 1000 раз. Такие ситуации замедляют работу интерпретатора.
  • В таких случаях компилятор может выполнить некоторые оптимизации, заменив цикл одним числом 2 (1 + 1 добавлялось каждый раз), поскольку он остается неизменным для всех 1000 итераций. Окончательный код, который выдает компилятор, оптимизирован и выполняется намного быстрее.

Движок V8 JavaScript

Интерпретатор JavaScript: объясняем работу движка на пальцах

Lorem ipsum dolor

Интерпретатор JavaScript (JS) , если простыми словами , — это некая программа, которая преобразует код JS в машиночитаемый язык. Но важно не путать его с компилятором JS , п отому что разница , возможно , не очевидна сразу, однако она есть. Интерпретатор JS считывает заданный код построчно и по порядку и тут же начинает его «выполнять». Компилятор же вначале «считывает» весь код, потом проводит с ним оптимизацию и только после этого воспроизводит уже оптимизированный код.

«Движок» JavaScript — это программа , объединяющая в себе интерпретатор JS и компилятор. Именно внутри этих « движков » код JS преобразуется в код более «простого» уровня. Разрабатывая программы на языке JavaScript, мы преследуем идею, что компьютер (или , возможно , просто браузер) обязательно выполнял ее правильно. Но компьютер может выполнить и понять только «машинный» код. « Движок » как раз переводит наш код JS на «машинный».

Объясняем работу движка JS на пальцах

С любым JavaScript кодом, поступившим внутрь « движка » , долж ен произойти ряд определенны х этап ов работы, прежде чем он отразится в «console.log». Давайте с этим разбираться подробнее : что именно должно с ним произойти ?

1. Парсер

Первый этап работы с кодом — это парсер. На этом этапе код «разбивается» на небольшие логические части (токены). Это делается для того, чтобы потом понять назначение этих токенов и что дальше с ними делать.

2. AST (Abstract Syntax Tree). Абстрактное синтаксическое д е рево

В результате полученных на первом этапе токенов создается некое «представление» кода. Оно имеет структуру « дерева » и отсюда берет свое название.

3. Интерпретатор JS

Интерпретатор JavaScript считывает код файла по каждой строке отдельно и поочередно. При этом он сразу анализирует и преобразовывает этот код , прямо в течение « работы » самой программы , и не останавливает ее выполнение. Основываясь на уже имеющемся AST, интерпретатор создает байт-код. На данном этапе никакой оптимизации не производится.

4. Профайлер

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

5. Компилятор JavaScript

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

6. Деоптимизация

По сути , компилятор создает лишь «предположение», что полученный после оптимизации код будет работать лучше и быстрее. Но если вдруг такое «предположение» окажется не верным, то на этом этапе оптимизированный код будет деоптимизирован.

Движок JS. Немного истории

В раннюю эпоху расцвета И нтернета и браузерной борьбы за пользователей большинство разработчиков браузеров внедряли лишь интерпретатор JavaScript . Тогда это было обосновано , в едь интерпретатор проводит выполнение любой программы построчно, по мере того как сам код в него поступает. А из этого следует его главное достоинство — быстродействие кода. Потому что в этом случае любая поступающая команда в виде кода выполнялась просто мгновенно , и появлялся эффект «быстродействия» браузера.

Однако развитие И нтернета не стоит на месте — технологии тоже усложняются. Программы становятся тяжелее, требования становятся более жесткими, код станови т ся более тяжелым. Поэтому тут стал заметен и главный недостаток чистого интерпретатора — любому интерпретатору приходится проделывать одну и ту же работу по несколько раз, если используется одинаковый код. То есть если нужно было , к примеру , «считать» цикл, то интерпретатору приходилось построчно анализировать одни и те же строки кода , и так много раз подряд. А это лишняя работа и лишнее время.

Так и появился на свет движок JavaScript , который , по сути , совмещает в себе лучшее от двух подходов: от компилятора JS и интерпретатора JS .

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *