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

关注它,不迷路。       

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

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.mzph.cn/web/18336.shtml

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

相关文章

计算机视觉的技术与算法:揭开智能世界的神秘面纱

目录 引言&#xff1a; 一、计算机视觉的基本原理 二、计算机视觉的关键技术 三、计算机视觉的经典算法与挑战 四、计算机视觉的应用案例分析 结语 引言&#xff1a; 计算机视觉&#xff0c;作为人工智能领域的一个重要分支&#xff0c;近年来在科技界引起了广泛关注。…

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

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

clickhouse——clickhouse单节点部署及基础命令介绍

clickhouse支持运行在主流的64位CPU架构的linux操作系统之上&#xff0c;可以通过源码编译&#xff0c;预编译压缩包&#xff0c;docker镜像和rpm等多种方式进行安装。 一、单节点部署 1、安装curl工具 yum install -y curl 2、添加clickhouse的yum镜像 curl -s https://pack…

R包Colorfindr识别图片颜色|用刀剑神域方式打开SCI科研配色

1.前言 最近忙里偷闲&#xff0c;捣鼓一下配色&#xff0c;把童年回忆里的动漫都搬进来&#xff0c;给科研信仰充值吧&#xff5e; 提取颜色之前写过一个Py的&#xff0c;那个很准确不过调参会有点麻烦。这里分享一个比较懒人点的R包吧&#xff0c;虽然会有一定误差&#xff…

数据分析之统计学基础

数据分析是现代企业和科研中不可或缺的一部分&#xff0c;而统计学是数据分析的基石。在本篇博客中&#xff0c;我们将介绍统计学的基础知识&#xff0c;涵盖数据类型、描述性统计&#xff08;集中趋势、离散程度和偏差程度&#xff09;&#xff0c;并通过代码实例加以说明。 …

redis数据类型之string,list

华子目录 key操作说明SCAN cursor [MATCH pattern] [COUNT count]dump与restorekeys 通配符 示例演示 string说明setbit key offset valuegetbit key offsetsetrange key offset value List结构图相关命令lrem key count valueltrim key count value示例&#xff1a;使用 LTRIM…

Octo:伯克利开源机器人开发框架

【摘要】在各种机器人数据集上预先训练的大型策略有可能改变机器人学习&#xff1a;这种通用机器人策略无需从头开始训练新策略&#xff0c;只需使用少量领域内数据即可进行微调&#xff0c;但具有广泛的泛化能力。然而&#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

闹掰了? 传Google Pixel 10芯片转单了 | 百能云芯

根据最新消息&#xff0c;Google Tensor G5处理器可能将选择台积电作为其新的生产伙伴&#xff0c;并计划在2025年的Pixel 10系列手机上亮相。这一消息由Android Authority率先报道&#xff0c;引起了业界的广泛关注。 据悉&#xff0c;自从2021年Google推出自研的Tensor处理器…

儿童礼物笔记

文章目录 女孩礼物毛绒玩具音乐水晶系列水彩笔 男孩礼物益智类玩具积木类泡沫类机动玩具类 小孩过生日或儿童节&#xff0c;选礼物想破脑袋&#xff0c;做个笔记吧。 如果自家的小孩&#xff0c;还好说些&#xff0c;送亲友就需要动动脑筋。 女孩礼物 毛绒玩具 不错的选择&a…

前端Ajax、Axios和Fetch的用法和区别笔记

前端 JavaScript 开发中&#xff0c;进行 HTTP 请求的三种主要方式是 Ajax、Axios 和 Fetch。这三种方式各有优缺点&#xff0c;并且适用于不同的场景。在合适的业务场景下使用&#xff0c;以下是它们的区别和使用举例。 1. Ajax Ajax&#xff08;Asynchronous JavaScript an…

Flutter 中的 FractionalTranslation 小部件:全面指南

Flutter 中的 FractionalTranslation 小部件&#xff1a;全面指南 在 Flutter 的丰富布局库中&#xff0c;FractionalTranslation 是一个允许你将子组件沿着一个轴或两个轴进行部分平移的动画小部件。这种类型的平移通常用于创建滑动效果&#xff0c;如卡片的滑动删除或滑动展…

14.微信小程序之地理定位功能

目录 1.地理定位介绍 1.1 申请开通 1.2 使用方法 2.拒绝授权后的解决方案 3.开通腾讯位置服务 4.LBS 逆地址解析 1.地理定位介绍 小程序地理定位是指通过小程序开发平台提供的 API&#xff0c;来获取用户的地理位置信息。用户在使用小程序时&#xff0c;可以授权小程序获…

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…

医疗小程序源码SpringBoot2.X + Vue + UniAPP全栈开发

源码说明&#xff1a; 看到好多坛友都在求SpringBoot2.X Vue UniAPP&#xff0c;全栈开发医疗小程序 – 带源码课件&#xff0c;我看了一下&#xff0c;要么链接过期&#xff0c;要么课件有压缩密码。 特意整理了一份分享给大家&#xff0c;个人认为还是比较全面的。 希望…

【数据结构】-- 栈

栈 引入&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的元素遵循先进后出的原则&#xff0c;先入栈的元素总是先后出栈。 压栈&#xff1a;栈的插入操作叫…

04--SpringBoot热部署与日志

1、热部署 1.1 引言 为了进一步提高开发效率&#xff0c;SpringBoot为我们提供了全部项目热部署&#xff0c;日后在开发过程中修改了部分代码或者相关配置文件之后&#xff0c;不需要再重启服务使其生效。在项目中开启了全局热部署之后&#xff0c;只需要在修改之后等待几秒钟…

Python内置数据类型详解:从基础到进阶

Python内置数据类型详解:从基础到进阶 在Python编程中,数据类型是构建程序的基础。Python提供了多种内置数据类型,用于存储不同类型的数据。这些数据类型不仅易于使用,而且功能强大,能够满足各种编程需求。本文将详细介绍Python中的内置数据类型,包括它们的特点、用法以…

ARM GIC 和NVIC的区别

ARM GIC&#xff08;Generic Interrupt Controller&#xff09;和NVIC&#xff08;Nested Vectored Interrupt Controller&#xff09;是两种不同的中断控制器&#xff0c;它们在ARM架构中扮演着重要的角色&#xff0c;但各自有不同的设计和应用场景。 ARM GIC&#xff1a; G…

广东省保健食品行业协会批复成为“世界酒中国菜”活动指导单位

广东省保健食品行业协会正式批复成为“世界酒中国菜”系列活动指导单位&#xff0c;共促餐饮文化交流发展 近日&#xff0c;广东省保健食品行业协会正式批复荐酒师国际认证&#xff08;广州&#xff09;有限公司&#xff0c;成为备受瞩目的“世界酒中国菜”系列活动的指导单位…