js常用套路(数值的七种写法)
js常用套路(数值的七种写法)
2024-11-22 11:16:16  作者:浮生亂  网址:https://m.xinb2b.cn/sport/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-22关于清代宗室问题的解读今天看到有个人的留言,感觉还挺有代表性的,鉴于许多人都有这方面的误解,我解答一下,也算回答他吧文章出自:清朝宗室待遇与明朝宗藩的区别清代宗室袭爵要考考试,考试不合格是不能袭爵的清代袭爵分为世袭和降袭两。
  • 心如止水岁月静好诗句(有一句诗词温柔如水)
  • 2024-11-22有一句诗词温柔如水有一句诗词,温柔如水,有一句诗词,美到骨子里,只要一想起,便荡起温柔的涟漪月上柳梢头,人约黄昏后——欧阳修《生查子·元夕》水精帘动微风起,满架蔷薇一院香——高骈《山亭夏日》可堪孤馆闭春寒,杜鹃声里斜阳。
  • 新扦插的长寿花怎么养护 养长寿花一个扦插窍门
  • 2024-11-22新扦插的长寿花怎么养护 养长寿花一个扦插窍门长寿花代表健康长寿,受到很多花友的喜爱,开花开得比较多,鲜艳漂亮它属于多年生肉质草本植物,一般花期在二月到五月左右,喜欢比较温暖的环境长寿花比较好繁殖,甚至用叶片都可以扦插如果想种长寿花,根本不用买,。
  • 决明子和什么泡水喝可以明目(决明子泡水喝的功效)
  • 2024-11-22决明子泡水喝的功效决明子是中药中的一种,决明子的药用价值非常高,所以被很多人熟知,在很多歌里面我们也能听到决明子,决明子真的是很出名那么你知道决明子有什么奇特的功效吗?下面就一起了解一下吧决明子是很多减肥茶和减肥药里的。
  • 使徒行者2电视剧感情戏(曾主演使徒行者2爆红)
  • 2024-11-22曾主演使徒行者2爆红本文由港剧资讯君作者JacksonTsang原创转载请注明:严厉打击任何抄袭行为,势必全网投诉到底!现年35岁人气男神周柏豪,今日现身电视城为出席「2019劲歌金曲优秀选第一回」期间,受访时他透露早前。
  • rog游戏手机5首发体验(超顶屏幕六指战神)
  • 2024-11-22超顶屏幕六指战神每到3月份,各家厂商都在扎堆发布新机本来按照惯例,ROG的游戏手机一般都在第二或第三季度才会发布,但今年却直接加入了与其他两家游戏手机厂商的正面厮杀中没有了Plus型号的骁龙芯,直接跳过4代命名,这届。
  • 豆豉油焖笋怎么做(制作豆豉油焖笋的方法)
  • 2024-11-22制作豆豉油焖笋的方法材料:绿竹笋8支、豆豉1大匙、嫰姜片少许调味料:素蚝油1大匙、黑糖(增加色泽)2茶匙、盐适量、胡椒粉少许、昆布粉少许、香油少许竹笋去皮洗净切滚刀块,在滚水中川烫即起锅炒锅入油爆香姜片及豆豉(油略多些)。
  • 大仲马的人生格言(大仲马的玛尔戈王后)
  • 2024-11-22大仲马的玛尔戈王后《玛尔戈王后》是法国作家大仲马的代表性小说之一在这本著作里,作者借着宗教斗争的外壳,讲述了法国宫廷的权力游戏,以及在游戏背后发生的爱情友情故事在故事中,作者着重刻画了两个高尚的拥有骑士精神的男性,一个。
  • 乳房按摩穴位可以丰胸吗(正确按摩胸部的小妙招)
  • 2024-11-22正确按摩胸部的小妙招胸部的健康,除了保养以外,我们还要注意它淋巴的通常,重视胸部的健康!日常我们可以多给胸部做按摩,还可以起到丰胸的作用哦!正确按摩胸部的方法是什么呢?第一种:托胸式用左手托住左胸右手握拳利用指节按摩屋翳。
  • 我的世界地狱里迷路怎么办(地狱迷路怎么办)
  • 2024-11-22地狱迷路怎么办​在我的世界中,地狱(下界)的样子和环境是和主世界完全不同的,哀声嚎叫的恶魂,追杀到天涯海角的僵尸猪人以及神秘的地狱堡,还有地狱奇特的地形分布,非常容易让我们迷路,在地狱我们无法生成地图,指南针也变成。
  • 湖北黄冈市几个区(湖北省黄冈市并不是县城)
  • 2024-11-22湖北省黄冈市并不是县城(本文讨论的问题就是湖北省行政区划当中黄冈市,这也是一个常常会被人误解的地方,有一些观点需要纠正)2020年春节期间,有人提到了,不要只关心武汉市,也需要关心武汉市周边的县城,其中提到了黄冈市,这里面。
  • 满天星怎么养才正确(作为一个天生的配角)
  • 2024-11-22作为一个天生的配角满天星,原名为重瓣丝石竹,原产地中海沿岸属石竹科多年生宿根草本花卉为常绿矮生小灌木,其株高约为65~70厘米,茎细皮滑,分枝甚多,叶片窄长,无柄,对生,叶色粉绿喜温暖湿润和阳光充足环境,适宜于花坛、路。