js混淆与反混淆

介绍几种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也可以。

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

混淆方式混淆工具反混淆工具
evalhttp://www.jqueryfuns.com/tools/jsencodehttp://www.jqueryfuns.com/tools/jsencode
javascript-obfuscatorhttps://obfuscator.io/https://github.com/jscck/crack.js
UglifyJShttps://github.com/mishoo/UglifyJS2http://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/
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: JS混淆压缩工具是一种用于还原经过混淆压缩处理的JavaScript代码的工具。JavaScript代码经过混淆压缩处理后,变量名、函数名和代码结构都被改变,使得代码变得难以阅读和理解。 混淆是指通过逆向工程的方法,还原被混淆处理的代码。这样可以使开发人员更容易理解代码逻辑和修改代码,也有助于安全研究人员分析代码漏洞。 压缩是指将经过压缩处理的代码还原为可读性更好的形式。在代码压缩过程中,会删除空格、缩进、注释等,同时对代码进行重写以减少文件大小。压缩工具可以还原代码结构,使之恢复为可读性更好的形式。 JS混淆压缩工具一般通过解析和重构混淆压缩后的代码来实现。它们可以自动还原变量名、函数名,修复语法错误,还原代码结构,保留注释等。常见的混淆压缩工具有UglifyJS、Terser、Babel等。 但是需要注意的是,即使使用了混淆压缩工具,完全还原出原始代码可能是不太可能的。因为混淆压缩过程中可能还进行了其他特殊处理,如删除无用代码、代码优化等。此外,混淆压缩工具只适用于用于学习和分析代码,不应用于非法用途,以保护代码作者的合法权益。 ### 回答2: JS混淆压缩工具是一种用于还原经过混淆和压缩处理的JavaScript代码的工具。由于混淆和压缩会使代码变得难以阅读和理解,而且容易隐藏恶意代码,因此混淆压缩工具对于安全性和代码维护性非常重要。 JS混淆工具的主要功能是将经过混淆处理的代码还原为易读的形式。它可以根据一些特定的识别规则,识别和还原变量名、函数名等混淆后的标识符。通过混淆,我们可以更容易地理解代码的逻辑和结构,提高代码的可维护性和可读性。 JS压缩工具的主要功能是将经过压缩处理的代码还原为格式化的形式。它可以自动添加换行、缩进和空格等,使得代码更易于阅读和编辑。压缩可以帮助开发人员更方便地调试和修改代码,提高开发效率。 目前,有许多JS混淆压缩工具可供使用。一些流行的工具包括:UglifyJS、Terser、JSNice等。这些工具具有各自的特点和功能,可以根据具体需求选择合适的工具使用。 总之,JS混淆压缩工具对于提高代码安全性、可读性和可维护性具有重要作用。通过使用这些工具,开发人员可以更方便地理解、调试和修改代码,从而提高开发效率和代码质量。 ### 回答3: JS混淆压缩是用于还原经过混淆和压缩的Javascript代码的工具。混淆和压缩是为了减小代码体积和加强代码防护而进行的操作,但也给代码的阅读和理解带来了困难。 JS混淆工具主要通过对混淆后的变量、函数名、属性名进行逆向推算,还原出其原有的可读性较高的标识符。这种工具一般基于静态分析和语义分析的技术,通过模式匹配、代码流分析和控制流分析等方法,逆推原始代码的标识符,从而提高代码的可读性。 JS压缩工具主要是针对通过压缩工具对代码进行了无损压缩的情况,还原出原始的格式和布局。这种工具通过识别特定的压缩技术(如代码变量替换、代码优化、多行合并等),并对其进行向操作,还原出原始的代码结构和格式。 总之,JS混淆压缩工具的目的是为了提高代码的可读性和可维护性,方便开发人员阅读和理解代码,同时也有助于代码审计和漏洞发现。但需要注意的是,使用这些工具应遵守相关法律法规,不用于非法用途,以保护代码的合法性和安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值