JavaScript黑暗技巧:变异的Eval

这篇博客揭示了JavaScript中如何通过变异形式的Eval来隐藏代码执行,详细介绍了其技术原理,包括将eval字符分解并转换为数字再进行混淆的过程。示例展示了即使经过混淆,这些变异的Eval仍能正常工作。文章还提到了专业混淆工具JShaman,可进一步增强代码的隐蔽性。

在JavaScript开发中,Eval常用在黑暗的领域,隐密执行一些不希望被别人看到的代码。但Eval特征明显,无论实现什么功能,都很容易被直接观察到,引起人们警觉。

但Eval也可以有变异的形式,比如下面这句,也是Eval,但你能看出它是Email吗?

变异的Eval:

window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)]

执行效果:

这么奇怪的字符串怎么会是Eval呢?

且看变异Eval的技术原理:

1、Eval()等于window.eval(),

2、Window.eval()等于window["eval"],

3、“eval”这个字符可分解为:window["e"+"v"+"a"+"l"],

4、"e"+"v"+"a"+"l"又可写为:(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)

5、4中的字符是怎么得来的呢?如下:

parseInt("e",36) = 14;

parseInt("v",36) = 31;

parseInt("a",36) = 10;

parseInt("l",36) = 21;

6、最终eval就变形成了:

window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)]

还能正常使用吗?当然。

试用:

变形之后的Eval()跟之前使用完全一样,例程:

例1:

window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)]("console.log('test');");

例2:

window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)]("var a=1;var b=2;var c=3;console.log(a+b+c);");

执行效果如图:

更进一步变异:

以上,都是手动操作,如果使用专业的手段,如:JShaman,可以得到更好的效果。

来到JShaman官网平台,对上面的代码进一步混淆:

注意:配置中,选择“成员函数加密”、“数值常量加密”:

然后得到更加变异的代码:

这时的Eval变成了:

window[(771383 ^ 771385)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](130148 ^ 130116) + (992937 ^ 992950)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](495187 ^ 495219) + (252852 ^ 252862)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](708261 ^ 708229) + (319087 ^ 319098)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](455467 ^ 455435)];

谁能认出这竟是个Eval呢?这下,可以放心地用它来做一些不可描述的事情了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值