Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Скрипт на Node для замены hex на dec (https://javascript.ru/forum/node-js-io-js/83019-skript-na-node-dlya-zameny-hex-na-dec.html)

sabot4ge 28.08.2021 18:47

Скрипт на Node для замены hex на dec
 
ищу помощи в написании скрипта для node или python
для того чтобы он искал в файле все Hex числа в виде выражений, высчитывал их и заменял на Dec
пользовался банальным
console.log(parseInt(0x2294+-0x3d6*-0x1+-0x24c6))

для получения цифр, но вручную по 1 выражению занимает очень много времени. т.к. в файле их тысячи:( :help:

MallSerg 28.08.2021 19:58

Наверное это продолжение темы https://javascript.ru/forum/node-js-...e-modulya.html

Думаю у тебя задача не правильно сформулирована нужен не парсинг а синтаксический анализатор на подобии https://esprima.org/demo/parse.html# что бы найти лексемы в выражениях и заменить их на более читаемый вид.

Ну или использовать http://www.jsnice.org/

sabot4ge 28.08.2021 20:03

Цитата:

Сообщение от MallSerg (Сообщение 539805)
Наверное это продолжение темы https://javascript.ru/forum/node-js-...e-modulya.html

Думаю у тебя задача не правильно сформулирована нужен не парсинг а синтаксический анализатор на подобии https://esprima.org/demo/parse.html# что бы найти лексемы в выражениях и заменить их на более читаемый вид.

Ну или использовать http://www.jsnice.org/

отчасти возможно.
в коде есть подобное
nC=0x1*0x256f+-0x82f2+-0x5*-0x2b02,
nd=0x546e+0x2491+0x1*0x89,
S0=-0x4157+0xd991+-0x61*0x51,
S1=0xd3e+-0x24b3+0xd*0x253,
S2=-0xc863+0x1728+-0x1*-0x1522b,
S3=-0x1bee+0xef*0x3+0x1bfb,
S4=-0x266f*0x1+0xa*-0xcdb+-0x1*-0x147f7,
S5=0x5a*-0x124+0x366d*0x2+0x9ac9,
S6=-0x7ba6*0x2+-0x2*0x8964+0x2ab10,
S7=-0x390e*0x2+-0xe51*-0x2+0xf677,


файл очень большой (~0.9mb)
нужно найти все вот эти выражения, прокалькулировать и вывести результат в виде 1 единственной цифры на каждое выражение естественно.
чтобы по итогу вышло так
no=20910,
nm=1200,
nL=31100,
np=520,
na=31110,

jsnice пробовал, но все эти деобфускаторы, бьютифаеры только код ломают

ksa 28.08.2021 21:15

Цитата:

Сообщение от sabot4ge (Сообщение 539806)
нужно найти все вот эти выражения, прокалькулировать и вывести результат в виде 1 единственной цифры на каждое выражение естественно.
чтобы по итогу вышло так
no=20910,
nm=1200,
nL=31100,
np=520,
na=31110,

Так пойдет?
let str = `
	nC=0x1*0x256f+-0x82f2+-0x5*-0x2b02,
	nd=0x546e+0x2491+0x1*0x89,
	S0=-0x4157+0xd991+-0x61*0x51,
	S1=0xd3e+-0x24b3+0xd*0x253,
	S2=-0xc863+0x1728+-0x1*-0x1522b,
	S3=-0x1bee+0xef*0x3+0x1bfb,
	S4=-0x266f*0x1+0xa*-0xcdb+-0x1*-0x147f7,
	S5=0x5a*-0x124+0x366d*0x2+0x9ac9,
	S6=-0x7ba6*0x2+-0x2*0x8964+0x2ab10,
	S7=-0x390e*0x2+-0xe51*-0x2+0xf677,
`
str = str.replace(/=(.*)(?=,)/g, (e, p) => '=' + eval(p))
alert(str)

MallSerg 28.08.2021 21:18

Думаю тебе будет правильно разобраться с такой темой как "AST дерево".

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

Реальная твоя задача для меня еще не понятна возможно то что ты хочешь получить уже есть в строковых значениях в снапшоте отладчика ну или это можно поймать в другом месте парой кликов.

MallSerg 28.08.2021 22:06

https://www.youtube.com/watch?v=ILSpvViUlPU хороший доклад про AST


Часовой пояс GMT +3, время: 08:39.