JS混淆基本类型和原理

常见JS混淆技术解析

JavaScript(JS)混淆是一种技术手段,用于保护源代码不被轻易理解或篡改。在Web开发中,混淆可以增加代码的安全性,但也给逆向工程带来了挑战。以下是几种常见的JS混淆技术及其解析方法。

1. eval混淆

技术描述
eval函数可以执行其参数作为JS代码。这使得开发者可以将代码作为字符串传递给eval,从而实现混淆。

混淆示例

eval("var a = 'Hello, ' + 'World!';");

解析方法

  • 识别eval函数调用。
  • 尝试提取并分析eval内的代码字符串。
  • 考虑使用工具来自动解析和重构eval内的代码。
2. AA混淆

技术描述
AA混淆通常指使用ASCII字符的特定模式进行混淆,如将变量名替换为ASCII码。

混淆示例

var _0x4c41 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var a = _0x4c41[2] + 'BC';

解析方法

  • 识别ASCII模式的混淆。
  • 将混淆后的变量名转换回可读的字符。
  • 手动或使用工具将代码重构为原始形式。
3. OO混淆(面向对象混淆)

技术描述
面向对象混淆通过封装和继承的方式隐藏代码逻辑,使得代码结构复杂难以理解。

混淆示例

var _0x2b4f = function() {};
_0x2b4f.prototype = {sayHello: function() {console.log('Hello');}
};
var obj = new _0x2b4f();
obj.sayHello();

解析方法

  • 理解面向对象的封装和继承机制。
  • 分析原型链和对象之间的关系。
  • 重构代码以清晰展示类和对象的交互。
4. OB混淆

技术描述
OB混淆(One-Time-Pad)是一种加密技术,通过将代码与随机数结合,使得每次混淆后的代码都不同。

混淆示例

var _0x1f4b = ['\x68\x65\x6c\x6c\x6f'];
for (var _0x45b3 = 0; _0x45b3 < _0x1f4b.length; _0x45b3++) {eval(_0x1f4b[_0x45b3] + ' = ' + _0x1f4b[_0x45b3]);
}

解析方法

  • 识别OB混淆模式,通常结合eval使用。
  • 尝试找到解密的密钥或模式。
  • 使用逆向工程技巧手动或自动解密混淆代码。
5. Fuckjs混淆

技术描述
Fuckjs混淆是一种激进的混淆技术,通过使用不常见的字符和编码方式,使得代码几乎不可读。

混淆示例

var 𝔒𝔦𝔡𝔢 = '\ud83d\udc4d';
eval("console." + 𝔒𝔦𝔡𝔢 + "('Hello, World!')");

解析方法

  • 使用支持Unicode和特殊字符的编辑器查看代码。
  • 识别和替换不常见的字符和编码。
  • 清理和格式化代码以提高可读性。

结语

混淆技术为JS代码提供了一定程度的保护,但同时也给代码的维护和逆向工程带来了挑战。了解和掌握这些混淆技术的原理和解析方法,可以帮助开发者更好地保护或理解JS代码。然而,需要注意的是,混淆并不是万无一失的安全措施,它更多的是增加了攻击者理解代码的难度。

在进行逆向工程时,应始终遵守法律法规,尊重知识产权,不要用于非法目的。

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

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

相关文章

最新扣子(Coze)实战案例:使用扩图功能,让你的图任意变换,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 微信关注公从号&#xff1a;斜杠君&#xff0c;可获取完整版教程。&a…

Qt扫盲-QRect矩形描述类

QRect矩形描述总结 一、概述二、常用函数1. 移动类2. 属性函数3. 判断4. 比较计算 三、渲染三、坐标 一、概述 QRect类使用整数精度在平面中定义一个矩形。在绘图的时候经常使用&#xff0c;作为一个二维的参数描述类。 一个矩形主要有两个重要属性&#xff0c;一个是坐标&am…

ingress-nginx控制器证书不会自动更新问题

好久没更新了&#xff0c;正好今天遇到了一个很有意思的问题&#xff0c;在这里给大家分享下&#xff0c;同时也做下记录。 背景 最近想做个实验&#xff0c;当k8s集群中secret更新后&#xff0c;ingress-nginx控制器会不会自动加载新的证书。我用通义千问搜了下&#xff0c;…

SAR目标检测

Multi-Stage with Filter Augmentation 多阶段滤波器增强(MSFA) 对SAR合成孔径雷达目标检测性能的改善 MSFA ON SAR 传统方法: 预训练:传统方法开始于在通用数据集上预训练一个基础模型。 微调:这个预训练的模型会被微调以适应特定的SAR图像&#xff0c;试图缩小域间的差距 …

webSocket网页通信---使用js模拟多页面实时通信

webSocket是什么 WebSocket是一种先进的网络技术&#xff0c;它提供了一种在单个TCP连接上进行全双工通信的能力。传统的基于HTTP的通信是单向的&#xff0c;即客户端发起请求&#xff0c;服务器响应请求&#xff0c;然后连接关闭。但是&#xff0c;WebSocket允许服务器和客户端…

anaconda中下载压缩包并用conda安装包

有时直接conda安装包时会出错&#xff1b;报错PackagesNotFoundError: The following packages are not available from current channels 比如 conda install -y bioconda::ucsc-gtftogenepred #直接安装报错 #直接下载压缩包安装https://blog.csdn.net/weixin_45552562/ar…

解决vscode配置C++编译带有中文名称报错问题

在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…

读书到底有什么意义?从笨小孩到名人的逆袭之路

点击上方△腾阳 关注 作者 l 腾阳 转载请联系授权 读书到底有什么意义&#xff1f; 有一个鸟语花香的农场里&#xff0c;住着老农夫和他的小孙子。 老农夫经常在清晨会坐在窗边&#xff0c;捧着厚厚的《圣经》&#xff0c;沉浸在知识的海洋里。 小孙子问他&#xff1a;…

豆瓣评分9.6,这本书不看损失巨大!

点击上方△腾阳 关注 转载请联系授权 这些年&#xff0c;我就像是个热心向导&#xff0c;逢人就劝读那本《毛泽东选集》。 结果呢&#xff1f;有人一听就摆手&#xff0c;笑言&#xff1a;“哎呀&#xff0c;那书太高大上了&#xff0c;咱啃不动啊&#xff01;” 特别是咱们…

Elasticsearch:Painless scripting 语言(一)

Painless 是一种高性能、安全的脚本语言&#xff0c;专为 Elasticsearch 设计。你可以使用 Painless 在 Elasticsearch 支持脚本的任何地方安全地编写内联和存储脚本。 Painless 提供众多功能&#xff0c;这些功能围绕以下核心原则&#xff1a; 安全性&#xff1a;确保集群的…

kubernetes集群部署:node节点部署和CRI-O运行时安装(三)

关于CRI-O Kubernetes最初使用Docker作为默认的容器运行时。然而&#xff0c;随着Kubernetes的发展和OCI标准的确立&#xff0c;社区开始寻找更专门化的解决方案&#xff0c;以减少复杂性和提高性能。CRI-O的主要目标是提供一个轻量级的容器运行时&#xff0c;它可以直接运行O…

推荐Bulk Image Downloader插件下载网页中图片链接很好用

推荐&#xff1a;Bulk Image Downloader chome浏览器插件下载图片链接&#xff0c;很好用。 有个网页&#xff0c;上面放了数千的gif的电路图&#xff0c;手工下载会累瘫了不可。想找一个工具分析它的静态链接并下载&#xff0c;找了很多推荐的下载工具&#xff0c;都是不能分…

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …

ubuntu设置开启自动挂载sftp

1. 前言 与其说 ubuntu 开启自动挂载 sftp, 更确切的说应该是 nautilus (ubuntu上默认的文件管理器) 开机自动挂载 sftp。 因为 这里即使选择永远记住&#xff0c;开机也不会自动挂载 sftp 2.设置方法 gnome-session-properties #开机只启动设置命令设置 gio mount sftp…

ListView 的简单使用及 ArrayAdapter 中参数详解

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD&#xff0c;日常还会涉及Android开发工作。 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起…

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…

【JVM 的内存模型】

1. JVM内存模型 下图为JVM内存结构模型&#xff1a; 两种执行方式&#xff1a; 解释执行&#xff1a;JVM是由C语言编写的&#xff0c;其中有C解释器&#xff0c;负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译&#xff0c;速度慢一点。JIT执行&#xff1a;JIT编译器…

策略模式的应用

前言 系统有一个需求就是采购员审批注册供应商的信息时&#xff0c;会生成一个供应商的账号&#xff0c;此时需要发送供应商的账号信息&#xff08;账号、密码&#xff09;到注册填写的邮箱中&#xff0c;通知供应商账号信息&#xff0c;当时很快就写好了一个工具类&#xff0…

快排的非递归实现

前提 快排的递归实现&#xff0c;在深度过深时会存在栈溢出的风险&#xff0c;所以我们需要掌握快排的非递归写法 快排的实现 单趟实现 上次我们使用了hoare的快排单趟写法&#xff0c;所以这次我们使用前后指针法. 前后指针法 初始状态下&#xff0c;初始化prev为left,cu…

C++初学者指南-4.诊断---基础:警告和测试

C初学者指南-4.诊断—基础知识&#xff1a;警告和测试 文章目录 C初学者指南-4.诊断---基础知识&#xff1a;警告和测试1. 术语和技术记住&#xff1a;使用专用类型&#xff01; 2.编译器警告Gcc/CLang 编译器选项MS Visual Studio 编译器选项 3.断言运行时断言静态断言&#x…