mirror of
https://github.com/luzhisheng/js_reverse.git
synced 2025-04-20 01:34:55 +08:00
AST-原理+babel安装
This commit is contained in:
parent
3b0f8477fa
commit
9bbddda671
156
zy-AST-原理+babel安装/AST-原理+babel安装.md
Normal file
156
zy-AST-原理+babel安装/AST-原理+babel安装.md
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
## ast
|
||||||
|
|
||||||
|
ast抽象语法树
|
||||||
|
|
||||||
|
## var a = 1 如果翻译成ast
|
||||||
|
|
||||||
|
"root":{
|
||||||
|
"赋值语句":{
|
||||||
|
"左边":{
|
||||||
|
"名称":"a",
|
||||||
|
"其他的信息":....
|
||||||
|
},
|
||||||
|
"右边":1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
发现json文件能很好的描述tree结构,可以对上面数据做增删改查
|
||||||
|
|
||||||
|
## ob混淆 sojson
|
||||||
|
|
||||||
|
你提交一断js代码 -》混淆器(ast)-》返回到网页
|
||||||
|
|
||||||
|
## 哪些地方用到ast
|
||||||
|
|
||||||
|
ide
|
||||||
|
格式化
|
||||||
|
js压缩
|
||||||
|
v8 解释器
|
||||||
|
|
||||||
|
## ast 插件 babel
|
||||||
|
|
||||||
|
https://www.babeljs.cn/
|
||||||
|
|
||||||
|
Babel 是一个 JavaScript 编译器。
|
||||||
|
|
||||||
|
Babel 是一个工具链,主要用于将采用 ECMAScript 2015+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。
|
||||||
|
|
||||||
|
es6 -> es5
|
||||||
|
|
||||||
|
js只有语法没有实现,跨平台 -》
|
||||||
|
|
||||||
|
1.一次编译多个解释器运行 mono java js,都有不同平台的解释器
|
||||||
|
2.多次编译,直接运行 c++(v8) gcc 指定运行平台
|
||||||
|
|
||||||
|
Babel 手册
|
||||||
|
|
||||||
|
https://github.com/jamiebuilds/babel-handbook/blob/master/translations/zh-Hans/README.md
|
||||||
|
|
||||||
|
安装 babel-core 代码
|
||||||
|
|
||||||
|
npm install babel-core
|
||||||
|
|
||||||
|
测试编译成ast代码
|
||||||
|
|
||||||
|
var babel = require("@babel/core");
|
||||||
|
|
||||||
|
var code = "var a = 1;";
|
||||||
|
|
||||||
|
const result = babel.transform(code, {ast: true});
|
||||||
|
console.log(result.code);
|
||||||
|
console.log("分割----");
|
||||||
|
console.log(result);
|
||||||
|
console.log("分割----");
|
||||||
|
console.log(result.ast.program.body);
|
||||||
|
|
||||||
|
输出效果 body 里面才有真正的内容
|
||||||
|
|
||||||
|
var a = 1;
|
||||||
|
分割----
|
||||||
|
{
|
||||||
|
metadata: {},
|
||||||
|
options: {
|
||||||
|
assumptions: {},
|
||||||
|
ast: true,
|
||||||
|
targets: {},
|
||||||
|
cloneInputAst: true,
|
||||||
|
babelrc: false,
|
||||||
|
configFile: false,
|
||||||
|
browserslistConfigFile: false,
|
||||||
|
passPerPreset: false,
|
||||||
|
envName: 'development',
|
||||||
|
cwd: '/home/aiyingfeng/spider/js_reverse/zy-AST-原理+babel安装',
|
||||||
|
root: '/home/aiyingfeng/spider/js_reverse/zy-AST-原理+babel安装',
|
||||||
|
rootMode: 'root',
|
||||||
|
plugins: [],
|
||||||
|
presets: [],
|
||||||
|
parserOpts: { sourceType: 'module', sourceFileName: undefined, plugins: [] },
|
||||||
|
generatorOpts: {
|
||||||
|
filename: undefined,
|
||||||
|
auxiliaryCommentBefore: undefined,
|
||||||
|
auxiliaryCommentAfter: undefined,
|
||||||
|
retainLines: undefined,
|
||||||
|
comments: true,
|
||||||
|
shouldPrintComment: undefined,
|
||||||
|
compact: 'auto',
|
||||||
|
minified: undefined,
|
||||||
|
sourceMaps: false,
|
||||||
|
sourceRoot: undefined,
|
||||||
|
sourceFileName: 'unknown'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ast: Node {
|
||||||
|
type: 'File',
|
||||||
|
start: 0,
|
||||||
|
end: 10,
|
||||||
|
loc: SourceLocation {
|
||||||
|
start: [Position],
|
||||||
|
end: [Position],
|
||||||
|
filename: undefined,
|
||||||
|
identifierName: undefined
|
||||||
|
},
|
||||||
|
errors: [],
|
||||||
|
program: Node {
|
||||||
|
type: 'Program',
|
||||||
|
start: 0,
|
||||||
|
end: 10,
|
||||||
|
loc: [SourceLocation],
|
||||||
|
sourceType: 'module',
|
||||||
|
interpreter: null,
|
||||||
|
body: [Array],
|
||||||
|
directives: [],
|
||||||
|
leadingComments: undefined,
|
||||||
|
innerComments: undefined,
|
||||||
|
trailingComments: undefined
|
||||||
|
},
|
||||||
|
comments: [],
|
||||||
|
leadingComments: undefined,
|
||||||
|
innerComments: undefined,
|
||||||
|
trailingComments: undefined
|
||||||
|
},
|
||||||
|
code: 'var a = 1;',
|
||||||
|
map: null,
|
||||||
|
sourceType: 'module',
|
||||||
|
externalDependencies: Set(0) {}
|
||||||
|
}
|
||||||
|
分割----
|
||||||
|
[
|
||||||
|
Node {
|
||||||
|
type: 'VariableDeclaration',
|
||||||
|
start: 0,
|
||||||
|
end: 10,
|
||||||
|
loc: SourceLocation {
|
||||||
|
start: [Position],
|
||||||
|
end: [Position],
|
||||||
|
filename: undefined,
|
||||||
|
identifierName: undefined
|
||||||
|
},
|
||||||
|
declarations: [ [Node] ],
|
||||||
|
kind: 'var',
|
||||||
|
leadingComments: undefined,
|
||||||
|
innerComments: undefined,
|
||||||
|
trailingComments: undefined
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
输出效果
|
10
zy-AST-原理+babel安装/babel_test.js
Normal file
10
zy-AST-原理+babel安装/babel_test.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
var babel = require("@babel/core");
|
||||||
|
|
||||||
|
var code = "var a = 1;";
|
||||||
|
|
||||||
|
const result = babel.transform(code, {ast: true});
|
||||||
|
console.log(result.code);
|
||||||
|
console.log("分割----");
|
||||||
|
console.log(result);
|
||||||
|
console.log("分割----");
|
||||||
|
console.log(result.ast.program.body);
|
22
zy-AST-原理+babel安装/babel_test2.js
Normal file
22
zy-AST-原理+babel安装/babel_test2.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// 将JS源码转换成语法树
|
||||||
|
var parser = require("@babel/parser");
|
||||||
|
// 为parser提供模板引擎
|
||||||
|
var template = require("@babel/template").default;
|
||||||
|
// 遍历AST
|
||||||
|
var traverse = require("@babel/traverse").default;
|
||||||
|
// 操作节点,比如判断节点类型,生成新的节点等
|
||||||
|
var t = require("@babel/types");
|
||||||
|
// 可以直接用type声明一断新的代码
|
||||||
|
// 将语法树转换为源代码
|
||||||
|
var generator = require("@babel/generator").default;
|
||||||
|
// 操作文件
|
||||||
|
var fs = require("fs");
|
||||||
|
|
||||||
|
var jscode = fs.readFileSync("read.js", { //更改读取文件
|
||||||
|
encoding: "utf-8"
|
||||||
|
});
|
||||||
|
|
||||||
|
let ast = parser.parse(jscode);
|
||||||
|
|
||||||
|
console.log(ast);
|
||||||
|
|
1
zy-AST-原理+babel安装/read.js
Normal file
1
zy-AST-原理+babel安装/read.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
var a = 1;
|
@ -48,3 +48,5 @@
|
|||||||
hook.search('c99546cf032aaa5a679230de9a95c7db')
|
hook.search('c99546cf032aaa5a679230de9a95c7db')
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
很轻松就定位到加密参数在内存中的位置
|
Loading…
x
Reference in New Issue
Block a user