当前位置:首页 > 技术 > 正文内容

JS奇淫技巧:数值的七种写法

Lotus2022-10-06 19:04技术

JS奇淫技巧:数值的七种写法

JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手

你知道吗?在JS编程中,数值可以有很多种写法。

第一种写法:

一般情况而言,数值就是数值。

比如:

var a = 1;

你可知,这个1可以有很多种变形的写法,甚至是变态的写法。

第二种写法:

var a= +!!{};

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数

即:1变成了+!!{}。

数值1为什么能用+!!{}来表示呢?原因如下:

在JS语法中,!{}是布尔值false,强制转换成数字为0,!!{}则是true,用+号做强制转换,变成数值即为1。

以此类推:

2=(+!!{})+(!!{})

3=(+!!{})+(!!{})+(!!{})

111=+((+!!{})+[]+(+!!{})+(+!!{}))

第三种写法:

var a=266119^266118;

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_02

即:将异常运算的结果,等于我们使用的数值。

这也就意味着,同一个数,比如1,可以有多种异或写法,比如:

var a=596219^596218;

var a=115812^115813;

第四种写法:

var a = function (s, h) {

return s ^ h;

}(719028, 719029);

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_03

也就是把第三种写法中的异或运算变成函数,将异或的两个数以参数的形式传入,在函数中运算并返回数值结果。

第五种写法:

把第三种写法中的亦或运算转成AST(抽象语法树)。

var a = ast({"type":"File","program":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"BinaryExpression","left":{"type":"NumericLiteral","value":115812},"operator":"^","right":{"type":"NumericLiteral","value":115813}}}]}});

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_04

变成AST之后,还得带一段执行AST的代码,也就是AST的解释器。

当然,这里是简单的仅解析异或运算的解释器:(AST解释器的雏形)

function ast(node) {

if(node.type == "File"){

return ast_excute(node.program);

}

if(node.type == "Program"){

return ast_excute(node.body[0]);

}

if(node.type == "ExpressionStatement"){

return ast_excute(node.expression);

}

if(node.type == "BinaryExpression"){

var left_value = node.left.value;

var right_value = node.right.value;

var operator = node.operator;

if(operator == "^"){

return left_value ^ right_value;

}

}

}

此操作,等于将异或运算代码编译为AST,再带了一个AST解释器运行它。

第六种写法

Eval的使用。

直接的写法:

var a = eval(1);

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_05

Eval的变形写法:

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

JS奇淫技巧:数值的七种写法_js代码_06

对方法四的代码做升级,也可加入eval(238, 238, 238); opacity: 0.6;">

var a = function (s, h) {

return eval(String.fromCharCode(115, 32, 94, 32, 104));

}(678405, 678404);

console.log(a);

JS奇淫技巧:数值的七种写法_异或运算_07

即:把return s ^ h用eval(238, 238, 238); opacity: 0.6;">

var a = [].constructor.constructor("return 1")();

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_08

升级一下,对return语句进行编码以隐藏关键字:

var a = [].constructor.constructor("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_09

再升级,将constructor字符也隐藏:

var a = []["\u0063\u006f\u006e\u0073\u0074\u0072\u0075\u0063\u0074\u006f\u0072"]["\u0063\u006f\u006e\u0073\u0074\u0072\u0075\u0063\u0074\u006f\u0072"]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_构造函数_10

还有更复杂的写法:

var $ = ["\u0061", "\u0062", "\u0063", "\u0064", "\u0065", "\u0066", "\u0067", "\u0068", "\u0069", "\u006a", "\u006b", "\u006c", "\u006d", "\u006e", "\u006f", "\u0070", "\u0071", "\u0072", "\u0073", "\u0074", "\u0075", "\u0076", "\u0077", "\u0078", "\u0079", "\u007a", "\u0028", "\u0029", "\u0027", "\u0022", "\u005b", "\u005d", "\u002e"];

var a = [][$[443650 ^ 443648] + $[169829 ^ 169835] + $[338738 ^ 338751] + $[745099 ^ 745113] + $[847761 ^ 847746] + $[986395 ^ 986378] + $[591407 ^ 591419] + $[989467 ^ 989465] + $[820242 ^ 820225] + $[848420 ^ 848426] + $[782593 ^ 782608]][$[972307 ^ 972305] + $[406834 ^ 406844] + $[838220 ^ 838209] + $[317151 ^ 317133] + $[799896 ^ 799883] + $[655841 ^ 655856] + $[333562 ^ 333550] + $[745730 ^ 745728] + $[843076 ^ 843095] + $[151776 ^ 151790] + $[832229 ^ 832244]]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

console.log(a);

JS奇淫技巧:数值的七种写法_js代码_11

这个方法的原理,在之前的文章《JS奇淫技巧:alert有几种写法?》一文中有详细讲解,有兴趣的朋友可以去翻看那篇文章。

以上所述技术,由JShaman团队提供,JShaman是专业的JS代码混淆加密服务提供方,本文实现的功能大多数已在JShaman官网提供。

JS奇淫技巧:数值的七种写法_js代码_12

到此时,还记的本文的标题吗?

请注意:

[][$[443650 ^ 443648] + $[169829 ^ 169835] + $[338738 ^ 338751] + $[745099 ^ 745113] + $[847761 ^ 847746] + $[986395 ^ 986378] + $[591407 ^ 591419] + $[989467 ^ 989465] + $[820242 ^ 820225] + $[848420 ^ 848426] + $[782593 ^ 782608]][$[972307 ^ 972305] + $[406834 ^ 406844] + $[838220 ^ 838209] + $[317151 ^ 317133] + $[799896 ^ 799883] + $[655841 ^ 655856] + $[333562 ^ 333550] + $[745730 ^ 745728] + $[843076 ^ 843095] + $[151776 ^ 151790] + $[832229 ^ 832244]]("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();

这是数值1。

这便是JS代码混淆加密的魅力,让别人无法看懂你的代码!让他人看到你的代码时,只能会发出“哇”的惊呼,而不敢轻易维护你的代码,无从下手啊。JS代码的安全性得到了大大的提升。

这些变态的写法,你能看懂几种呢?

或者你有什么新奇的手法?评论区交流一下吧。

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/128.html

分享给朋友:

“JS奇淫技巧:数值的七种写法” 的相关文章

Python 3.12 目标:还可以更快!

按照发布计划,Python 3.11.0 将于 2022 年 10 月 24 日发布。 据测试,3.11 相比于 3.10,将会有 10-60% 的性能提升,这个成果主要归功于“Faster CPython”项目,即“香农计划”。 关于“香农计划”的详情,可查看 Python 之父的主题分享,以及他的一则播客访谈。 3.11 版本为 Python 的提速开了一个激动人心的好头。接下来,3.12 还...

#打卡不停更#家庭健康管理平台

0. 项目简介 身体健康是一切生产生活的硬性基础。健康是福,一切安好,未来才可期。为什么经常跑步体重缺还在往上飘?突发紧急情况怎么处理?在数字时代,如何更好的为人们提供健康福祉、普及健康知识?如何进一步驱动个人健康管理是的值得研究的方向。为此,我们团队打造了一个健康管理平台——家庭健康管理平台。概览如下图所示: 家庭健康助理是集健康数据测量与管理、急救设备及使用指导、疫情防控实况、日常生活建议...

基础知识(1) --Matlab基础知识

前言: 前两次文章有读者私信说Matlab初学,基础较差,本次分享一下Matlab的基础内容,熟练者可以跳过本文,后续的文章也会在文后加上一些基础内容分享。 关键字:Matlab、数组、函数、计算、绘图 正文 1、MATLAB 产品 1.1 MATLAB 产品描述 全世界数超过百万的工程师和科学家们使用 MATLAB 来分析和设计改变世界的系统和产品。MATLAB 应用于汽车安全系统、宇宙...

Codeforces Round #822 (Div. 2) A-F

比赛链接 A 题解 知识点:贪心。 注意到任意三根木棍的相等最优解是最长减最小,因此从小到大排序,三个三个取,取最小值。 时间复杂度 \(O(n\log n)\) 空间复杂度 \(O(n)\) 代码 #include <bits/stdc++.h> #define ll long long using namespace std; ll a[307]; bool solve() {...

JavaScript之无题之让人烦躁的模块化

  我怎么记得我好像写过相关类型的文章,但是我找遍了我的博客没有~那就再写一遍吧,其实模块化的核心内容也算不上是复杂,只不过需要整理一下,规划一下罢了。嘻嘻。   开始写标题的时候我就在纠结一件事情,就是,先吃喜欢吃的,还是后吃喜欢吃的,翻译过来就是我应该先写CommonJS和ES6 Module,还是先写CMD和AMD。嗯,我决定了,谁先做好了我就先吃谁。   其实模块化的缘由很简单,就一句话,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。