js常用套路(数值的七种写法)
js常用套路(数值的七种写法)
2024-11-21 10:16:00  作者:浮生亂  网址:https://m.xinb2b.cn/tech/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代码的安全性得到了大大的提升。

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

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

  • 养老行业的人才问题(康养焦点周刊VOL.30)
  • 2024-11-22康养焦点周刊VOL.30“每周一为你解读一周动态”政策关注民政部、中央文明办:《推动社区社会组织广泛参与新时代文明实践活动》2022年8月24日中央人民政府消息,民政部、中央文明办联合印发《关于推动社区社会组织广泛参与新时代。
  • 一代女皇武则天演员表(一代女皇武则天演员介绍)
  • 2024-11-22一代女皇武则天演员介绍《一代女皇武则天》是由李岳峰执导,潘迎紫、樊日行、崔浩然、许家荣等主演的台湾古装权谋电视剧该剧讲述了中国历史上唯一一位女皇帝武则天一生的故事于1985年11月18日于台湾首播,收获60%以上的收视率。
  • 汝城县最美散文(何俭功原创诗歌鸟瞰帝乡枣阳)
  • 2024-11-22何俭功原创诗歌鸟瞰帝乡枣阳鸟瞰帝乡枣阳文/何俭功(雪潮)就像鸟儿一样仿佛将日月依傍站在斑斓的彩云上鸟瞰枣阳广袤的帝乡.九条巨龙舞动酣畅是大地塑造的山岗神奇传说奠定了历史龙飞白水东汉就无限辉煌.二八星宿拱卫着帝皇也现身于灿烂的枣。
  • 糖尿病血糖控制不好可以吃苹果(糖尿病人不能吃苹果)
  • 2024-11-22糖尿病人不能吃苹果随着生活水平的提高,得糖尿病的患者也越来越多,诱发糖尿病的主要因素之一,就是因为肥胖和长期摄入过多高热量高脂肪的食物,因此,糖尿病也被称为“富贵病”一旦确诊糖尿病,患者就需要终身吃药治疗,而且饮食一定。
  • 鱼胶怎么存放(如何保存鱼胶)
  • 2024-11-22如何保存鱼胶干燥鱼胶的保存最怕受潮、生虫,所以不建议放在厨房,因为厨房的湿气比较大凡是家里湿气大的地方都不合适要保存在干燥的地方,一般就是书架衣柜顶部这些高一点的地方也可以用袋子密封好后挂起来,挂高一点就好通风不。
  • 电脑升级内存详细教程(装32G内存是什么体验)
  • 2024-11-22装32G内存是什么体验说到电脑内存问题,最近很多朋友都在抱怨自己的电脑内存不足,看视频玩游戏都不得劲呀~大家都知道内存条,其实是电脑的临时数据储存器,主要负责操作系统和软件在运行的过程中加载和交换临时数据这也使得很多朋友,。
  • 不负韶华春风十里不如你(春去秋来留不住)
  • 2024-11-22春去秋来留不住这世间最珍贵的,不是已经失去的东西,而是你现在所拥有的一切人生不过四季:春、夏、秋、冬四季虽能轮回,但生命不会重来,只有春种一粒粟,才能秋收万颗子本以为过了今天有明天,过了明天还有后天,但有时错过了,。
  • 12月8号蚂蚁庄园答案哪个是成语 找一找下列哪个成语用错了蚂蚁庄园
  • 2024-11-2212月8号蚂蚁庄园答案哪个是成语 找一找下列哪个成语用错了蚂蚁庄园找一找下列哪个成语用错了?这是支付宝蚂蚁庄园7月31号今日庄园小课堂的问题,很多用户还不知道答案,本文小编会为大家详细介绍7月31日今天蚂蚁庄园课堂小鸡饲料答案蚂蚁庄园回答知识送饲料活动开始啦!蚂蚁庄。
  • 男人爱你越深越会有这6种表现(男人对你有这几个表现)
  • 2024-11-22男人对你有这几个表现情不知所起,一往而深当爱的萌芽在一个人心里根深蒂固的时候,TA对你就会异于常人,那种想要保护你,想要给予你自己所有的爱的感觉,会让你觉得幸福无比所以,人们才说爱情是美好的,是最让人向往的其实,在感情的。
  • 店铺盈亏怎么计算(新手开店盈亏平衡表)
  • 2024-11-22新手开店盈亏平衡表盈亏平衡表,是用来演算一个店做到什么程度可以盈利的测算表格当你看上一个店铺后,就基本知道这个店铺的运营成本的高低了,就可以做这个测算,测算完,就知道一个店做起来的难易程度,租不租心理也更有谱,如果租下。
  • 中东大国真实状况(中东为何一直这么乱)
  • 2024-11-22中东为何一直这么乱本文为“阳光洒过的天”原创文章,感谢您的关注在当今社会,和平似乎成了全世界人民共同的愿望,苏联的解体标志着冷战的结束,在大部分地区都在追求和平和经济发展时,有个地区却不断的发生战乱,这个地区就是中东图。