当前位置: 首页 > news >正文

做网站公司东莞/爱站网关键词查询系统

做网站公司东莞,爱站网关键词查询系统,wordpress积分推广插件,工作服款式图片大全一、AST 技术核心原理 抽象语法树(AST) 是代码的“骨架”,它把代码拆解成一个个节点,就像把一棵大树拆成树枝、树叶一样。通过分析和修改这些节点,我们可以精准地还原代码的逻辑。 二、实战案例 1:还原字…

一、AST 技术核心原理

抽象语法树(AST) 是代码的“骨架”,它把代码拆解成一个个节点,就像把一棵大树拆成树枝、树叶一样。通过分析和修改这些节点,我们可以精准地还原代码的逻辑。

二、实战案例 1:还原字符串编码

混淆代码特征

混淆代码会把字符串拆成数组,然后通过索引访问,比如:

const _0x5c0d = ["Hello", "World", "log", "split", "join"];
console[_0x5c0d[2]](_0x5c0d[0][_0x5c0d[3]]("")[_0x5c0d[4]]("-"));
// 输出 "H-e-l-l-o"
反混淆步骤
  1. 安装依赖

    npm install @babel/parser @babel/traverse @babel/generator
  2. 解析和还原代码

    • 用 Babel 把代码解析成 AST。

    • 遍历 AST,找到字符串数组的定义。

    • 替换所有数组索引访问为实际的字符串值。

const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;const code = `
const _0x5c0d = ["Hello", "World", "log", "split", "join"];
console[_0x5c0d[2]](_0x5c0d[0][_0x5c0d[3]]("")[_0x5c0d[4]]("-"));
`;// 解析为 AST
const ast = parser.parse(code);// 遍历 AST 节点
traverse(ast, {VariableDeclarator(path) {// 找到字符串数组if (path.node.id.name === "_0x5c0d") {const stringArray = path.node.init.elements.map(e => e.value);// 替换所有数组引用path.scope.traverse(path.scope.block, {MemberExpression(subPath) {const node = subPath.node;if (node.object.name === "_0x5c0d" && node.property.type === "NumericLiteral") {const value = stringArray[node.property.value];subPath.replaceWith({ type: "StringLiteral", value });}}});}}
});// 生成还原后的代码
const output = generator(ast).code;
console.log(output);

输出结果

console["log"]("Hello"["split"]("")["join"]("-"));
// 进一步简化为:console.log("H-e-l-l-o");

三、实战案例 2:修复控制流扁平化

混淆代码特征

混淆代码会把逻辑打乱成一个状态机,比如:

function getSum(n) {let state = 0, total = 0, i = 0;while (true) {switch (state) {case 0: state = 1; break;case 1: if (i < n) state = 2; else state = 3; break;case 2: total += i; i++; state = 1; break;case 3: return total;}}
}
反混淆步骤
  1. 识别状态机模式

    • 找到 switch-case 结构。

    • 分析 state 变量的跳转逻辑。

  2. 重构逻辑

    • 把状态机逻辑还原成正常的循环结构。

const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const t = require("@babel/types");const code = `...上述控制流代码...`;
const ast = parser.parse(code);traverse(ast, {FunctionDeclaration(path) {const body = path.get("body.body");const switchStmt = body.find(p => p.isSwitchStatement());// 提取状态转移逻辑const stateMap = new Map();switchStmt.get("cases").forEach(casePath => {const test = casePath.node.test.value;const consequent = casePath.get("consequent");stateMap.set(test, consequent);});// 重构为 for 循环const newBody = [t.variableDeclaration("let", [t.variableDeclarator(t.identifier("total"), t.numericLiteral(0))]),t.forStatement(t.variableDeclaration("let", [t.variableDeclarator(t.identifier("i"), t.numericLiteral(0))]),t.binaryExpression("<", t.identifier("i"), t.identifier("n")),t.updateExpression("++", t.identifier("i")),t.blockStatement([t.expressionStatement(t.assignmentExpression("+=", t.identifier("total"), t.identifier("i")))])),t.returnStatement(t.identifier("total"))];path.get("body").replaceWith(t.blockStatement(newBody));}
});// 输出还原后代码
console.log(generator(ast).code);

输出结果

function getSum(n) {let total = 0;for (let i = 0; i < n; i++) {total += i;}return total;
}

四、对抗混淆的高级技巧

  1. 处理多层嵌套

    • 混淆代码可能把数组多层嵌套,需要递归展开所有层级。

  2. 动态解密函数处理

    • 若字符串解密通过函数实现,AST 需模拟执行函数逻辑。

  3. 符号执行优化

    • 对条件进行数学推导,消除永远无法执行的分支。

五、工具链推荐

工具用途示例命令
@babel/parser代码解析为 ASTparser.parse(code)
@babel/traverse节点遍历与修改traverse(ast, { ... })
@babel/generator从 AST 生成代码generator(ast).code

六、总结

AST 反混淆的核心步骤

  1. 解析:把代码转换为结构化的 AST。

  2. 识别模式:找到字符串数组、控制流状态机等特征。

  3. 语义还原:通过节点替换或逻辑重构恢复原始逻辑。

  4. 验证:确保重构后的代码功能与原混淆代码一致。

注意事项

  • 混淆工具可能插入虚假节点(如无用循环),需结合数据流分析过滤。

  • 遇到 evalFunction 动态代码时,需结合动态执行。

  • 推荐结合 Prettier 格式化还原后的代码,提升可读性。

通过 AST 技术,我们可以从“代码加密 → 结构解析 → 逻辑还原”完成全链路逆向工程,是应对现代混淆技术的核心手段!

http://www.whsansanxincailiao.cn/news/30343314.html

相关文章:

  • 网站制作公司 深圳/品牌推广专员
  • 网站如何自动手机版/网络营销策略名词解释
  • 中国手机网站大全/seo优化交流
  • 深圳网站制作服务公/培训心得体会1500字
  • 想采集某类型网站怎么做/广东seo网站优化公司
  • 龙华网站建设招聘/淘宝店铺怎么运营
  • 吉林省高等级公路建设局 网站/软文是什么样子的
  • 广西建设工程质检安全网站/网站建设推广公司
  • 网站建设后台实训体会/网店推广实训系统
  • abbs建筑网站/品牌推广和营销推广
  • 网站维护与建设ppt/佛山做seo推广公司
  • 织梦网站标题被改/产品推广平台排行榜
  • 响应式网站建设案例/年度关键词
  • 手机网站需要多少钱/网络运营推广是做什么的
  • 如何建设淘宝客网站/网络优化工具
  • 奥鹏作业代做靠谱的网站/百度移动端点赞排名软件
  • 表单大师做网站/靠谱的推广平台有哪些
  • wdcp 网站日志/b站免费推广app大全
  • 海西州公司网站建设/河南网站关键词优化代理
  • 网页制作与网站建设文档/优化大师win10
  • 济宁专业网站制作公司/品牌宣传策划方案
  • 兰州医院网站建设/培训网站
  • 阜宁县城乡建设局新的官方网站/广告推广文案
  • 网站的整体结构/网站收录优化
  • 网站顶部图片素材/seo快速培训
  • 现在帮别人做网站赚钱不/站长工具pr值查询
  • 企业管理软件销售/移动网站推广如何优化
  • 长沙市住房和城乡建设局网站/网络营销策略的制定
  • 建设btob网站需要多少资金/免费收录网站
  • 国外推广网站有哪些/北京网站seo技术厂家