JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手
JS奇淫技巧:数值的七种写法
JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手
你知道吗?在JS编程中,数值可以有很多种写法。
第一种写法:
一般情况而言,数值就是数值。
比如:
var a = 1;
你可知,这个1可以有很多种变形的写法,甚至是变态的写法。
第二种写法:
var a= +!!{};
console.log(a);
即:1变成了+!!{}。
数值1为什么能用+!!{}来表示呢?原因如下:
在JS语法中,!{}是布尔值false,强制转换成数字为0,!!{}则是true,用+号做强制转换,变成数值即为1。
以此类推:
2=(+!!{})+(!!{})
3=(+!!{})+(!!{})+(!!{})
111=+((+!!{})+[]+(+!!{})+(+!!{}))
第三种写法:
var a=266119^266118;
console.log(a);
即:将异常运算的结果,等于我们使用的数值。
这也就意味着,同一个数,比如1,可以有多种异或写法,比如:
var a=596219^596218;
var a=115812^115813;
第四种写法:
var a = function (s, h) {
return s ^ h;
}(719028, 719029);
console.log(a);
也就是把第三种写法中的异或运算变成函数,将异或的两个数以参数的形式传入,在函数中运算并返回数值结果。
第五种写法:
把第三种写法中的亦或运算转成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);
变成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);
Eval的变形写法:
var a = window[(14).toString(32)+(31).toString(32)+(10).toString(32)+(21).toString(32)](1); console.log(a);
对方法四的代码做升级,也可加入eval:
var a = function (s, h) {
return eval(String.fromCharCode(115, 32, 94, 32, 104));
}(678405, 678404);
console.log(a);
即:把return s ^ h用eval进行了包裹,并用formCharCode做了加密。
第七种写法:
构造函数的使用。
与eval有些类似,但eval做为高风险函数,容易被检测或禁用,因此使用构造函数实现代码运行,与eval效果类似。
原始形态:
var a = [].constructor.constructor("return 1")();
console.log(a);
升级一下,对return语句进行编码以隐藏关键字:
var a = [].constructor.constructor("\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0031")();
console.log(a);
再升级,将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);
还有更复杂的写法:
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奇淫技巧:alert有几种写法?》一文中有详细讲解,有兴趣的朋友可以去翻看那篇文章。
以上所述技术,由JShaman团队提供,JShaman是专业的JS代码混淆加密服务提供方,本文实现的功能大多数已在JShaman官网提供。
JShaman - 专业的JS代码混淆加密平台 - JS混淆、JS加密
到此时,还记的本文的标题吗?
请注意:
[][$[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代码的安全性得到了大大的提升。
这些变态的写法,你能看懂几种呢?
或者你有什么新奇的手法?评论区交流一下吧。
JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手相关推荐
- 前端js奇淫技巧(一)
很多前端只会谢谢页面,一让他们接触js,就非常害怕. 我想有的东西,你越害怕,就越要了解它,读懂它,就会发现它还有你不知道的那一面美好. 好的,直入主题,直接说说js相关的一些奇淫技巧. 一.运算相关 ...
- JavaScript奇淫技巧:隐写术
JavaScript奇淫技巧:隐写术 本文将用JavaScript实现"图片隐写术". 什么是隐写术? 将文本或其它数据写入图片的技术,称为"隐写术". 比如下 ...
- 【算法练习】80.字符串轮转——奇淫技巧
[算法练习]80.字符串轮转--奇淫技巧 ⭐加入组队刷题,每日一题,每天进步⭐ 看完大家的操作,感觉自己太傻了 --leetcode此题热评 前言 哈喽,大家好,我是一条. 糊涂算法,难得糊涂 点击跳 ...
- 【JavaScript】转载:JS高端奇淫技巧
转自 : https://blog.csdn.net/github_38885296/article/details/91038735 感谢作者(流浪的狗和一坨屎)分享 众所周知, JavaScrip ...
- JS高端奇淫技巧(持续更新)
众所周知, JavaScript是一门很骚的语言, 写一句话有很多种表达方式, 语法怪异而风骚, 自由而散漫, 或许这就是JS成为最流行语言的原因吧. 本文收集了JS开发中常用的各种奇淫技巧, 一句话 ...
- JavaScript奇淫技巧:把JS编译成exe
JavaScript奇淫技巧:把JS编译成exe 本文,介绍一种一般人不知道的技术:把JS代码编译成exe,而且不使用第三方工具,仅用系统工具完成. 第一:工具准备 编译JS代码,使用一个名为jsc. ...
- JavaScript奇淫技巧:按键精灵
JavaScript奇淫技巧:按键精灵 按键精灵之类的自动化工具,可以解放双手,帮我们自动完成许多工作,在很多场景中,可以极大提升生产力. 本文将展示:用JavaScript实现一个"按键精 ...
- JavaScript:探索神秘的旁门左道奇淫技巧
引言: JavaScript作为一种广泛使用的编程语言,具有出色的灵活性和强大的功能.除了其常规用途外,它还隐藏着一些奇淫技巧,这些技巧可以让你在编程过程中事半功倍.本文将揭示JavaScript的一 ...
- JavaScript奇淫技巧:反调试
JavaScript奇淫技巧:反调试 本文,将分享几种JS代码反调试技巧,目标是:实现防止他人调试.动态分析自己的代码. 检测调试,方法一:用console.log检测 代码: var c = new ...
最新文章
- 求数组中的最小值以及最小值的序列号
- Vscode配置C语言问题
- 捕捉到了异常继续循环_前端异常处理最佳实践
- 华师大数据科学考研_2020年30所微电子院校考研信息详细汇总
- SSL certificate problem: unable to get local issuer certificate 的解决方法
- 电热水器工作过程 c语言,热水器工作流程图
- 小程序onload_微信小程序开发入门之共享账本(十四)
- java阴阳师抽卡概率_《阴阳师》公布抽卡概率!看到数字我哭了
- STM32工作笔记0067---SPI接口原理与配置
- matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf
- SqlServer保留几位小数的两种做法
- SQL Server执行大文件SQL脚本
- 基于SSH开发教务排课系统
- Unity Kinect体感跑酷互动游戏方案
- 机器人周志_关于机器人的日记
- 计算机网络(自我学习)
- java实现移位密码的加密
- HTML表格翻页效果-洋葱先生-杨少通
- 康乐不风流之爱解题的pde灌水王张祖锦
- Python绘制简单的曲线图·
热门文章
- 用Nginx禁止国外IP访问我的网站...
- BLHeli无刷电调 后续
- C++程序设计课程主页-2012级
- Android逆向之去除APK中的广告
- IOS学习之苹果设备分辨率一览表
- shell小技巧(六)读取文件末尾为数字行的末尾数字
- P1618 三连击(升级版)C语言
- windows7虚拟机无法安装Xshell显示-1618错误怎么解决?
- 高中二年级计算机会考吉大附中,长春小学、初中、高中期末考试时间大曝光
- win10 matlab out of memory,Win10玩大型游戏的时候提示“out of memory”怎么办?