《封号码罗》python爬虫之AST在js逆向中表达式计算(十九)

这篇博客介绍了如何使用Babel库的@babel/parser、@babel/traverse、@babel/types和@babel/generator来解析JavaScript代码,将其转化为AST,并进行遍历和节点替换操作。示例代码展示了对表达式的处理,如逻辑运算、算术运算、字符串转换等,并通过AST进行代码转换。
摘要由CSDN通过智能技术生成
const fs = require("fs");//文件读写
const parse = require("@babel/parser"); //解析为ast
const traverse = require('@babel/traverse').default;//遍历节点
const t = require('@babel/types');//类型
const generator = require('@babel/generator').default;//ast解析为代码


const code = `
const a = !![]+!![]+!![];
const b = Math.floor(12.34 * 2.12)
const c = 10 >> 3 << 1
const d = String(21.3 + 14 * 1.32)
const e = parseInt("1.893" + "45.9088")
const f = parseFloat("23.2334" + "21.89112")
const g = 20 < 18 ? '未成年' : '成年'
const _0x34e16a = '3,4,0,5,1,2'['split'](',')
`
// 	默认为 script,当代码中含有 import 、export 等关键字时会报错,需要指定为 module
const ast = parse.parse(code, {sourceType: "module"})

function replace_expression(path) {
    // path.evaluate()直接执行js代码返回一个对象
    // confident 置信度  value值
    const {confident, value} = path.evaluate()
    if (confident) {
        path.replaceInline(t.valueToNode(value))
    }
}

const visitor = {
    "BinaryExpression|CallExpression|ConditionalExpression": {
        enter: [replace_expression]
    }
}

traverse(ast, visitor)
const result = generator(ast, {jsescOption: {"minimal": true}}).code
console.log(result)
var a = '3,4,0,5,1,2'['split'](',');

console.log(a)

备注:学习K哥AST的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值