From b304f9f37b7d4b4b32cdbde10d52e6500f3fc318 Mon Sep 17 00:00:00 2001 From: aiyingfeng Date: Fri, 25 Aug 2023 16:00:54 +0800 Subject: [PATCH] =?UTF-8?q?15.AST=E4=BB=A3=E7=A0=81=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../15.AST代码还原案例/1-2020-06-09.js | 27 +++++++++++++++++++ .../15.AST代码还原案例/1-encode-2020-06-09.js | 12 +++++++++ 2 files changed, 39 insertions(+) create mode 100644 AST抽象语法树/15.AST代码还原案例/1-2020-06-09.js create mode 100644 AST抽象语法树/15.AST代码还原案例/1-encode-2020-06-09.js diff --git a/AST抽象语法树/15.AST代码还原案例/1-2020-06-09.js b/AST抽象语法树/15.AST代码还原案例/1-2020-06-09.js new file mode 100644 index 0000000..ccc4fc3 --- /dev/null +++ b/AST抽象语法树/15.AST代码还原案例/1-2020-06-09.js @@ -0,0 +1,27 @@ +const fs = require('fs'); +const {parse} = require("@babel/parser"); +const traverse = require("@babel/traverse").default; +const generator = require("@babel/generator").default; +const types = require('@babel/types'); +let encode_file = "./1-encode-2020-06-09.js"; + +let js_code = fs.readFileSync(encode_file, {encoding: "utf-8"}); +let ast = parse(js_code, { + sourceType: 'module', +}); + +const visitor = { + CallExpression: { + enter(path) { + let {node} = path + let arguments = node.arguments + if (arguments[1].value != 'Hello AST'){ + path.remove() + } + } + } +} + +traverse(ast, visitor); +let {code} = generator(ast); +console.log(code) \ No newline at end of file diff --git a/AST抽象语法树/15.AST代码还原案例/1-encode-2020-06-09.js b/AST抽象语法树/15.AST代码还原案例/1-encode-2020-06-09.js new file mode 100644 index 0000000..4094715 --- /dev/null +++ b/AST抽象语法树/15.AST代码还原案例/1-encode-2020-06-09.js @@ -0,0 +1,12 @@ +var s = { + 'hello': function(_0x4c52de) { + (function(_0xea7649, _0x55a64b) { + return function(_0x46f67a, _0x29dec9) { + return function(_0x56ee68, _0x1607ce) { + return _0x56ee68(_0x1607ce); + }(_0x46f67a, _0x29dec9); + }(_0xea7649, _0x55a64b); + } + )(alert, "Hello AST"); + }, +}