Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 12:40
Оценка:
Нужно генерить некий JS-код динамически, при этом не тащить слишком много кода в проект (т.е. целый Google V8 и подобное — слишком тяжело).

Именно нужно, к примеру, изменить имена (функций, переменных), добавить некий код.

Что бы вы использовали из готового, дабы не писать вручную?
Re: Легковесная библиотека синтаксического дерева JS
От: kov_serg Россия  
Дата: 31.08.24 12:44
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Нужно генерить некий JS-код динамически, при этом не тащить слишком много кода в проект (т.е. целый Google V8 и подобное — слишком тяжело).


S>Именно нужно, к примеру, изменить имена (функций, переменных), добавить некий код.


S>Что бы вы использовали из готового, дабы не писать вручную?

Используй некий шаблонизатор, на крайняк обычные регулярки
Re[2]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 12:53
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Используй некий шаблонизатор, на крайняк обычные регулярки


Ну парсер то можно стандартный — динамически парсить ничего не нужно. Вот есть дерево в JSON-формате. Его как-то нужно обернуть в объектную модель с возможностью добавлять разные узлы и пр. и потом заново превратить в JS-код. Вроде можно и вручную написать (тем более что не стоит задачи покрыть весь JS — только часть синтаксиса), но может что готовое в природе есть.
Re: Легковесная библиотека синтаксического дерева JS
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.08.24 13:19
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Нужно генерить некий JS-код динамически, при этом не тащить слишком много кода в проект (т.е. целый Google V8 и подобное — слишком тяжело).


https://www.google.com/search?q=js+ast+library

S>Что бы вы использовали из готового, дабы не писать вручную?


Смотря, что мне было бы нужно. Одно дело написать простенький генератор, который кушает какое-нибудь описание чего-нибудь и генерирует JS-код. Другое дело, написать серьезный анализатор существующего JS-кода.

Разные задачи требуют разных инструментов.
Re[2]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 13:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>https://www.google.com/search?q=js+ast+library


Нужно на C++, а там большинство на самом JS.

Pzz>Смотря, что мне было бы нужно. Одно дело написать простенький генератор, который кушает какое-нибудь описание чего-нибудь и генерирует JS-код. Другое дело, написать серьезный анализатор существующего JS-кода.


Pzz>Разные задачи требуют разных инструментов.


Дерево в виде JSON — уже есть. Нужно по нему строить объектную модель, типа для каждого узла создать объект с вложенными объектами с возможностью добавить что-то, изменить что-то и в конечном итоге вызвать функцию типа dump и получить чистый JS-код.
Re: Легковесная библиотека синтаксического дерева JS
От: Alekzander  
Дата: 31.08.24 13:53
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Нужно генерить некий JS-код динамически, при этом не тащить слишком много кода в проект (т.е. целый Google V8 и подобное — слишком тяжело).


S>Именно нужно, к примеру, изменить имена (функций, переменных), добавить некий код.


S>Что бы вы использовали из готового, дабы не писать вручную?


ИЗ ЧЕГО генерить? Из логики, размазанной по проекту? Просто строковые операции.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[2]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 14:14
Оценка:
Здравствуйте, Alekzander, Вы писали:

S>>Именно нужно, к примеру, изменить имена (функций, переменных), добавить некий код.

S>>Что бы вы использовали из готового, дабы не писать вручную?

A>ИЗ ЧЕГО генерить? Из логики, размазанной по проекту? Просто строковые операции.


Ну, к примеру, нужно найти все имена переменных и заменить их на случайные. Потом найти все функции и добавить в начало функций несколько случайных инструкций, которые в конечном счете ничего не делают. Типа простой обфускации.
Re[3]: Легковесная библиотека синтаксического дерева JS
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.08.24 14:46
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, Pzz, Вы писали:


Pzz>>https://www.google.com/search?q=js+ast+library


S>Нужно на C++, а там большинство на самом JS.


https://www.google.com/search?q=c%2B%2B+parser+for+js

Примерно второе, что вываливается:

https://github.com/gubaojian/esprima-cpp

Pzz>>Разные задачи требуют разных инструментов.


S>Дерево в виде JSON — уже есть. Нужно по нему строить объектную модель, типа для каждого узла создать объект с вложенными объектами с возможностью добавить что-то, изменить что-то и в конечном итоге вызвать функцию типа dump и получить чистый JS-код.


Но JSON сам по себе, это и есть объектная модель. JSON — это, всего лишь, текстовое представление JS-овских объектов. Причем в синтаксисе, совместимым с JS, поэтому может быть напрямую использован в качестве инициализатора.

Так что непонятно, чего ты хочешь.
Re[3]: Легковесная библиотека синтаксического дерева JS
От: Alekzander  
Дата: 31.08.24 15:27
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Именно нужно, к примеру, изменить имена (функций, переменных), добавить некий код.

S>>>Что бы вы использовали из готового, дабы не писать вручную?

A>>ИЗ ЧЕГО генерить? Из логики, размазанной по проекту? Просто строковые операции.


S>Ну, к примеру, нужно найти все имена переменных и заменить их на случайные. Потом найти все функции и добавить в начало функций несколько случайных инструкций, которые в конечном счете ничего не делают. Типа простой обфускации.


Изначально ты написал: "Нужно генерить некий JS-код динамически". А теперь, оказывается, переименовать переменные. Это не "генерить", а "изменить" код.

Тебе надо на вход принимать JS, и на выходе давать JS? Или ты ещё сам не знаешь, чего хочешь?
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[4]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 16:52
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Примерно второе, что вываливается:

Pzz>https://github.com/gubaojian/esprima-cpp

Парсер не нужен, уже есть дерево в виде JSON.

S>>Дерево в виде JSON — уже есть. Нужно по нему строить объектную модель, типа для каждого узла создать объект с вложенными объектами с возможностью добавить что-то, изменить что-то и в конечном итоге вызвать функцию типа dump и получить чистый JS-код.


Pzz>Но JSON сам по себе, это и есть объектная модель. JSON — это, всего лишь, текстовое представление JS-овских объектов. Причем в синтаксисе, совместимым с JS, поэтому может быть напрямую использован в качестве инициализатора.


Pzz>Так что непонятно, чего ты хочешь.


JSON — слишком общий, из него нельзя сделать JS просто так — нужно смотреть каждый узел и на основе типа узла генерить код.

Хотелось бы чтобы для функций — был один тип объектов, для объявления классов JS — другой тип объектов и т.д.

И потом метод dump — чтобы все дерево обратно развернуть в JS-код.
Re[4]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 31.08.24 16:53
Оценка:
Здравствуйте, Alekzander, Вы писали:

S>>Ну, к примеру, нужно найти все имена переменных и заменить их на случайные. Потом найти все функции и добавить в начало функций несколько случайных инструкций, которые в конечном счете ничего не делают. Типа простой обфускации.


A>Изначально ты написал: "Нужно генерить некий JS-код динамически". А теперь, оказывается, переименовать переменные. Это не "генерить", а "изменить" код.


Не только переименовывать, но и добавлять новые инструкции.

A>Тебе надо на вход принимать JS, и на выходе давать JS? Или ты ещё сам не знаешь, чего хочешь?


На входе можно не JS а уже готовое распарсенное дерево в виде JSON. А на выходе да, JS.
Re[5]: Легковесная библиотека синтаксического дерева JS
От: SaZ  
Дата: 01.09.24 22:25
Оценка:
Здравствуйте, Shmj, Вы писали:

S>...

S>На входе можно не JS а уже готовое распарсенное дерево в виде JSON. А на выходе да, JS.

Что ты понимаешь под "готовым распаршеным деревом в виде JSON"? Ты про AST слышал когда-нибудь? Какая конечная цель, хочешь обфускатор js кода сделать? Что конкретно ты хочешь сделать, с примерами? Или опять флуд ради флуда?
Отредактировано 01.09.2024 22:27 SaZ . Предыдущая версия . Еще …
Отредактировано 01.09.2024 22:27 SaZ . Предыдущая версия .
Re[6]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 02.09.24 03:45
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Что ты понимаешь под "готовым распаршеным деревом в виде JSON"? Ты про AST слышал когда-нибудь?


Синтаксическое дерево — AST — это аббревиатура — Abstract syntax tree — оно и есть. Его легко получить — множество парсеров, причем мне нужно его получить только один раз, по этому нет требования чтобы парсер был на C++. Оно есть готовое.

SaZ>Какая конечная цель, хочешь обфускатор js кода сделать? Что конкретно ты хочешь сделать, с примерами?


Динамический обфускатор JS на C++ — чтобы при каждом запуске давал очень разный JS на основе синтаксического дерева.

На данном этапе хотя бы найти построение объектной модели по этому дереву с возможностью дампить в JS, а то придется писать вручную.
Отредактировано 02.09.2024 3:47 Shmj . Предыдущая версия .
Re[7]: Легковесная библиотека синтаксического дерева JS
От: SaZ  
Дата: 05.09.24 10:44
Оценка:
Здравствуйте, Shmj, Вы писали:

S>...

S>Динамический обфускатор JS на C++ — чтобы при каждом запуске давал очень разный JS на основе синтаксического дерева.
S>На данном этапе хотя бы найти построение объектной модели по этому дереву с возможностью дампить в JS, а то придется писать вручную.

По каким ключевым словам гуглил и почему найденные результаты не устраивают? И ссылочку на компилируемый репозиторий, где ты попробовал что-то сделать, чтобы подтвердить что ты тут не просто флуд разводишь.
Re[8]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 05.09.24 12:14
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>По каким ключевым словам гуглил и почему найденные результаты не устраивают? И ссылочку на компилируемый репозиторий, где ты попробовал что-то сделать, чтобы подтвердить что ты тут не просто флуд разводишь.


По ключевым словам — на C++ нет ничего, а я ограничен в выборе технологий. Репо закрыт по NDA.

З.Ы.
В принципе написал уже простую версию сам для части инструкций и постепенно добавляю, но все-равно рассмотрел бы что-то готовое.
Отредактировано 05.09.2024 12:15 Shmj . Предыдущая версия .
Re[3]: Легковесная библиотека синтаксического дерева JS
От: F3V  
Дата: 06.09.24 05:22
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну, к примеру, нужно найти все имена переменных и заменить их на случайные. Потом найти все функции и добавить в начало функций несколько случайных инструкций, которые в конечном счете ничего не делают. Типа простой обфускации.


Поскольку мы на российском форуме, то по традиции:

1. Обфускацию Js кода не всякий код переживёт. Отлавливать такие баги на продакшене — то ещё удовольствие.
2. Делать анализ динамического языка на статически типизированном без дополнительной докомпиляции или динамических плагинов — так себе идея.

Пункт (2) требуем наличие виртуальной машины для трансформации.
Пункт (1) делает возможным лишь очень небольшой набор гарантированно безопасных трансформаций.

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

По теме:
Для этого можно на Js взять: PEG.js и разобрать парсером из примеров к нему.

Совет:
Поскольку ты в C++ ветке спрашиваешь, то для обфускации/оптимизиации кода можно перейти на С++/emscripten, а Js код оставить Js программистам.
Re[9]: Легковесная библиотека синтаксического дерева JS
От: SaZ  
Дата: 09.09.24 18:49
Оценка:
Здравствуйте, Shmj, Вы писали:

S>По ключевым словам — на C++ нет ничего, а я ограничен в выборе технологий. Репо закрыт по NDA.

Никакие NDA не запрещают сделать пет проект с аналогичной задачей. И в очередной раз напоминаю про: https://rsdn.org/Info/Howtoask.xml

S>В принципе написал уже простую версию сам для части инструкций и постепенно добавляю, но все-равно рассмотрел бы что-то готовое.

Вот с этого стоит начинать, а не тратить время людей с рсдн.
Re[10]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 10.09.24 10:00
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Никакие NDA не запрещают сделать пет проект с аналогичной задачей. И в очередной раз напоминаю про: https://rsdn.org/Info/Howtoask.xml


Нет ресурсов для этого.

S>>В принципе написал уже простую версию сам для части инструкций и постепенно добавляю, но все-равно рассмотрел бы что-то готовое.

SaZ>Вот с этого стоит начинать, а не тратить время людей с рсдн.

Так когда я спросил — еще ничего не было.
Re[11]: Легковесная библиотека синтаксического дерева JS
От: SaZ  
Дата: 10.09.24 16:49
Оценка:
Здравствуйте, Shmj, Вы писали:

SaZ>>Никакие NDA не запрещают сделать пет проект с аналогичной задачей. И в очередной раз напоминаю про: https://rsdn.org/Info/Howtoask.xml

S>Нет ресурсов для этого.

Тогда не стоит спрашивать. Нужно уважать других людей и правила комьюнити где вы общаетесь.
Re[12]: Легковесная библиотека синтаксического дерева JS
От: Shmj Ниоткуда  
Дата: 10.09.24 21:23
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>>>Никакие NDA не запрещают сделать пет проект с аналогичной задачей. И в очередной раз напоминаю про: https://rsdn.org/Info/Howtoask.xml

S>>Нет ресурсов для этого.

SaZ>Тогда не стоит спрашивать. Нужно уважать других людей и правила комьюнити где вы общаетесь.


Т.е. если нет ресурсов (времени/денег) чтобы запилить открытый проект — то нечего и на форуме спрашивать о готовых библиотеках ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.