AST反混淆|对一段非常复杂的混淆代码深度剖析与还原

news2024/7/6 17:59:18

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1.代码片段

((((ld0 = ((ld1 = (ld1 = Uint8Array) && undefined || ld2) || 6) && encodeUTF8(ld1)) && 0 || (ld3 = ((ld4 = (ld5 = new ld3(ld0)) && undefined || ld5) || 6) && ld4) && 0 || (ld5 = ((ld0 = (ld1 = "length") && null || ld3[ld1]) || 7) && 8) && 0 || (ld8 = ((ld7 = ((ld9 = ld0 + ld5) || 2) && 6) || 3) && ld9 >>> ld7) && undefined || (ld10 = (ld11 = ((ld12 = 4) || 7) && ld8 << ld12) && null || 16) || 3) && (ld16 = (ld33 = (ld13 = ld11 + ld10) && undefined || ld13) && null || Uint8Array) && undefined || (ld32 = ((ld14 = ((ld34 = ld33) || 8) && 2) || 9) && ld34 << ld14) && null || (((ld15 = (ld17 = new ld16(ld32)) && null || ld17) && 0 || (ld18 = ld15) && null || (ld19 = "set") || 10) && ((ld20 = Uint8Array) || 4) && ((ld21 = ld4) || 4) && ((ld22 = "buffer") || 5) && ((ld23 = ld21[ld22]) || 7) && (ld24 = new ld20(ld23)) && null || ld18[ld19](ld24) && 0 || (ld25 = Uint32Array) || 5) && (((ld27 = ld15) || 8) && (ld31 = "buffer") && undefined || (ld26 = ld27[ld31]) && undefined || (ld30 = new ld25(ld26)) || 3) && (ld15 = ld30)) && null || (ld29 = new DataView(ld15.buffer)) && undefined || (ld28 = 0) || 1) && (ld6 -= 999);

说是复杂,其实就是赋值语句与逻辑表达式的各种相互嵌套罢了。

2.先导知识

经过多次询问GPT,得知,在一个js语句中,有些代码可能会执行,也可能不会执行。而我们如果要简化上面的代码,就要找出一定会执行的语句。

一般而言,我们遇到比较常见的代码节点类型如条件表达式以及逻辑表达式,它会存在上面的情况。

对于上面的混淆代码,它不包含 条件表达式,因此只需要处理 逻辑表达式 的情况即可。

对于一个赋值语句与逻辑表达式的各种相互嵌套的混淆代码,如何找出它第一条一定会执行的语句?

答案是 使用深度优先模式来遍历该语句。

3.还原思路

我们知道,节点的访问模式有两种,enter 和 exit,一般默认为 enter,

但是,对于这种嵌套的语句,使用 exit 更好。通过这种方式,可以找到第一条一定会执行的语句:

const splitLogicalExpression =
{
  LogicalExpression:
  {
    exit(path) {


      console.log(path.toString());
      return;
      }
   },
}

运行后的打印结果:

617b10bd7a6823d3a6d6d74a375e8420.png

如图,红色框内是一定可以被执行的语句,因此将它提到整个表达式的前面来,而这个逻辑表达式的值 可以看出是 false,即有两步操作:

1.将 ld1 = Uint8Array 这行代码 提到整个代码的前面来;

2.因为代码已经执行了,可以直接用结果来继续替换,这里很明显它的结果是false,因此直接用false替换即可。

替换后的代码应该是这样的:

01da0975ab60c61b0c12b1290f101a3b.png

经过这一步后,接下来处理的逻辑表达式就应该是:

(ld1 = false || ld2) || 6

这里又可以把 ld1 = false || ld2 给提到混淆代码的前面去,而后面的 || 6,可以确定这个表达式恒为true,因此它可以直接被替换成 true。

第二步处理后的代码应该是这样的:

81dd04e5dd18e977a9318b0652f91d94.png

........

就这么一起处理下去,最终我们得到下面的代码:

a7f86f62e9c0029c47b09629cba9f9b8.png

看到了代码中包含大量的 false 和 true,这个时候再写个插件,去掉这些false 和true,得到最终的代码:

f2aa9429f907572952c8303fd6ed5ee8.png

这样代码就被我们轻松还原了。可以说,非常的清爽!

今天的文章就分享到这里,感谢大家的阅读!

欢迎加入知识星球,学习更多AST和爬虫技巧。

32900668cf6e0db27b8bbb542ff9294a.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1711585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算-Lambda事件 (Lambda Events)

检索事件信息 (Retrieving Event Information) 在上一个主题中&#xff0c;我们已经看到了如何创建一个Lambda函数、添加handler、添加触发器和配置执行策略。在本主题中&#xff0c;我们将对其进行扩展。到目前为止&#xff0c;我们看到的handler应用非常简单&#xff0c;但我…

uniapp一些问题解决

1.按钮边框如何去除&#xff1f; 参考博主&#xff1a;微信小程序按钮去不掉边框_微信小程序button去掉边框-CSDN博客文章浏览阅读1k次。最近在学uni-app&#xff0c;顺便自己写个小程序。左上角放了个button&#xff0c;可边框怎么也去不掉…原来微信小程序的按钮要去掉边框要…

基于 Solana 的 Drift Protocol 快速崛起,重新定义去中心化衍生品市场

随着区块链技术的快速发展&#xff0c;加密市场的格局正在悄然改变。投资者对透明度、效率和去中心化的需求愈发强烈&#xff0c;之前完全由中心化交易主导的加密货币交易&#xff0c;开始向链上转移。 根据 Coingecko 的最新数据&#xff0c;CEX 和 DEX 的现货交易量已经达到了…

凤香的“蜜”密

执笔 | 文 清 编辑 | 古利特 “遇水则漏&#xff0c;遇酒生香”。酒海&#xff0c;一种大型盛酒容器&#xff0c;因盛酒量以“吨”计算&#xff0c;故称“海”&#xff0c;传于唐宋&#xff0c;兴盛于明清&#xff0c;距今有1400多年的历史。文人墨客笔下&#xff0c;也多有…

xjar加密springboot的jar包,并编译为执行程序

场景&#xff1a;当前项目需要进行jar包部署在windows环境和linux环境&#xff0c;并要求使用xjar加密。 1. xjar加密 源码程序自行搜索&#xff0c;这里只介绍加密及运行&#xff0c;运行加密程序&#xff0c;指定jar包&#xff0c;输入密码 2. 加密后的目录 3. go程序编译 …

AI图书推荐:基于ChatGPT API和Python开发应用程序的详细指南

ChatGPT已经以其革命性的能力引起了人们的关注&#xff0c;利用其API可能会成为你的游戏规则改变者。这不仅仅是关于编码&#xff1b;它是关于为您的创作添加一层智能&#xff0c;将它们提升到之前无法想象的水平。《基于ChatGPT API和Python开发应用程序的详细指南》&#xff…

Git——pull request详细教程

当我们需要协助其他仓库完成更改时&#xff0c;往往会用到git中的Pull Request操作&#xff0c;从而方便团队的协作管理和代码持续集成。 下面是详细的教程步骤。 一. Fork目标项目 比如说我现在要fork以下Qwen-VL的项目&#xff0c;如图所示&#xff1a; 随后点击Create即可…

操作系统—简要分析FAT文件系统

文章目录 简要分析FAT文件系统1.FAT的起源与发展历史2.FAT的基本结构与目录管理机制(1).基本结构(2).文件分配表(3).根目录区(4).数据区 3.优点与缺点4.改进与替代方案(1).exFAT(2).ext2/3/4(3).NTFS 小结参考文献 简要分析FAT文件系统 1.FAT的起源与发展历史 为了更好地管理磁…

柬埔寨语翻译通App,一款真正实现高棉语翻译、语音识别和中柬双语无障碍交流的应用程序。

柬埔寨语翻译通App&#xff0c;一款真正实现高棉语翻译、语音识别和中柬双语无障碍交流的应用程序。它不仅提供文字、语音、图片的翻译&#xff0c;还融入了柬埔寨文化元素&#xff0c;让你在每一次翻译中都能感受到柬埔寨的文化魅力。 这款App支持中文、高棉语双语互译&#x…

LeetCode //C - 143. Reorder List

143. Reorder List You are given the head of a singly linked-list. The list can be represented as: L0 → L1 → … → Ln - 1 → Ln Reorder the list to be on the following form: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … You may not modify the values i…

[图解]企业应用架构模式2024新译本讲解03-事务脚本+表数据入口

1 00:00:00,570 --> 00:00:06,290 这里先创建一个service的对象 2 00:00:07,000 --> 00:00:12,470 然后调用对象的方法、操作 3 00:00:12,480 --> 00:00:13,750 就是事务脚本 4 00:00:14,700 --> 00:00:15,900 然后参数是1 5 00:00:16,660 --> 00:00:19,490…

618有什么宠物空气净化器推荐?希喂FreAir Lite宠物空气净化器真实体验

一、宠物空气净化器的必要性 掉毛季又来了&#xff0c;猫咪的毛发满天飞&#xff0c;怎么办&#xff1f;我家里的猫咪一到换毛季就掉满地的毛发&#xff0c;尤其喜欢在家里奔跑打闹&#xff0c;结果整个房间都是毛。为了减少家里空气中的浮毛&#xff0c;你都做过哪些努力呢&a…

Shell编程用户注册及登录

需求&#xff1a; 用Shell编程完成用户的注册及登录 完成 注册用户 用户名首字母大写 密码需8个字符及以上且含“$”,“&”,“-”中的任意一个手机号需以139开头的11位号码邮箱需以数字开头的qq.com 2.检测重复注册 3.注册信息写入/etc/secfinfe 4.用户登录 5.检测是否存…

SQLI-labs-第二十七关和第二十七a关

目录 第二十七关 1、判断注入点 2、判断数据库 3、判断表名 第二十七a关 第二十七关 知识点&#xff1a;空格、select、union等过滤绕过 思路&#xff1a; 通过分析源码&#xff0c;我们可以知道对用户的输入进行过滤&#xff0c;对空格、select、union等进行了过滤&…

钡铼PLC集成BL121PO协议网关优化电子制造产线的生产效率

PLC转OPC UA协议转换网关BL121PO在电子制造产线中的优化应用&#xff0c;可以显著提高生产效率&#xff0c;促进生产线的智能化和信息化发展。本文将从以下几个方面进行阐述&#xff1a; 提高设备间通信效率&#xff1a;PLC转OPC UA协议转换网关BL121PO通过高效的协议转换&…

Docker-02-02 Docker离线下载安装与配置(linux)

一、Docker下载 官网下载地址:Index of linux/static/stable/x86_64/ (docker.com) 推荐下载最新的社区版: 二、将安装包上传至服务器并解压 将安装包上传至服务器的/usr/local目录并解压 cd /usr/local lstar -zxvf docker-18.06.3-ce.tgz三、将docker目录下的文件复制到…

ubuntu安全加固

知识背景&#xff1a; 项目背景&#xff1a; 常用命令&#xff1a; useradd: adduser: getent passwd: getent group: id username: adduser newname sudo: sudo userdel <username> sudo rm -rf /home/<username> userdel groupdel 修改shell为/bin…

防止自动化攻击的最佳实践

防止自动化攻击的最佳实践 在当今的网络安全环境中&#xff0c;保护用户账户免受自动化攻击已成为每个网站和应用程序的重要任务。攻击者可以利用多种不同类型的自动化攻击来尝试破坏用户账户。本文将详细介绍常见的攻击类型及其防御机制&#xff0c;帮助您更好地保护用户账户…

基于PHP+MySQL组合开发的720VR全景小程序源码系统 一键生成三维实景 前后端分离带网站的安装代码包以及搭建教程

系统概述 这款源码系统是专门为实现 720VR 全景展示而设计的。它结合了先进的技术和创新的理念&#xff0c;能够将真实场景以全景的形式呈现给用户&#xff0c;让用户仿佛身临其境。该系统采用 PHP 进行后端开发&#xff0c;MySQL 作为数据库管理系统&#xff0c;确保了系统的…

IC618 虚拟机 EDA Calibre2019 Hspice2018 Spectre19.1

虚拟机包含 CentOS 7.9 Cadence IC618 Calibre 2019 Hspice 2018 Spectre19.1 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1aMtPO2G5ad-x5BtIJjCDig?pwdxcii 提取码&#xff1a;xcii