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 _0x34e16a = '3,4,0,5,1,2'['split'](',');
let _0x2eff02 = 0x0;
while (!![]) {
switch (_0x34e16a[_0x2eff02++]) {
case'0':
let _0x38cb15 = _0x4588f1 + _0x470e97;
continue;
case'1':
let _0x1e0e5e = _0x37b9f3[_0x50cee0(0x2e0, 0x2e8, 0x2e1, 0x2e4)];
continue;
case'2':
let _0x35d732 = [_0x388d4b(-0x134, -0x134, -0x139, -0x138)](_0x38cb15 >> _0x4588f1);
continue;
case'3':
let _0x4588f1 = 0x1;
continue;
case'4':
let _0x470e97 = 0x2;
continue;
case'5':
let _0x37b9f3 = 0x5 || _0x38cb15;
continue;
}
break;
}
`
// 默认为 script,当代码中含有 import 、export 等关键字时会报错,需要指定为 module
const ast = parse.parse(code, {
sourceType: "module"})
// 思路A---正向思维(先实现目标)
// 1.获取控制流原始数组,将 '3,4,0,5,1,2'['split'](',') 之类的语句转化成 ['3','4','0','5','1','2'] 之类的数组,
// 得到该数组之后,也可以选择把 split 语句对应的节点删除掉,因为最终代码里这条语句就没用了;
//
// 2.遍历第一步得到的控制流数组,依次取出每个值所对应的 case 节点;
// 3.定义一个数组,储存每个 case 节点 consequent 数组里面的内容,并删除 continue 语句对应的节点;
// 4.遍历完成后,将第三步的数组替换掉整个 while 节点,也就是 WhileStatement。
// 总结:获取到 While 语句节点,然后使用 path.getAllPrevSiblings() 方法获取其前面的所有兄弟节点,
// 遍历每个兄弟节点,找到与 switch() 里面数组的变量名相同的节点,然后再取节点的值进行后续处理
相关推荐
js逆向之常见的压缩和混淆
js逆向之常见的压缩和混淆
控制流平坦化还原示例代码,采用ast技术
控制流平坦化(Control Flow Flattening)是一种常见的代码混淆技术,旨在通过打乱程序的控制流结构,使其难以理解和分析。在这种技术中,程序的正常控制流(如条件分支、循环等)被替换为一种平坦化的结构,通常是通过一个主循环和一个状态变量来控制程序的执行路径。 还原控制流平坦化的过程通常包括以下几个步骤: 1. **识别主循环**:首先,需要识别出程序中的主循环,这是控制流平坦化的核心结构。主循环通常会包含多个条件分支,这些分支决定了程序的执行路径。 2. **分析状态变量**:接下来,需要分析主循环中的状态变量。状态变量通常用于控制程序的执行路径,通过改变状态变量的值,程序会在不同的分支之间跳转。 3. **重建控制流**:在识别出主循环和状态变量后,可以通过分析状态变量的变化和条件分支的逻辑,逐步重建程序的原始控制流结构。这通常涉及到将平坦化的控制流转换回正常的条件分支、循环等结构。 4. **优化代码**:最后,可以对还原后的代码进行优化,去除不必要的变量和冗余代码,使其更易于理解和维护。 还原控制流平坦化的过程需要对程序的控制流有深入的理解,并且可能需要
Moveit Servo学习
MoveIt Servo功能与配置指南 摘要:本文介绍了MoveIt Servo的功能特性,包括支持关节速度、末端执行器速度和位置控制,以及安全功能如奇点检查、碰撞检测等。通过示例展示了如何运行伺服控制demo,详细解析了关键节点和话题。最后以睿尔曼rml_63机器人为例,讲解了如何自定义伺服配置文件,包括环境设置、输入输出参数配置、平滑滤波器和规划场景监控等关键配置项。文章提供了从基础使用到自定义机器人配置的完整指导,帮助开发者实现高效的实时运动控制。
银行卡密码键盘 SM4 ECB模式+ANSI X9.8 格式标准(带主账号信息)PIN 加解密示例
文章目录1.软加解密示例2.知识点①ANSI X9.8 格式标准②主密钥,工作密钥加解密基本概念:加密种类:3.密码键盘操作4.工具 1.软加解密示例 ————————————————————————————————————————————------ 已知数据: 银行测试主密钥TMK: 1234567890ABCDEFABCDEF0987654321 通过签到接口得到: 工作密钥密文KeyVal...
深入解析LVDS电平标准在LCD屏接口设计中的关键作用
本文深入解析了LVDS电平标准在LCD屏接口设计中的核心作用。文章不仅阐释了LVDS低电压差分信号的工作原理、关键电气参数及抗噪优势,还详细对比了VESA与JEIDA两种主流数据格式,并提供了从PCB布局布线到信号调试的实战避坑指南,是确保高速、稳定显示的关键技术参考。
李大勇matlab密码,基于MatlabSimulink的太阳能热水系统仿真研究 沈超.doc
基于MatlabSimulink的太阳能热水系统仿真研究 沈超中国工程热物理学会 工程热力学与能源利用 编号:141090基于Matlab/Simulink的太阳能热水系统仿真研究沈 超1 1 余 鹏1 李洪欣1 魏新利2郑州大学土木工程学院,郑州 450001郑州大学化工与能源学院,郑州 45...
GOM Correlate拉伸试验后处理操作
本文描述了使用GOM Software 2022对拉伸试样进行后处理的操作,包括设置检测点、引伸计、输出应变数据到表格、输出报告为视频等
Vivado时序违约小结
目录1. setup time违约1.1 逻辑级数太高1.2 Fanout太大2. hold time 违约2.1 异步信号处理导致hold time违约 1. setup time违约 建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大,当然也可以尝试通过降频来解决建立时间违约。 1.1 逻辑级数太高 Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能
时间门控拉曼进展
拉曼光谱就像是用光给分子拍“指纹照”,通过激光照射样品,散射光会揭示样品的分子结构。但问题来了,样品有时会发荧光,就像拍照时闪光灯太亮,把指纹照模糊了。时间门控拉曼光谱技术就像加了个“快门”,只在拉曼信号出现的那一瞬间开门,把慢吞吞的荧光挡在门外,这样就能拍到清晰的“指纹”。
华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )
华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
1341



被折叠的 条评论
为什么被折叠?



