# Week 3
## Time Chaos
>File: Time_chaos.pcap
Khi mở file lên trong Wireshark, thấy toàn những packet với protocol ICMP.

Khi so sánh các packet với nhau, thấy có mỗi trường checksum và data là có thay đổi

Vì checksum dùng để phát hiện lỗi, nên tập trung vào trường data
Thử dùng tshark để extract trường data của các packet ra

Ném output lên CyberChef và chọn recipe là From Hex vì trường data là dưới dạng mã hex

Có vẻ đã gần ra flag nhưng không đúng lắm, quay lại nhìn vào tiêu đề challenge, Time Chaos, sự hỗn độn thời gian

Và đúng như thế, mục Time của các packet bị sắp xếp lộn xộn
Dùng tshark để extract cả trường time và data, sau đó sắp xếp time trước

`awk -F'\t' '{print $2}'`: để không in ra trường time cho đỡ rối
Khi ném lên CyberChef thì ra được flag

```
FLAG: KMACTF{C0d3_cun9_du0c_t0Ol_Cun9_DuOc_nHun9_h1_v0n9_b4n_kh0n9_l@m_m0t_c4cH_tHu_C0nG}
```
## sit

Sau khi giải nén được các file như sau

Vì đề bài bảo là vừa mở máy tính lên thì tài liệu bị mã hóa, cần phải xem những ứng dụng tự khởi động khi mở máy
Đến `C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`
Thấy các file sau

Thấy có file `NEWSHO~1.LNK` khá lạ nhưng vì nó 0 byte, empty nên bỏ qua
Ngoài ra thì thấy file UnikeyNT.lnk, thử export ra và kiểm tra

Rõ ràng đây không phải là file Unikey mà là file mã độc giả dạng Unikey, là shortcut dẫn đến `C:\Users\admin\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content\datahost.exe`
Ngoài ra, khi cat file này còn tìm được path của file tài liệu đã bị mã hóa

Tiếp theo, extract file `datahost.exe` từ `C:\Users\admin\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content`
Sử dụng [Detect It Easy](https://github.com/horsicq/Detect-It-Easy) để xem file này được viết bằng gì

Language là python, thử strings kiểm tra xem có python trong file đó không

Như vậy là có, tiếp tục dùng [pyinstxtractor](https://github.com/extremecoders-re/pyinstxtractor)

Sau khi extract thấy có `datahost.pyc`, tiếp tục dùng [pylingual](https://pylingual.io/) để reverse file đó, ra được kết quả
```python
# Decompiled with PyLingual (https://pylingual.io)
# Internal filename: datahost.py
# Bytecode version: 3.7.0 (3394)
# Source timestamp: 1970-01-01 00:00:00 UTC (0)
import os
import sys
import random
import platform
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Hash import SHA256, MD5
def encryption(file, key, iv):
with open(file, 'rb') as enc:
data = enc.read()
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(data, AES.block_size))
write = ciphertext
enc.close()
with open(file + '.huhu', 'wb') as data:
data.write(write)
data.close()
while True:
filename = sys.argv[1]
sed_ = int(os.path.getctime(filename))
random.seed(sed_)
key = SHA256.new(str(random.randint(1, 13374953)).encode('utf-8')).digest()
iv = MD5.new((platform.node() + '-' + os.path.dirname(os.path.abspath(filename))).encode('utf8')).digest()
encryption(filename, key, iv)
os.remove(filename)
break
```
Có thể thấy cách file mã độc này hoạt động
+ Mở file
+ Tạo mã AES CBC mode dựa vào `key` và `iv`
+ Thêm extension `.huhu` vào file
+ Pad data vào AES block size
+ Mã hóa
+ Xóa file gốc và lưu file mới với extension `.huhu`
Để decrypt thì cần dựng lại cách đoạn mã này vận hành, cùng với đó là cần những thông tin cần thiết như path của file, tên máy và thời gian file được tạo
Path như đã tìm được từ trước: `C:\Program Files\Common Files\Microsoft Shared\TextConv`
Tên máy thì dùng Registry Explorer, mở SYSTEM và tìm được computer name là `KTMM`
Thời gian tạo file thì mở MFT, thấy thời gian tạo của file gốc đã bị đoạn mã xóa đi

Convert sang là

Từ đó, viết được script để decrypt như sau
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from Crypto.Hash import SHA256, MD5
import random
# === CONFIG ===
filename = "tailieu.huhu"
output_file = "tailieu_decrypted.txt"
created_time = 1692896933
# 🎯 Machine name (platform.node())
computer_name = "KTMM"
# 🎯 Full path (dirname of the file)
original_path = r"C:\Program Files\Common Files\Microsoft Shared\TextConv"
# === KEY & IV generation ===
random.seed(created_time)
key = SHA256.new(str(random.randint(1, 13374953)).encode('utf-8')).digest()
iv_input = computer_name + "-" + original_path
iv = MD5.new(iv_input.encode('utf8')).digest()
# === DECRYPT ===
with open(filename, 'rb') as f:
ciphertext = f.read()
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
# === SAVE OUTPUT ===
with open(output_file, 'wb') as f:
f.write(plaintext)
print(f"[+] Decryption complete. Output saved to {output_file}")
```
Sau khi chạy code, ra được file output

Đây là file pdf nên cần chuyển về extension `.pdf`
Sau khi mở lên thì hiện ra mã QR, quét mã và có được flag

```
FLAG: KMA{Wh3n_Pl4y1n9_CTF,_pl@Y_w1tH_4ll_Ur_h34r7}
```