在代碼混淆算法,我使用這個語法看一步:高級語法:「0 [構造函數] [構造函數]()()」 - 它如何工作來評估代碼?
0["constructor"]["constructor"](
0["constructor"]["constructor"](
"return \"alert()\""
)();
)();
我的JavaScript的知識幫我沒有更多...
typeof 0 => number
typeof 0["constructor"] => function
typeof 0["constructor"]["constructor"] => function
請,你能解釋一下什麼是JS口譯員做'處理'這個代碼? 我無法理解它的工作方式!
And:結尾「()」是什麼意思?我無法理解語法
我試着用螢火JS控制檯
執行
0["constructor"]["constructor"](
"return \"alert()\""
)();
控制檯輸出"alert()"
,(帶雙引號)
我鑫卡特這相當於打到一個評估,但它不是。運行此:
eval("return \"alert()\"");
只是導致SyntaxError: return not in function
。
執行這個問題的第一個片段,是完全等同於簡單地執行alert()
,讓我明白內代碼思文就像是一個函數體並執行它,所以內正在恢復"alert()"
;外部讀取最後一個字符串,並認爲它是一個函數體,因此執行代碼,結果是警報觸發。
但是,我再說一遍。 這是什麼意思的語法?最後對「()」有用嗎?
0["constructor"]["constructor"](
"some code to be evaluted"
)();
[閱讀點和括號標記(https://developer.mozilla.org/en -US /文檔/網絡/的JavaScript /參考/運營/ Member_Operators)。 *「最後的」()「有什麼用處?」*我不知道這應該是什麼意思,但是'()'調用了它之前的引用函數。在這種情況下'0 [「構造函數」] [「構造函數」]',我們'功能'。 –