什麼是 JavaScript 混淆以及為什麼它是一種威脅?

什麼是 JavaScript 混淆以及為什麼它是一種威脅?

AVG 最近告訴我,一個網頁是因為以下原因被封鎖:JavaScript 混淆

為什麼該網頁被封鎖?

答案1

混淆是一種「模糊」JavaScript 程式碼的真正意義和意圖的方法。有些網站將其用作想要複製/借用其程式碼的人的障礙。其他網站使用它作為隱藏程式碼實際意圖的手段。

一些形式的遮蔽:

  1. 自動將變數重新命名為無意義的短名稱,使程式碼可讀性更差且更難理解。
  2. 刪除所有額外的空格和換行符,使程式碼成為一大長行。
  3. 使部分程式碼自動生成,以便程式碼的第一遍運行以建立實際程式碼,然後運行該實際程式碼來執行預期的操作。
  4. 使用字元程式碼和字串操作與 eval 結合,而不是普通的 javascript 程式碼來建構將運行的實際程式碼。

模糊本身並不是邪惡的,但它可以用來試圖隱藏邪惡的意圖,這可能正是 AVG 所反對的。它會偵測到如此多的遮擋,以至於無法判斷 JavaScript 是否正在嘗試執行它試圖阻止的操作。因此,它預設將程式碼聲明為不安全,因為它無法驗證程式碼是否正常。

答案2

混淆是指隱藏某物的預期意義。

在本例中,一個清晰可讀的 JavaScript 片段,例如

window.onload = function() { alert("Hello " + username) };

可以替換為

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

甚至

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

所有三個程式碼片段都執行完全相同的操作,但僅閱讀第一個程式碼片段就可以讓您輕鬆理解其意圖。

顯然,AVG 會在允許 JavaScript 程式碼執行之前嘗試了解其用​​途。當程式碼被混淆時,AVG 可能會失敗。因此發出警告。

話雖這麼說,有些網站混淆他們的 JavaScript 並不是出於惡意,而是為了讓他們的作品難以被竊取。如果用於此目的,混淆通常是沒有用的,但重點是混淆並不一定意味著惡意。

相關內容