---
# System prepended metadata

title: CHTB2021-Alienware
tags: [CTF-WRITEUP]

---

CHTB2021-Alienware
===
## Info
**題目敘述**

We discovered this tool in the E.T. toolkit which they used to encrypt and exfiltrate files from infected systems. Can you help us recover the files?

**能力**
- 靜態分析exe檔
- 動態分析提取dll檔
- 靜態分析dll檔
- 動態分析
- 可獨立查詢windows API的使用手冊
- 可動態修改calling table和參數

**難易度**
難易度：★★★☆☆
###### tags: `CTF-WRITEUP`


## Write_Up
### 使用 IDA Pro競態分析
`SHIFT + F12`看到`xuTaV.dll`、`%s%s`和`encryptFiles`

![](https://i.imgur.com/eAya118.png )

追蹤字串位置在`TlsCallback_0`

![](https://i.imgur.com/NfFtQwn.png)

`TlsCallback_0`做了幾件事：
1. 載入Resource檔案

    ![](https://i.imgur.com/jIgiSaj.png)

2. 向系統申請一段空間並初始為0
3. 逐Byte做xor解碼
4. 將每一個解碼完Byte存進去剛剛申請的空間
5. 寫檔並命名為xuTaV.dll
6. 動態載入xuTaV.dll並使用其中encryptFiles的API

![](https://i.imgur.com/sxCi1P4.png)

因此目標在取得xuTaV.dll並分析encryptFiles怎麼實作加密功能

### 動態分析找出 xuTaV.dll
方法一：從x64dbg的記憶體中提取

![](https://i.imgur.com/OQGUGCT.png)

方法二：程式執行到一半到存放xuTaV.dll的位置拉出來就好
`GetTempPathA`會取得當下User目錄下`Temp`得位置

![](https://i.imgur.com/JcB8VQB.png)

檔案會存在這個目錄下

![](https://i.imgur.com/MhSzWUy.png)

### 靜態分析xuTaV.dll
直接定位到`encryptFiles`的位置
`encryptFiles`做了幾件事：
1. 將 `C:\\ User \\ [user_name] \\ Docs\\ . `路徑下的所有檔案逐一加密
2. 加密後的檔案會另存新檔，並"再"加上附檔名`.alien`
3. 透過`sub_1800011C0`函式進行檔案加密，完成後，會將原本的檔案刪除
 
![](https://i.imgur.com/LTQlUAT.png)

`sub_1800011C0`做了幾件事：
1. 利用`CryptDeriveKey`產生加密的金鑰
2. 使用`CryptEncrypt`函式並引用上一步產生的金鑰進行加密

觀察微軟對這兩個API的說明
- `CryptDeriveKey`
    - Important  This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases.
    - The CryptDeriveKey function generates cryptographic session keys derived from a base data value. **This function guarantees that when the same cryptographic service provider (CSP) and algorithms are used, the keys generated from the same base data are identical. The base data can be a password or any other user data.**
    - 加密和解密使用同一把金鑰，且當CSP相同，金鑰會相同
        - 這樣就不用找解密金鑰了~直接用現成的就好 :+1: 
- `CryptEncrypt`
    - Important  This API is deprecated. New and existing software should start using Cryptography Next Generation APIs. Microsoft may remove this API in future releases.
    - The CryptEncrypt function encrypts data. The algorithm used to encrypt the data is designated by the key held by the CSP module and is referenced by the hKey parameter.
        ```
        BOOL CryptEncrypt(
        HCRYPTKEY  hKey,
        HCRYPTHASH hHash,
        BOOL       Final,
        DWORD      dwFlags,
        BYTE       *pbData,
        DWORD      *pdwDataLen,
        DWORD      dwBufLen
          );
        ```
    - 觀察加密和解密(`CryptDecrypt`)的差別--->差一個`dwBufLen`
        ```
        BOOL CryptDecrypt(
        HCRYPTKEY  hKey,
        HCRYPTHASH hHash,
        BOOL       Final,
        DWORD      dwFlags,
        BYTE       *pbData,
        DWORD      *pdwDataLen
        );
        ```
### 動態分析xuTaV.dll
透過動態分析驗證思緒：
1. 建立 C:\\ User \\ [user_name] \\ Docs\\  路徑
2. 將 Confidential.pdf.alien 放在指定路徑下
3. 動態分析將「 斷點 」下在 CryptEncrypt 附近
4. 將多餘的參數刪掉 
5. 修改API呼叫表
6. 將「斷點」下在「 寫檔完成之後」，再檢查指定資料夾下是否解密成功 :question: 

以下為成式執行的流程，再動態分析中有3個重點

![](https://i.imgur.com/1j7431H.png)

1.`NOP`不必要的參數

![](https://i.imgur.com/IwL3l5G.png)

2.修改 CryptEncrypt -> CryptDecrypt

修改後：
![](https://i.imgur.com/Kd0nDlA.png)

3.設斷點在完成寫檔，避免原檔案被刪除

最後會取得「Confidential.pdf.alien.alien」檔案，將副檔名都刪掉打開看看是否會成功^^

![](https://i.imgur.com/j4ocBHZ.png)




