Simple Reverse - 0x18(2023 Lab - WinMalware - sub_140001120)

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
    21
      int 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
2
3
4
5
6
7
8
9
f = [0x0E, 0x0A, 0x52, 0x51, 0x25, 0x2B, 0x57, 0x3B, 0x4E, 0x3D, 0x0E, 0x11, 0x0E, 0x51, 0x1B, 0x3B, 0x11, 0x53, 0x2F, 0x28, 0x25, 0x31, 0x14, 0x0D, 0x0E, 0x01, 0x2B, 0x64]
# v3 = [0x64, 0x63, 0x62, 0x7A]
key = [0X7A, 0X62, 0X63, 0X64]

Name = []
for i in range(len(f)):
    Name.append(chr(key[i % 4] ^ f[i]))

print("Flag: FLAG{" + "".join(Name) + "}")

Flag: FLAG{th15_I4_4_mut3x_k1LL_SwitcH}