Simple Reverse - 0x18(2023 Lab - WinMalware - sub_140001120)
Description
分析 eductf-lab.exe 中的 function sub_140001120 在做什麼,並找出其所建立的 Mutex 的名稱。 Flag format: FLAG{mutex_name}
Background
- CreateMutexA
- GetLastError
-
使用 Mutex 物件
可以使用 mutex 物件 來保護共用資源,避免多個執行緒或進程同時存取。 每個執行緒都必須等候 mutex 的擁有權,才能執行可存取共用資源的程式碼。 例如,如果數個執行緒共用資料庫的存取權,執行緒可以使用 mutex 物件一次只允許一個執行緒寫入資料庫。
-
系統錯誤碼 (0-499)
ERROR_ALREADY_EXISTS 183 (0xB7) 無法建立檔案,該檔案已存在。
Source code
- sub_140001120
:::spoiler IDA Source Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21int sub_140001120() { HANDLE MutexA; // rax int i; // [rsp+20h] [rbp-78h] int v3[2]; // [rsp+30h] [rbp-68h] CHAR Name[32]; // [rsp+38h] [rbp-60h] BYREF char v5[32]; // [rsp+58h] [rbp-40h] BYREF v3[0] = 1684234874; qmemcpy(v5, &unk_140003348, 0x1Dui64); for ( i = 0; i < 28; ++i ) Name[i] = *(v3 + i % 4) ^ v5[i]; MutexA = CreateMutexA(0i64, 1, Name); if ( MutexA ) { LODWORD(MutexA) = GetLastError(); if ( MutexA == 183 ) exit(0); } return MutexA; }
:::
Recon
這一題有個小地方要注意,雖然觀察過source code是非常簡單的建立mutex的操作,題目想要知道的mutex name也非常簡單,只是個xor就知道的東西,不過在實作上需要注意endian的問題,一開始我是直接按照0x64, 0x63, 0x62, 0x7A
的順序,但結果輸出一些ascii的字元,其實他是從後面讀進來再開始操作xor
- Malware使用Mutex的用途
- 與一般程式相同,用於跨 process / thread 間的 synchronization
- 避免重複感染、勒索 (LockBit 3.0、RedLine Stealer)
Exploit
1 |
|
Flag: FLAG{th15_I4_4_mut3x_k1LL_SwitcH}