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')
|
||||
|
||||

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