js混淆与反混淆

2023-11-10

介绍几种js混淆方式

1. eval混淆

js中的eval()方法 就是一个js语言的执行器,它能把字符串解析成javascript的语法进行执行。简单来说就是把原本的js代码当成eval方法的参数。据说此方法出来的第一天就被破解了。-_-!! 修改一下代码,console.log一下就可以了。
原代码

function add(x,y){
	return x+y;
}

eval混淆后的代码

在这里插入图片描述
我们稍微变动一下代码即可反混淆
在这里插入图片描述
控制台查看dd的值
在这里插入图片描述
eval混淆方式也有在线的工具 http://www.jqueryfuns.com/tools/jsencode

2. javascript-obfuscator混淆

原代码

var p = {
    x: 1,
    y: 2,
    z: function () {
        return this.x+this.y
    }
};
p.x = 3;
p.y = 4;
p.z();

混淆后代码

var _0x6ba2 = ['input', 'string', 'while\x20(true)\x20{}', 'length',
	'constructor', 'gger', 'call', 'debu', 'stateObject', 'apply',
	'function\x20*\x5c(\x20*\x5c)',
	'\x5c+\x5c+\x20*(?:_0x(?:[a-f0-9]){4,6}|(?:\x5cb|\x5cd)[a-z0-9]{1,4}(?:\x5cb|\x5cd))',
	'init', 'test', 'chain'
];
(function(_0xc6491f, _0xc084d) {
	var _0x50d6e0 = function(_0x98dec3) {
		while (--_0x98dec3) {
			_0xc6491f['push'](_0xc6491f['shift']());
		}
	};
	_0x50d6e0(++_0xc084d);
}(_0x6ba2, 0x153));
var _0xf161 = function(_0x4c8f75, _0x4cbfcc) {
	_0x4c8f75 = _0x4c8f75 - 0x0;
	var _0x4ccf68 = _0x6ba2[_0x4c8f75];
	return _0x4ccf68;
};
var p = {
	'x': 0x1,
	'y': 0x2,
	'z': function() {
		var _0x44dbe5 = function() {
			var _0x4a3b80 = !![];
			return function(_0x50ff3e, _0xe2d703) {
				var _0x14cce1 = _0x4a3b80 ? function() {
					if (_0xe2d703) {
						var _0x327fb9 = _0xe2d703[_0xf161(
							'0x0')](_0x50ff3e,
							arguments);
						_0xe2d703 = null;
						return _0x327fb9;
					}
				} : function() {};
				_0x4a3b80 = ![];
				return _0x14cce1;
			};
		}();
		(function() {
			_0x44dbe5(this, function() {
				var _0x35ab8f = new RegExp(_0xf161('0x1'));
				var _0x4f8e5a = new RegExp(_0xf161('0x2'),
					'i');
				var _0x57a95d = _0x2f243c(_0xf161('0x3'));
				if (!_0x35ab8f[_0xf161('0x4')](_0x57a95d +
					_0xf161('0x5')) || !_0x4f8e5a[
					_0xf161('0x4')](_0x57a95d + _0xf161(
					'0x6'))) {
					_0x57a95d('0');
				} else {
					_0x2f243c();
				}
			})();
		}());
		return this['x'] + this['y'];
	}
};
p['x'] = 0x3;
p['y'] = 0x4;
p['z']();

function _0x2f243c(_0x524783) {
	function _0x59b7e0(_0x310fdd) {
		if (typeof _0x310fdd === _0xf161('0x7')) {
			return function(_0x2e1ae9) {} ['constructor'](_0xf161('0x8'))[
				'apply']('counter');
		} else {
			if (('' + _0x310fdd / _0x310fdd)[_0xf161('0x9')] !== 0x1 ||
				_0x310fdd % 0x14 === 0x0) {
				(function() {
						return !![];
					} [_0xf161('0xa')]('debu' + _0xf161('0xb'))[_0xf161('0xc')]
					('action'));
			} else {
				(function() {
					return ![];
				} [_0xf161('0xa')](_0xf161('0xd') + _0xf161('0xb'))[_0xf161(
					'0x0')](_0xf161('0xe')));
			}
		}
		_0x59b7e0(++_0x310fdd);
	}
	try {
		if (_0x524783) {
			return _0x59b7e0;
		} else {
			_0x59b7e0(0x0);
		}
	} catch (_0x39e13d) {}
}

这种混淆方式就复杂了许多,大大降低可读性。但是仔细分析一下发现,多了一个数组,数组里存了一些方法名称。大致思路就是运行的时候 还原方法名再执行。这种加密方式几乎无法还原成它本来的样子,只能尽量通过一些工具或方法增加它的可读性。
此种混淆对应的解决方案可参考 https://github.com/jscck/crack.js
使用jsnice解混淆,再使用crack,再使用jsnice

3. UglifyJS混淆

这种混淆方式实验了一下,貌似只是替换了一些变量名和去掉了缩进,减少了javascript的体积,属于压缩类型的混淆方式。
原代码

function hello(name){
    console.log("hello, ", name)
}
var user = "张三";
hello(user);

混淆后代码

function hello(l){console.log("hello, ",l)}var user="张三";hello(user);

可能我这里只是进行了最简单的压缩混淆,可以看出和原始基本没什么大的变化。这种混淆方式相应的反混淆工具就是专门针对它的 UnuglifyJS 使用在线工具jsnice也可以。

总结一下这三种方式混淆方式的生成工具和应对工具。

混淆方式 混淆工具 反混淆工具
eval http://www.jqueryfuns.com/tools/jsencode http://www.jqueryfuns.com/tools/jsencode
javascript-obfuscator https://obfuscator.io/ https://github.com/jscck/crack.js
UglifyJS https://github.com/mishoo/UglifyJS2 http://jsnice.org

记录一下js混淆工具地址

  1. https://jscrambler.com/products/code-integrity/javascript-obfuscation
  2. https://obfuscator.io/

再记录几个免费的反混淆工具地址

  1. https://beautifier.io/
  2. http://www.jsnice.org/
  3. https://lelinhtinh.github.io/de4js/

参考文章

  1. http://blog.w3cub.com/blog/2019/04/01/js-confusion/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js混淆与反混淆 的相关文章

  • Linux逆向 - Mirai-上

    Mirai Mirai 变种 资料 源码 Mirai源码 xd0ol1 Mirai 源码分析 https paper seebug org 142 绿盟 MIRAI源码分析报告 http blog nsfocus net mirai sou
  • js逆向技巧(三)

    js伪造原理 js逆向的原理的就是在本地 脱离浏览器的情况下 有着js引擎里面运行 js代码 因为浏览器是 js引擎 BOM DOM这里面有着一些内置方法 所以要想在本地 只有js引擎的情况下运行js代码 对于简单的网站 你可能只扣取 js
  • Js 逆向:微博登录

    1 先分析参数 su sp是必要的 其中su是加密后的账号 很简单就是个bs64 不再说了 2 直接搜参数 这个时候要搜代表性的 特殊的 例如pwencode 很好只有一个 两种加密 一个是RSA 一个是sha 这里判断用的是RSA 3 直
  • 逆向工程核心原理——DLL注入——创建远程线程

    什么是DLL注入 dll注入是一种将Windows动态链接库注入到目标进程中的技术 具体的说 就是将dll文件加载到一个进程的虚拟地址空间中 对某个进程进行dll注入 也就意味着dll模块与该进程共用一个进程空间 则这个dll文件就有了操纵
  • nftqin网站登录参数s算法逆向

    原文转载自http www itfvck com 7488 html 抓包数据 method POST authority api nftqin com scheme https path api app passwordLogin con
  • 逆向工具常用操作

    IDA 加载文件 Windows 下 用IDA加载文件之后 会在文件同目录下生成几个文件 id0 二叉树数据库 id1 文件包含描述每个程序字节的标志 nam 包含IDA Name 窗口的数据库 til 本地数据库有关信息 常用快捷键 快捷
  • GoLang - colly爬虫框架

    大家好 我是TheWeiJun 很高兴又和大家见面了 国庆假期马上就要结束了 在国庆假期里小编看了下colly框架 故这篇文章中将提到colly的使用及分析 欢迎各位读者多多阅读与交流 特别声明 本公众号文章只作为学术研究 不作为其它不法用
  • IDA静态逆向工具详解二

    文章目录 1 栈帧 2 调用约定 3 栈帧详解 1 栈帧 栈帧 stack frame 栈帧是在程序的运行时栈中分配的内存块 专门用于特定的函数调用 栈帧 激活记录 调用函数的详细步骤 2 1 调用方将被调用函数所需的参数放入到该函数所采用
  • adworld攻防世界 reverse asong

    asong 攻防世界 reverse 进阶区 asong 题目文件 https www jianguoyun com p DQ3g5b4QiNbmBxjX fQC 访问密码 AgV9Sh 主要是集中我们常见的处理方式的整合 注意一个对于ou
  • 【自学】恶意代码分析

    恶意代码分析 绿盟 李东宏老师 恶意样本分析手册 理论篇 API函数篇 常用方法篇 特殊方法篇 通讯篇 溯源篇 文件封装篇 工具篇 上 下 反调试篇 上 下 虚拟机检测篇 上 下 逆向心法修炼 FLARE ONCHALLENGE4TH FL
  • 安卓逆向入门指南:介绍与准备

    安卓逆向入门指南 介绍与准备 简介 安卓逆向工程是指通过分析 修改和破解安卓应用程序 获取其内部逻辑 探索其实现细节或者进行二次开发的技术过程 在这个系列博客中 我们将介绍安卓逆向的基础知识 常用工具和技术 并通过实例演示来帮助初学者入门
  • 新榜微信版块nonce,xyz参数破解

    该文章主要提供交流学习使用 请勿利用其进行不当行为 如本篇文章侵犯了贵公司的隐私 请联系我立刻删除 个人博客 http www feastawlisao com 欢迎关注个人公众号 pythonORjs 今天分析一波新榜数据平台 以微信公众
  • pc端和移动端抓包工具

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 抓包工具概述 http https fiddler burpsui
  • 逆向某视频直播软件,破解收费观看

    https juejin im post 5cbd7bc06fb9a0324e4a376c
  • 某某analysis参数算法分析

    作者 TheWeiJun 来源 逆向与爬虫的故事 今天给大家带来一个干货分享 由于想要查看某些APP的详细信息 需要通过APP名称去某麦网站进行搜索查看 而整个过程中涉及到逆向分析 为了方便大家学习 本次完整流程记录如下 目录 一 确定要获
  • 某站弹幕Protobuf协议逆向分析

    一杯敬明天 一杯敬过往 大家好 我是TheWeiJun 时间过得好快 转眼间春节已过 此刻大家都已经开始复工了吧 首先祝大家新年快乐 2023年一路旺旺旺 小编也是心情激动 才有了前面的开场白 直入主题 今天给大家带来某站弹幕protobu
  • 逆向面试常见问题(陆续更新ing)

    资料大部分收集于网络 点击对应标题有原帖地址 PE 怎么判断PE是DLL 还是EXE 文件值属性 加载基址 怎么判断PE文件是32位还是64位 PE加载过程 基础 Windows下的调用约定 通用寄存器有哪些 段存器 怎么找到函数地址 调试
  • Unity手游资源修改流程

    最近接到一个Android手游汉化需求 研究了一下 特此记录 开发环境 AssetStudioGUI 该软件可解析 定位压缩后的Unity 资源 下载 https github com Perfare AssetStudio AssetBu
  • 逆向破解学习-登山赛车

    试玩 课程中的内容 Hook代码 import de robv android xposed XC MethodHook import de robv android xposed XposedHelpers import de robv
  • python执行JavaScript代码

    1 简单使用 import execjs execjs eval new Date 返回值为 2018 04 04T12 53 17 759Z execjs eval Date now 返回值为 1522847001080 需要注意的是返回

随机推荐

  • Python中最小堆结构的heapq模块

    堆是非线性的树形的数据结构 完全二叉树 有两种堆 最大堆与最小堆 heapq库中的堆默认是最小堆 最大堆 树中各个父节点的值总是大于或等于任何一个子节点的值 最小堆 树中各个父节点的值总是小于或等于任何一个子节点的值 我们一般使用二叉堆来实
  • 用python送父亲节祝福,父亲节:程序员硬核示爱,“爸”气告白!

    转载来自51cto https blog 51cto com 15127557 2665130 转眼 已至6月第三周了 2020年即将过去一半 2020年06月21日 星期日 庚子年 鼠年 五月初一 也就是明天 这一天也是父亲节 父亲节 F
  • 【168】Java调用EXE并利用多线程接收EXE的输出流

    代码一共分两个类 分别是 CmdInputStreamRunnable 和 CmdUtils CmdInputStreamRunnable java import java io author 张超 操作系统执行命令时会有输出 这些输出会被
  • c语言中的顺序点

    http bbs csdn net topics 370153775 经常可以在一些讨论组里看到下面的提问 谁知道下面C语句给n赋什么值 m 1 n m m 最近有位不相识的朋友发email给我 问为什么在某个C 系统里 下面表达式打印出两
  • solidworks 之迈迪齿轮设计方法 粗浅解释

    之前对同步带比较了解 从来未涉及到齿轮的设计 对迈迪的工具不是了解 之前从来无法争取生成过齿轮 特此标记方法 必须要有这个标记 根据经验系数 其他的也没有尝试 之前默认选项是用户自定义 之后就可以选择模数 然后齿数 然后到 齿数决定了齿轮的
  • CTF 加解密合集

    0x00 前言 本篇的目的是对工具的收集 以及对一些题目的整理 持续更新 CTF 加解密合集 CTF Web合集 网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 古典加密 1 栅栏加密 CTF加密解密
  • Mac电脑——MySQL数据库root密码忘记了,不要紧,看我操作

    1 先把MySQL服务器停止运行 2 打开MySQL的文件 并修改my cnf文件 mac电脑是my cnf windows电脑是my ini 3 my cnf文件无法打开 我们可以将该文件的后缀名my cnf修改为my txt 修改完后在
  • 归零码和不归零码、单极性码和双极性码

    关于基带数字信号表示 下面有一些常见的细节 对于传输数字信号来说 最常用的方法是用不同的电压电平来表示两个二进制数字 即数字信号由矩形脉冲组成 a 单极性不归零码 无电压表示 0 恒定正电压表示 1 每个码元时间的中间点是采样时间 判决门限
  • python 获取时间间隔,Python:从时间间隔到值的映射

    I m refactoring a function that given a series of endpoints that implicitly define intervals checks if a number is inclu
  • JPA多条件查询之AND和OR混合查询

    JPA多条件查询这种业务场景是很常见的 比如说这种 像这种同一个查询条件可以多选的用OR语句来查询 比如 材质 之间选了 PU 和 橡胶 就用OR 不同查询条件之间则用AND语句查询 比如 品牌 和 材质 之间就用AND拼接 我现在要根据不
  • 相对比较全的webpack5配置

    const path require path const MiniCssExtractPlugin require mini css extract plugin const HtmlWebpackPlugin require html
  • 【论文精读】CVPR2021 - ReDet:一种用于航空目标检测的旋转等变检测器

    论文精读 CVPR2021 ReDet 一种用于航空目标检测的旋转等变检测器 论文原文 R3Det Refined Single Stage Detector with Feature Refinement for Rotating Obj
  • 成为技术传播者(一):写在前面

    这几年一直是在传说中的 高科技行业 里混迹 于是也有幸体验了很多来自高科技的悖论 譬如说 专门开发OA的一家软件公司 自己没有一套像样的OA系统 所有的文档都靠MSN传来传去 或者放在机器上开共享访问 再譬如说 给别人做敏捷方法培训的一个家
  • 使用Python 和matlab 进行AR模型的仿真(自回归模型)

    对钙信号的动力学进行建模 AR模型 import matplotlib pyplot as plt import numpy as np if name main length 500 time range length gamma 0 9
  • 用Linux搭建chrony服务器同步时间

    准备工作 在准备之前需要准备两台虚拟机 一台当做服务器使用 另一台当作虚拟机客户端使用 具体方法 鼠标右键某一个虚拟机 gt 点击管理 gt 点击克隆 提示 克隆好虚拟机后 记得修改主机名和IP地址 不然就和第一台冲突了 修改IP地址 使用
  • Tomcat源码:CoyoteAdapter、Valve#invoke、ApplicationFilterChain

    前文 Tomcat源码 启动类Bootstrap与Catalina的加载 Tomcat源码 容器的生命周期管理与事件监听 Tomcat源码 StandardServer与StandardService Tomcat源码 Container接
  • 通过百度驾车API计算一天的总行程

    前提 我们在校车上安装了GPS定位器 每5秒发送一次GPS信息到服务器后台 表结构是这个样子的 名称 行驶日志表 代码 log bus drive 注释 维护行驶日志记录 名称 代码 数据类型 限定 注释 主键 bus drive id l
  • Linux简答

    1 静态库和动态库 2 gcc编译四个阶段 预处理 编译 汇编和链接 标准I O提供了三种类型的缓冲 分别是 单缓冲 双缓冲 循环缓冲 3 Vim的三种模式 命令模式 插入模式 底行模式 i键 进入编译模式 ctrl v 进入可视模式 ES
  • 并发编程系列之volatile内存语义

    前言 前面介绍顺序一致性模型时 我们提到了程序如果正确的同步就会具备顺序一致性 这里所说的同步泛指广义上的同步 其中包括就包括同步原语volatile 那么volatile声明的变量为什么就能保证同步呢 这又是如何实现的呢 今天就让我们一起
  • js混淆与反混淆

    介绍几种js混淆方式 1 eval混淆 js中的eval 方法 就是一个js语言的执行器 它能把字符串解析成javascript的语法进行执行 简单来说就是把原本的js代码当成eval方法的参数 据说此方法出来的第一天就被破解了 修改一下代