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
  • 抖音最新版抓包方案,修改so绕过ssl

    dy过ssl charles抓包 及xposed的justtrustme安装到手机上只能过系统的ssl 抖音写了一个非系统的ssl所以需要反编译so来处理 第一步 charles 我用的是magisk手机 先重charles把证书下载到pc
  • Js逆向练习制造Token与Id

    前言 闲来无聊 把 Pyhton3网络爬虫开发实战 第二版 看完了Js逆向部分 最后的实战部分感觉挺有挑战性的 正好崔佬也有详细的教程 平时的逆向都是野路子 刚好快回学校了有时间 那为什么不自己动手下呢 下面记录下过程 只会更加详细 观察页
  • 记一次在Tweak中引入Swift framework的过程

    最近想在一个插件里打通App和web端 实现通过web控制App 方案是选用socket io作为服务端和web前端 iOS端socket io是一个纯swift实现的库 目前Theos对swift的支持还不是很完善 但是可以完成一般的工作
  • 被魔改md5加密坑了?某网站魔改md5加密逆向还原 (多种语言还原)

    大家好 我是TheWeiJun 最近由于工作太忙好久没有更新了 静下心来 突然很想念各位读者朋友 所以晚上抽空更新一篇 今天分享一篇关于魔改md5实现的加密算法逆向分析 本文将用多种语言还原加密算法 解决不同语言还原加密算法的难题 希望各位
  • 逆向工程核心原理——DLL注入——创建远程线程

    什么是DLL注入 dll注入是一种将Windows动态链接库注入到目标进程中的技术 具体的说 就是将dll文件加载到一个进程的虚拟地址空间中 对某个进程进行dll注入 也就意味着dll模块与该进程共用一个进程空间 则这个dll文件就有了操纵
  • GoLang - colly爬虫框架

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

    JS基础 提示信息 吾爱破解 LCG LSG 安卓破解 病毒分析 www 52pojie cn 1 零基础js逆向专题 MD5通杀 长度32位置 搜索关键词 16进制 0x67452301 10进制 1732584193 RSA 搜索关键词
  • 静态逆向简单的ELF

    看到csdn中一篇文章 http blog csdn net fisher jiang article details 6783922 该文章使用动态调试进行破解找到密码 由于自己对linux不熟悉需要学习段时间 就使用ida静态反汇编进行
  • 极验4参数分析

    目标链接 aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v 接口分析 开发者人员工具进行抓包 刷新页面 抓到了一个名为 load captcha id xxx 的包 Query String Parameters 包含了一些
  • 新榜微信版块nonce,xyz参数破解

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

    基础 VS2017安装成功 wdk10 注意事项 关闭 主机 客户机 防火墙 互相ping都能ping通 一 具体操作步骤 工具安装就不说了 不会的百度一下 只说一下一些关键的地方 1 安装好虚拟机后 给虚拟机增加一个串口设备 具体操作见图
  • js常用hook

    一 Hook 技术原理 Hook是一种钩子技术 在系统没有调用函数之前 钩子程序就先得到控制权 这时候钩子函数既可以加工处理该函数的执行行为 也可以强制结束消息的传递 简单来说就是修改原有的js代码就是hook JS 是一种弱类型语言 同一
  • 攻防世界-re-for-50-plz-50

    1 下载附件 exeinfo查壳 无壳 2 32位IDA分析 主函数分析 在注释里 31的来源 python和C语言 a cbtcqLUBChERV Nh X D X YPV CJ print len a include
  • 安卓逆向入门指南:修改与重打包应用

    安卓逆向入门指南 修改与重打包应用 概述 介绍修改与重打包应用的目的和应用场景 强调合法性和道德准则 在逆向工程过程中需要遵守相关法律法规 理解应用结构与资源 APK文件结构 解释APK文件的基本结构 包括AndroidManifest x
  • IDA反编译的几个注意和技巧

    IDA逆向程序的经验总结 关于一些类型转换以及指针和地址的总结 关于F5汇编代码不能转成c的伪代码的几个问题总结 1 jmpout的问题 2 positive sp value has been found 的问题 3 call analy
  • 逆向面试常见问题(陆续更新ing)

    资料大部分收集于网络 点击对应标题有原帖地址 PE 怎么判断PE是DLL 还是EXE 文件值属性 加载基址 怎么判断PE文件是32位还是64位 PE加载过程 基础 Windows下的调用约定 通用寄存器有哪些 段存器 怎么找到函数地址 调试
  • 逆向破解学习-登山赛车

    试玩 课程中的内容 Hook代码 import de robv android xposed XC MethodHook import de robv android xposed XposedHelpers import de robv
  • Dex文件加载以及类加载流程

    Dex文件加载以及类加载流程 安卓源码连接 http androidxref com 4 4 4 r1 app在启动的过程中创建了PathClassLoader加载dex文件 那么我们跟进PathClassLoader libcore da
  • 某某星图sign参数解密分析

    大家好 我是TheWeiJun 欢迎来到我的公众号 今天给大家带来星图sign参数的解密分析 希望大家能够喜欢 如果你觉得我的文章内容有价值 记得点赞 关注 特别声明 本公众号文章只作为学术研究 不用于其他用途 逆向与爬虫的故事 公众号 专

随机推荐

  • 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方法的参数 据说此方法出来的第一天就被破解了 修改一下代