js常用套路(数值的七种写法)
js常用套路(数值的七种写法)
2024-11-25 09:50:18  作者:浮生亂  网址: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代码的安全性得到了大大的提升。

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

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

  • 2022年七月免门票景点(这个不随波逐流景点)
  • 2024-11-25这个不随波逐流景点在国内很多地方,对于老人都特别优待,免费乘公交、礼让老人、免费游玩景点说到免费游玩,当属山西最大气,境内的大部分景点针对60岁以上的老人都免费开放,可谓是大大的良心不过在国内还是有很多例外的地方,比如。
  • 优秀的弃子逆袭的小说(她本是炮灰的命)
  • 2024-11-25她本是炮灰的命日头正盛,外门弟子无课,多来丈台边看热闹已会御剑之术者,都已飞到二十丈的高台,找个好视角观看这场打斗了同级切磋是允许的,但陶七是内门弟子,找外门弟子比试却是违规她在药皇宗里本就养成了公主的小脾性,傲气。
  • 新能源车免征购置税新规(新能源车购置税)
  • 2024-11-25新能源车购置税晨报讯昨天,财政部网站发布了关于新能源汽车免征车辆购置税有关政策的公告公告称,自2021年1月1日至2022年12月31日,对购置的新能源汽车免征车辆购置税免征车辆购置税的新能源汽车是指纯电动汽车、插。
  • 手竿改矶竿改回来怎么弄(机械大师手竿改矶竿)
  • 2024-11-25机械大师手竿改矶竿一丈青竹一丈线,一点猩红碧水间,流水静坐观日落,微风轻抚待天明,一生垂钓何时休,一春去了一春还,宁弃闹事金百斗,愿做山间戏鱼人且听风吟,御剑无声——袭风丶本人从事机械加工行业,喜欢动动手折腾一些东西年。
  • 京剧老生吊嗓子教学(京剧练唱与吊嗓)
  • 2024-11-25京剧练唱与吊嗓接下来说的是快板,是最为吃功的,吊快板节奏要与琴师说好尺寸,既不能拖,亦不能慢,嘴里得有字又得有味,马虎不得,快板顾名思议就是要唱的快,稳而不乱,稳而有字,稳而有味,要达到快板字字清晰,是基于在其它板。
  • 时乖运蹇的意思(怎么理解时乖运蹇的意思)
  • 2024-11-25怎么理解时乖运蹇的意思时乖运蹇,汉语成语,拼音是shíguāiyùnjiǎn,意思是时运不好,命运不佳;这是唯心主义宿命论的观点成语出处:元·白朴《墙头马上》第二折:“早是抱闲怨,时乖运蹇又添这害相思,月值年灾”近义词:时。
  • 女神节要浪漫但更要安全(女神节特辑飒让风火递绽放火光的)
  • 2024-11-25女神节特辑飒让风火递绽放火光的美丽温柔的、坚强果敢的、永不言弃的、吃苦耐劳的……每个人对女神的定义都各不相同在风火递,就有着这样一群又酷又飒的女孩她们在工作中出类拔萃,遇上问题了敢于承担,生活中更是多才多艺她们在不同的岗位,挥洒着。
  • 太阳系八大行星详解 太阳系八大行星科普知识
  • 2024-11-25太阳系八大行星详解 太阳系八大行星科普知识海王星是太阳系中第八颗行星,也是一颗气态行星它距离太阳较远,需要164.8年才能完成一次公转海王星是最小的四颗气态行星之一,但它仍然比地球大四倍多它的密度比木星和土星还要高,可能是由于它内部的岩石和冰。