首页
/
每日頭條
/
生活
/
js常用套路
js常用套路
更新时间:2025-04-18 01:03:01

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

這些變态的寫法,你能看懂幾種呢?

或者你有什麼新奇的手法?評論區交流一下吧。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
柑橘幼樹結果樹怎麼剪好看
柑橘幼樹結果樹怎麼剪好看
經常有果農朋友問,橘子樹應該什麼時候修剪、怎麼修剪?每次看到這種問題,都不知道怎麼回答好,畢竟柑橘修剪是一門技術,不是一兩句話就能說清楚的。下面我們就專門針對柑橘修剪來說一說,希望對大家有所幫助。柑橘樹為什麼要修剪?因為這和最終産量相關,更...
2025-04-18
百蝶圖中最醜的剪紙
百蝶圖中最醜的剪紙
陳立,奈曼版畫院畫家,工藝美術大師,擅長剪紙、書法、篆刻、版畫、國畫。64年生,屬龍,内蒙古赤峰紅山人,故别号紅山人、紅山居士、紅山齋齋主、紅山堂主、紅山玉龍、龍之傳人。剪紙,又叫刻紙,是一種紙上镂空藝術。其特點是千刀相連,萬刀不斷,分陰剪...
2025-04-18
枕圓枕對頸椎有好處嗎
枕圓枕對頸椎有好處嗎
出現頸椎病危害後果多,而且還會造成頸椎疼痛,不能正常的睡覺,平時大家需要注意頸椎病的緩解方法,有效的進行改善,尤其是都市的人群生活壓力比較大,長時間的這樣還會造成頸椎疼痛,帶來不利後果,着實令人非常痛苦。大家要注意改善方式和u型枕進行緩解。...
2025-04-18
寫好記叙文的幾個步驟
寫好記叙文的幾個步驟
如何寫好記叙文?一直是中小學語文老師探索的課題,我在長期的記叙文寫作教學中總結出十種行之有效的寫作方法,并用一個字加以總結其特點。簡單精煉,簡明扼要,古人雲:文無定法,然文又有法,對于初學者,要授之以漁,教學生寫記叙文基本的寫作方法,下列寫...
2025-04-18
白色天然水晶礦
白色天然水晶礦
在科學發展史上,礦物的定義曾經多次演變。按現代概念,礦物首先必須是天然産出的物體,從而與人工制備的産物相區别。已知的礦物約有4700種左右,在固态礦物中,絕大部分都屬于晶質礦物,隻有極少數(如水鋁英石)屬于非晶質礦物。被譽為“郵票王國”的列...
2025-04-18
Copyright 2023-2025 - www.tftnews.com All Rights Reserved