js常用套路(数值的七种写法)
js常用套路(数值的七种写法)
2024-07-01 05:16:53  作者:浮生亂  网址:https://m.xinb2b.cn/life/abd288721.html

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

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

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

第一种写法:

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

比如:

var a = 1;

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

第二种写法:

var a= !!{};

console.log(a);

js常用套路(数值的七种写法)(1)

即:1变成了 !!{}。

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

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

以此类推:

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

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

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

第三种写法:

var a=266119^266118;

console.log(a);

js常用套路(数值的七种写法)(2)

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

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

var a=596219^596218;

var a=115812^115813;

第四种写法:

var a = function (s, h) {

return s ^ h;

}(719028, 719029);

console.log(a);

js常用套路(数值的七种写法)(3)

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

第五种写法:

把第三种写法中的亦或运算转成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常用套路(数值的七种写法)(4)

变成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常用套路(数值的七种写法)(5)

Eval的变形写法:

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

js常用套路(数值的七种写法)(6)

对方法四的代码做升级,也可加入eval:

var a = function (s, h) {

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

}(678405, 678404);

console.log(a);

js常用套路(数值的七种写法)(7)

即:把return s ^ h用eval进行了包裹,并用formCharCode做了加密。

第七种写法:

构造函数的使用。

与eval有些类似,但eval做为高风险函数,容易被检测或禁用,因此使用构造函数实现代码运行,与eval效果类似。

原始形态:

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

console.log(a);

js常用套路(数值的七种写法)(8)

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

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

console.log(a);

js常用套路(数值的七种写法)(9)

再升级,将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常用套路(数值的七种写法)(11)

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

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

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代码的安全性得到了大大的提升。

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

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

  • 七年级数学上册关于补余角的内容(数学七年级上册)
  • 2024-07-01数学七年级上册哈喽,大家好!我们又见面了,欢迎继续关注【轩爸辅导】的【口袋数学】日更【每日一学】【每日一练】,帮助孩子日积月累,考出好的成绩配套辅导,哪里不会学哪里,哪里出错练哪里,帮助孩子提高效率余角与补角(1)。
  • yy年度盛典第七天战况汇总(快来围观YY年度盛典)
  • 2024-07-01快来围观YY年度盛典摘要:YY年度盛典要来了众主播又要搞什么大新闻?宣言?拉票?这么嚣张?59脱口秀频道《笑咖驾到》“年度热身赛”已经抑制不住他们了YYLIVE59脱口秀频道《笑咖驾到》特别主题节目“年度热身赛”,打响即。
  • 初二物理上册笔记(初二物理学习笔记)
  • 2024-07-01初二物理学习笔记第一章机械运动(2016年12月25日星期日)第一节长度和时间的测量1.长度的单位:千米(km)、分米(dm)、厘米(cm)、毫米(mm)、微米(μm)、纳米(nm);1km=1×10^3m1dm=1。
  • 鲁迅哪些文章要求全文背诵(让中小学生大量背诵古诗文对吗)
  • 2024-07-01让中小学生大量背诵古诗文对吗曾经的高考语文状元博士曾经说过:那些要求学生读《论语》的,应该是自己想要读却读不下去《论语》的真正通读过《论语》的,有几个觉得应该让每个中学生都去读?鲁迅:“先前也曾有几位先生给青年开过一大篇书目但从。
  • 电视可以连接wifi吗(方法无敌简单)
  • 2024-07-01方法无敌简单电视可以连接wifi的,并且方法超级简单,如下:点击遥控器的菜单然后用遥控器上下左右键选择系统设置点击网络设置用遥控器点击无线网络无线网络开关是关闭的,点击开启,电视会自动搜索WiFi输入密码连接即可。
  • 咸菜吃多了对身体有害吗(咸菜吃多少好)
  • 2024-07-01咸菜吃多少好咸的食物吃多了对身体有害咸菜属腌制食品,应少食,多食腌制食物易诱发肿瘤高盐饮食易导致水钠潴留而引起水肿,尤其是有心脏肾疾病的肝病患者,应少吃盐,防止钠盐过高而导致水肿加重在日常生活中要养成良好的生活习。
  • 镇江哪边的电影院比较好点(镇江已有电影院恢复营业)
  • 2024-07-01镇江已有电影院恢复营业念念不忘必有回响是的!!镇江终于有电影院开门啦!!!这熟悉的“龙标”,这久违的前奏就问你想不想TA!知道大家馋电影很久了镇江的电影院准备得如何?镇江有哪些电影院已经恢复营业了?小编多方打听下面带来一手。
  • 尘螨怎么去除简单方法(尘螨去除的简单方法)
  • 2024-07-01尘螨去除的简单方法床上用品的清洗所有可洗涤的卧具如床罩、被套、毯子和枕套等,都应每隔7~10日,用55℃以上的热水,烫洗10~20分钟以杀死尘螨用100℃的热水可使致敏蛋白变性,效果更好用温水或冷水清洗不能杀死绝大多数。
  • 金庸三联版插图 华山论剑(不是越女剑不是白马)
  • 2024-07-01不是越女剑不是白马“飞雪连天射白鹿,笑书神侠倚碧鸳”,我们大家都知道,金庸先生在生前,一共为我们留下了15部武侠小说,且大都受到了读者的喜爱,无论是在国内还是海外,每部作品都拥有着大量忠实拥趸尤其是伴随着1983年香港。
  • 绣球花叶虫的消除方法(绣球花叶虫怎么消除)
  • 2024-07-01绣球花叶虫怎么消除绣球花的主要病害是萎蔫病、白粉病和叶斑病,这些疾病多是由于细菌或真菌导致,可以用代森锌溶液喷洒防治,平时还要注意通风透气,减少细菌滋生的可能它的常见虫害是蚜虫和盲蝽,这两种害虫会吸食植株的汁液,导致植。
  • 肥鱼怎么做不腥(蒸鱼不腥需要把握以下4个技巧)
  • 2024-07-01蒸鱼不腥需要把握以下4个技巧放尽血清蒸活鱼必须先用刀身猛击鱼头,使其晕厥,并从鱼鳃处放血,使鱼肉中的毛细血管不会吃进鱼血这样蒸出的鱼肉洁白如玉,毫无腥味;反之,不仅鱼肉暗淡,而且腥味很重热水泡活鱼剖杀、刮鳞、洗净、蒸制前,需将鱼。