From 9bbddda67110274010928b1aaba1afee06abeb0d Mon Sep 17 00:00:00 2001 From: luzhisheng Date: Wed, 23 Feb 2022 18:10:49 +0800 Subject: [PATCH] =?UTF-8?q?AST-=E5=8E=9F=E7=90=86+babel=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zy-AST-原理+babel安装/AST-原理+babel安装.md | 156 ++++++++++++++++++++ zy-AST-原理+babel安装/babel_test.js | 10 ++ zy-AST-原理+babel安装/babel_test2.js | 22 +++ zy-AST-原理+babel安装/read.js | 1 + zy-ast-hook-内存漫游/ast-hook-内存漫游.md | 2 + 5 files changed, 191 insertions(+) create mode 100644 zy-AST-原理+babel安装/AST-原理+babel安装.md create mode 100644 zy-AST-原理+babel安装/babel_test.js create mode 100644 zy-AST-原理+babel安装/babel_test2.js create mode 100644 zy-AST-原理+babel安装/read.js diff --git a/zy-AST-原理+babel安装/AST-原理+babel安装.md b/zy-AST-原理+babel安装/AST-原理+babel安装.md new file mode 100644 index 0000000..6481bc3 --- /dev/null +++ b/zy-AST-原理+babel安装/AST-原理+babel安装.md @@ -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 + } + ] + +输出效果 \ No newline at end of file diff --git a/zy-AST-原理+babel安装/babel_test.js b/zy-AST-原理+babel安装/babel_test.js new file mode 100644 index 0000000..5b91848 --- /dev/null +++ b/zy-AST-原理+babel安装/babel_test.js @@ -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); \ No newline at end of file diff --git a/zy-AST-原理+babel安装/babel_test2.js b/zy-AST-原理+babel安装/babel_test2.js new file mode 100644 index 0000000..ea8185d --- /dev/null +++ b/zy-AST-原理+babel安装/babel_test2.js @@ -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); + diff --git a/zy-AST-原理+babel安装/read.js b/zy-AST-原理+babel安装/read.js new file mode 100644 index 0000000..16a62bc --- /dev/null +++ b/zy-AST-原理+babel安装/read.js @@ -0,0 +1 @@ +var a = 1; \ No newline at end of file diff --git a/zy-ast-hook-内存漫游/ast-hook-内存漫游.md b/zy-ast-hook-内存漫游/ast-hook-内存漫游.md index b8e35ce..d42ff7c 100644 --- a/zy-ast-hook-内存漫游/ast-hook-内存漫游.md +++ b/zy-ast-hook-内存漫游/ast-hook-内存漫游.md @@ -48,3 +48,5 @@ hook.search('c99546cf032aaa5a679230de9a95c7db') ![debugger](../img/60.png) + +很轻松就定位到加密参数在内存中的位置 \ No newline at end of file