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

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官网提供。


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

请注意:

[][$[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-11-06秋瑟柳未凋零,手未触摸,秋风已来过若是快乐,该为哪个季节唱首歌也许词未写,也许谱未作已是满天白雪飘落,。
  • 青木瓜之味隐喻(宛如初恋般酸涩滋味)
  • 2024-11-06宛如初恋般酸涩滋味陈英雄成名作《青木瓜之味》,这是一本关于1951年越南大户人家的女仆梅命运变迁的电影梅是个贫困人家的孩子,去了大户人家做女仆少女时期的梅,第一次见到少爷的朋友浩仁,便喜欢上了他少女的心事从不与人言说长。
  • 梁家辉演的黑社会类型的电影 这部黑帮片能成为经典
  • 2024-11-06梁家辉演的黑社会类型的电影 这部黑帮片能成为经典如果非要在黑帮片中找到一部经典中的经典,《黑金》绝对能排上号这部电影在犯罪片日趋同化的时期异军突起,即便是一部1997年上映的老港片,但直到现在依旧难以被超越不得不说的是,相比于剧情设定,这部影片的主。
  • 蜘蛛的感知能力(蜘蛛的聪明超乎你的想象)
  • 2024-11-06蜘蛛的聪明超乎你的想象蜘蛛的智能正在挑战我们关于大脑和意识的传统看法在我们中间生活着一类酷似来自外星的生物它们长着八条腿,很多双眼睛尤其与众不同的是,它们还能吐丝织网它们的网轻盈而精致,一般挂在屋角或树丛中当然,我这么一说。
  • 新债中签后怎么操作 怎样打新债
  • 2024-11-06新债中签后怎么操作 怎样打新债打新债真心的香啊!首先,你需要一个证券账户,开通业务其次,经常关注新债发行消息,可以订阅一下,省的不知道第三,新债发行,申购需要操作一下,然后等待中签就好了第四,中签后,会有通知然后在证券账户里存上1。
  • 多层蒸笼怎样防止滴水(怎么避免蒸馒头盖子滴水)
  • 2024-11-06怎么避免蒸馒头盖子滴水蒸的过程中,要防止蒸锅盖上边缘的水滴落到馒头上,可以围锅垫一条毛巾防止蒸锅滴水的办法:凉水上锅,中火蒸原本都是开水大火蒸馒头但后来试验发现,凉水上锅,中火可以使未发酵完成的酵母在慢慢加热的过程中充分发。
  • 余生请多指教多少集在一起(请多指教不好看)
  • 2024-11-06请多指教不好看#余生,请多指教#一直被网友所期待的电视剧《余生,请多指教》终于在腾讯视频开播,直接登上微博热搜的原因竟是被吐槽难看?点进微博词条一看,却是铺天盖地的好评?这让人感到疑惑,那这到底是难看还是好看呢?小。
  • lol最新补偿(恭喜浪漫旗开得胜一个好的开始)
  • 2024-11-06恭喜浪漫旗开得胜一个好的开始首先恭喜LP浪漫复出就拿到了xiaoy杯的冠军:还记得之前浪漫之前也夺冠xiaoy杯应该是过去一年最后参加的比赛,当时还有很多魔兽的观众来问xiaoy为何不允许浪漫参加xiaoy杯,实际上是官方禁赛了。
  • 网络弹窗广告该如何治理(互联网弹窗信息影响调查)
  • 2024-11-06互联网弹窗信息影响调查近年来,随着互联网发展,大量弹窗信息(以下简称弹窗)在消费者上网时频频跳出,难以关闭一些弹窗、嵌入式、开屏信息内容低俗夸张、虚假宣传等,不仅扰乱互联网市场秩序,还存在侵犯消费者合法权益的情形5月30日。
  • 梦涵个人资料(梦涵个人资料介绍)
  • 2024-11-06梦涵个人资料介绍梦涵,华语女歌手自广东广州,代表作《酣梦》个人经历:2015年广东校园歌手歌唱大赛冠军2016粤语经典翻唱比赛广东赛区五强2018年粤语好声音广东赛区十强2018年广东新音乐榜新晋人气女歌手奖2018。
  • 阿珍爱上了阿强出自哪(阿珍爱上了阿强是什么梗和意思)
  • 2024-11-06阿珍爱上了阿强是什么梗和意思阿珍爱上了阿强是什么梗?喜欢刷B站的小伙伴在弹幕上一定都有看到过“阿珍爱上了阿强”的句子,那么大家知道阿珍爱上了阿强是什么意思吗?下面就和小编一起来看看吧!阿珍爱上了阿强是什么梗代指这是真爱,常见于B。