Atom
HTB - JavaScript Deobfuscation

HTB - JavaScript Deobfuscation

混淆

前往jsconsole 輸入以下乾淨請求:

1
console.log('HTB JavaScript Deobfuscation Module');

接下來我們使用混淆工具Javascript Obfuscator
輸入跟剛剛同樣指令
混淆後可以看到指令變成無法輕易看懂的文字了

1
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1.0(\'2 3 4 5\');',6,6,'log|console|HTB|JavaScript|Deobfuscation|Module'.split('|'),0,{}))

一樣回到jsconsole 輸入混淆過後的指令
會發現輸出結果是一樣的。

這種類型的混淆我們稱為打包,通常可以從初始函數“function(p,a,c,k,e,d)”看出來

進階混淆可以到obfuscator
可以看到有超多選項
圖1

去混淆

若使用打包方法進行混淆的話,可以使用這個簡易線上工具 來查看原code

常見文字編碼:

  • base64
  • hex
  • rot13

當碰到看不懂的字串可以到Cipher Identifier 看看能不能辨識出來是什麼編碼
例如:
圖1
圖1

確認是base64後我們可以用Base64 編碼 / 解碼 進行解碼
最後將解出來的值帶回請求
圖1


實作題

  1. 嘗試研究網頁的 HTML 程式碼,並識別其中使用的 JavaScript 程式碼。所使用的 JavaScript 檔案的名稱是什麼?

  2. 找到 JavaScript 程式碼後,嘗試運行它,看看它是否執行任何有趣的功能。你得到了什麼回報嗎?

  3. 您可能已經注意到,JavaScript 程式碼被混淆了。嘗試應用您在此模組中學到的技能來解混淆程式碼並檢索「標誌」變數。

  4. 嘗試分析去混淆的 JavaScript 程式碼,並了解其主要功能。完成此操作後,請嘗試複製它正在執行的操作以獲取金鑰。鑰匙是什麼?

  5. 獲得密鑰後,嘗試確定它的編碼方法並對其進行解碼。然後使用解碼後的金鑰「key=DECODED_KEY」向同一上一頁發送「POST」請求。你拿到的旗幟是什麼?


第一題,連線至標的後打開查看原始碼即可。

第二題,打開js腳本後,直接複製前往jsconsole 執行即可。

第三題
由於整串很難讀懂,因此我們將腳本放到簡易線上工具 整理一下
題目詢問Flag的變數,因此我們將整理完的變數輸出到jsconsole
圖1

第四題,首先讓我們看乾淨的原始碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function apiKeys()
{
var flag='HTB
{
n'+'3v3r_'+'run_0'+'bfu5c'+'473d_'+'c0d3!'+'
}
',xhr=new XMLHttpRequest(),_0x437f8b='/keys'+'.php';
xhr['open']('POST',_0x437f8b,!![]),xhr['send'](null)
}
console['log']('HTB
{
j'+'4v45c'+'r1p7_'+'3num3'+'r4710'+'n_15_'+'k3y
}
');

可以看到除了前面兩題外中間還有一個POST到keys.php
我們依照上面撰寫的進行POST
圖1

第五題,我們將前面拿到的字串放到16進制解碼器後將拿到的值帶入參數到標的
圖1
圖1

本文作者:Atom
本文鏈接:https://d0ngd.github.io/2026/02/25/JavaScript Deobfuscation/
版權聲明:本文採用 CC BY-NC-SA 3.0 CN 協議進行許可