首页
/
每日頭條
/
生活
/
js常用套路
js常用套路
更新时间:2024-11-26 23:34:48

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
推荐阅读
ibm 微軟華為
ibm 微軟華為
免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星财經官方立場。小編:記得關注哦來源:區塊鍊騎士本周二,InterWork聯盟(IWA)正式啟動了平台的非營利組織運營,緻力于創建在通證支持的生态系統中增強...
2024-11-26
從廢舊機器中提取黃金
從廢舊機器中提取黃金
這一種新型黃金提取工藝可以以更低廉的成本從電子垃圾中提取黃金,相較于傳統回收黃金方法更加高效、節能、高利潤。阻礙電子垃圾回收的一個因素,是實際回收過程本身。我們需要更便宜、更安全、更清潔或更有效的方法,從電子産品中分離和回收有價值的元素,然...
2024-11-26
碧藍航線第四期科研船強度
碧藍航線第四期科研船強度
碧藍航線演習活動作為主要的玩家之一和常規的刷圖不太一樣,對于艦娘方面的練度還有體系追求是非常嚴格的,甚至裝備方面也不太相同,作為類似PK的模式,如今演習模式中有哪些比較靠譜和好用的配置呢?來一起看看吧。吃喝門長門登場後打出來的強悍套路和體系...
2024-11-26
尿路感染飲食禁忌有哪些
尿路感染飲食禁忌有哪些
尿路感染又稱泌尿系統感染,是尿路上皮對細菌侵入導緻的炎症反應,通常伴随有菌尿和膿尿。臨床表現主要包括泌尿系統症狀(尿頻、尿急、尿痛等膀胱刺激征)和全身感染的症狀(如高熱、寒戰等)。确診泌尿系感染除了應使用抗生素治療外,還需對飲食加強注意。(...
2024-11-26
科比墜機洛杉矶現場
科比墜機洛杉矶現場
科比·布萊恩特圖片來源/NBATV​據美國多家媒體報道,北京時間1月27日淩晨,NBA傳奇球星科比·布萊恩特在一起直升飛機事故中不幸離世,年僅41歲。墜機地點位于加利福尼亞州洛杉矶縣阿拉巴薩斯地區,機上一共9人,包括科比的二女兒——13歲的...
2024-11-26
Copyright 2023-2024 - www.tftnews.com All Rights Reserved