---
# System prepended metadata

title: Memory Forensics

---

# Memory Forensics
## Khái niệm
* **Memory Forensics** là quá trình thu thập và phân tích dữ liệu trong bộ nhớ máy tính (**RAM**) hoặc các dạng tương tự (dump file, minidump, hibernate file, pagefile/swap, …).
* Mục tiêu: tìm dấu vết hoạt động hệ thống, ứng dụng và hoạt động tấn công/mã độc.
* Các thông tin có thể thu được bao gồm:
	* **Process**: danh sách tiến trình (bao gồm tiến trình ẩn hoặc `injected`).
	* **File**: các file đang mở hoặc đã load vào **RAM**.
	* **Network**: kết nối mạng, socket, bảng **ARP**, routing table.
	* **Registry/System config**: thông tin hệ thống cần thiết để duy trì hoạt động.
	* **User activity**: clipboard, lịch sử lệnh, shellbags, **IE/Edge** history.
	* **Credentials**: password hash, **LSA** secrets (tùy hệ điều hành, có thể bị hạn chế).
	* **Malware artifacts**: injected code, **API** hooks, rootkits, **DLL** ẩn, driver lạ.
## Đặc điểm
* **RAM** có tính chất `volatile` (dữ liệu thay đổi liên tục và biến mất khi tắt máy).
* Khác với **Disk Forensics** (dữ liệu ổ cứng ổn định, tồn tại lâu dài).
## Profiles và Symbol Tables
* Mỗi hệ điều hành/quản lý **RAM** khác nhau → cần `profile` (`Volatility 2`) hoặc `symbol table` (`Volatility 3`) để phân tích.
* Cách dùng:
	* **Volatility 2** (`Python2`): tương thích tốt với các file `memdump` từ hệ điều hành cũ (**WinXP**, **Win7**).
	* Build profile với **Vol2**: https://github.com/volatilityfoundation/volatility/wiki/
	* **Volatility 3** (`Python3`): hỗ trợ hệ điều hành mới, nhưng không tương thích ngược với **Vol2**.
	* Build profile với **Vol3**: https://volatility3.readthedocs.io/en/latest/
	* Khuyến nghị: cài cả **Vol2** và **Vol3**, thử **Vol2** trước, nếu lỗi thì chuyển sang **Vol3**.
## Công cụ hỗ trợ
* **Volatility** (mã nguồn mở, phổ biến nhất).
* **Rekall** (phân nhánh từ **Volatility**, nay ít dùng hơn).
* **Memoryze** (`FireEye`), **LiME** (`Linux Memory Extractor`), **DumpIt**, **WinPMEM**: dùng để tạo `memory dump`.
## Ứng dụng
* **Điều tra mã độc**: phát hiện tiến trình bị tiêm code, file thực thi ẩn.
* **Phân tích tấn công**: xác định hành vi `attacker` qua `command line`, kết nối mạng.
* **Khôi phục dữ liệu tạm thời**: clipboard, văn bản đang mở, lịch sử lệnh.
* **Hỗ trợ pháp y số**: cung cấp bằng chứng bổ sung ngoài `disk forensics`.

# Tìm hiểu cách Dump RAM
* **RAM Dump** (`Memory Dump`): quá trình ghi lại toàn bộ nội dung bộ nhớ **RAM** tại một thời điểm nhất định.
* Thông tin trong `dump` bao gồm:
	* Hệ điều hành: thành phần, tiến trình cốt lõi.
	* Ứng dụng: chương trình đang chạy và trạng thái của chúng.
	* Trạng thái hệ thống: tiến trình, luồng, kết nối mạng, dữ liệu tạm thời.
	* **RAM Dump** cung cấp `snapshot` bộ nhớ, phục vụ cho xử lý sự cố, điều tra pháp y số, nghiên cứu bảo mật, tối ưu hóa hệ thống.
## Lý do cần Dump RAM
* Xử lý sự cố hệ thống:
	* Xác định mã lỗi, driver lỗi, trạng thái hệ thống trước khi crash.
* Điều tra an ninh:
	* Phân tích `malware` và hành vi tấn công.
	* Thu thập bằng chứng số phục vụ điều tra.
	* Phát hiện xâm nhập, truy cập trái phép.
* Tối ưu hóa hiệu suất:
	* Phát hiện `memory leak`.
	* Kiểm tra cách ứng dụng phân bổ bộ nhớ.
* Phát triển phần mềm
	* Gỡ lỗi ứng dụng.
	* Kiểm tra quản lý bộ nhớ trong quá trình phát triển.
## Công cụ phân tích RAM Dump
* **WinDbg**: debugger của **Microsoft**, phân tích `dump` trên **Windows**.
* **Volatility Framework**: mã nguồn mở, hỗ trợ **Windows/Linux/Mac**.
* **Rekall**: phân tích bộ nhớ đa nền tảng.
* Kỹ thuật phân tích chính
	* **String search**: tìm chuỗi/text trong **RAM**.
	* **Process analysis**: kiểm tra tiến trình, command line, trạng thái.
	* **Memory structure analysis**: phân tích cấu trúc **OS**, module, vùng nhớ nghi ngờ.
# Các phương pháp Dump RAM
## Dump RAM với Windows
### Task Manager
* Khi dùng **Task Manager** → **Create Dump File**, ta không dump toàn bộ **RAM**, mà chỉ dump bộ nhớ liên quan đến 1 tiến trình → gọi là **Process Dump** hoặc **Minidump**.
* Vì vậy, `memdump` này không chứa dữ liệu `kernel`, không chứa tiến trình khác, mà chỉ tập trung vào tiến trình đã chọn.
![image](https://hackmd.io/_uploads/SyMKwjNKxx.png)
* Đợi tí là có file `dump`:
![image](https://hackmd.io/_uploads/r1UowoNFgg.png)
* Để phân tích file `dump` có thể dùng **Windbg**:
![image](https://hackmd.io/_uploads/HyjfOi4teg.png)
### Windows Crash Dump
* **Windows** tích hợp cơ chế tạo file `dump` khi hệ thống gặp `crash` (**BSOD** – `Blue Screen of Death`). Người dùng có thể cấu hình để lưu:
	* **Small Memory Dump** (`Minidump`)
	* **Kernel Memory Dump**
	* **Complete Memory Dump** (`Full Dump`)
#### Small Memory Dump (Minidump)
* Kích thước: ~256 KB.
* Chứa:
	* **Stop error code** (mã lỗi khi `crash`).
	* **Processor context** tại thời điểm lỗi (`registers`, `call stack`, **CPU**).
	* Danh sách driver đã nạp tại thời điểm lỗi.
	* Thông tin cơ bản về `process` và `threads` chạy trên **CPU** khi `crash`.
* Ứng dụng: Phân tích sự cố nhanh, hỗ trợ kỹ thuật.
* Công cụ: **WinDbg**, **BlueScreenView**.
#### Kernel Memory Dump
* Kích thước: Tùy dung lượng `kernel`, nhỏ hơn nhiều so với **RAM** thực tế.
* Chứa:
	* **Kernel-mode memory** (`executive memory`, `kernel stacks`, `driver data`).
	* Không bao gồm dữ liệu `user-space` (không chứa thông tin của các ứng dụng đang chạy).
* Ứng dụng: Phân tích lỗi `driver`, `kernel`.
* Công cụ: **WinDbg**, **Volatility**.
#### Complete Memory Dump (Full Dump)
* Kích thước: ≈ dung lượng **RAM**.
* Chứa:
	* Toàn bộ **RAM** (`kernel-mode` + `user-mode`).
	* Tất cả `process`, `threads`, `module`, `driver` đang chạy.
	* Dữ liệu `user-space` (ứng dụng).
* Ứng dụng: Phân tích chuyên sâu cả hệ điều hành lẫn ứng dụng.
* Công cụ: **Volatility**, **Rekall**, **WinDbg**.
#### Cấu hình và demo dump thử  
* Mặc định file `dump` sẽ được lưu tại `C:\Windows\MEMORY.DMP`.
* Cấu hình như sau:
![Screenshot 2025-08-21 211903](https://hackmd.io/_uploads/H1WBjiEtle.png)
![Screenshot 2025-08-21 211955](https://hackmd.io/_uploads/SyzujsVKlx.png)
![Screenshot 2025-08-21 212040](https://hackmd.io/_uploads/SJMjijVYex.png)
![image](https://hackmd.io/_uploads/BJNL3jEYxg.png)
![image](https://hackmd.io/_uploads/SkrK3iEtxx.png)
* Demo thử với **Complete Memory Dump**. Điều kiện làm được đương nhiên phải trigger crash, nói cách khác là khiến máy bị **BSOD**.
* Có nhiều cách nhưng mà có thể tham khảo ở [Can You Trigger a BSoD Intentionally?](https://www.fortect.com/fix-blue-screen-of-death/trigger-bsod-intentionally/)
```py
TASKKILL /IM svchost.exe /F
```
![image](https://hackmd.io/_uploads/HyxxyAsNtlx.png)
* Ngon luôn :))
![image](https://hackmd.io/_uploads/SkmxRj4Kex.png)
![image](https://hackmd.io/_uploads/BkkVAj4tex.png)
* Ta thấy số **RAM** không chênh lệch quá nhiều.
* `2GB×1024×1024=2,097,152KB`
![Screenshot 2025-08-21 213449](https://hackmd.io/_uploads/r1ne12VKee.png)

### DumpIt
* Cái này `dump` **RAM** có vẻ dễ nhất. Tải ở [đây](https://www.toolwar.com/2014/01/dumpit-memory-dump-tools.html) nha.
* Chạy quyền **Admin**:
![image](https://hackmd.io/_uploads/Bkboe3EYeg.png)
* Bấm `y` hoi:
![image](https://hackmd.io/_uploads/B1iednVtle.png)
![image](https://hackmd.io/_uploads/r157OnNYlx.png)
### FTK Imager
* Ngoài phân tích `disk image` thì **FTK Imager** cũng có chức năng `dump` **RAM**.
![Screenshot 2025-08-21 221649](https://hackmd.io/_uploads/ryApu3VKgx.png)
* Chọn `path` lưu và tên file `dump`:
![Screenshot 2025-08-21 221756](https://hackmd.io/_uploads/r13QF2Ntge.png)
![image](https://hackmd.io/_uploads/SkjNtn4Fgl.png)
![image](https://hackmd.io/_uploads/H1DHKnNFxe.png)
![image](https://hackmd.io/_uploads/HJwLFn4Kxl.png)
### WinPMEM
* **WinPMEM** là một phần của **Rekall Framework** được thiết kế để `dump` bộ nhớ từ máy **Windows**.
* Có thể tải ở [đây](https://github.com/Velocidex/WinPmem/releases) nhaaa.
![image](https://hackmd.io/_uploads/BJEqch4txg.png)
![image](https://hackmd.io/_uploads/Hk5jc34txg.png)
![image](https://hackmd.io/_uploads/By035hEtle.png)


## Dump RAM với Linux
* So với **Windows**, việc `dump` **RAM** trên **Linux** phức tạp hơn vì sự khác biệt giữa các phiên bản `kernel`.
* Trước đây có thể `dump` **RAM** trực tiếp từ ``/dev/mem`` hoặc ``/proc/kcore``.
* Tuy nhiên, kể từ **Linux Kernel** `2.6` trở lên (đặc biệt từ `2.6.36`), tùy chọn `CONFIG_STRICT_DEVMEM` đã hạn chế truy cập trực tiếp vào bộ nhớ vật lý để ngăn chặn tiến trình độc hại.
* Trên các `kernel` mới (`5.x+`), việc `dump` **RAM** cần sử dụng `module kernel` (`LiME`, `fmem`, `kdump`...) thay vì đọc trực tiếp từ file hệ thống.
### Trên kernel cũ (trước khi hạn chế ``/dev/mem``)
#### /dev/mem
* Cho phép truy cập trực tiếp vào bộ nhớ vật lý. Có thể `dump` bằng:
```py
sudo dd if=/dev/mem of=/path/to/dump.raw bs=1M
```
* **`if` (input file)**: `/dev/mem` – bộ nhớ vật lý.
* **`of` (output file)**: file `dump` cần lưu.
* **`bs` (block size)**: kích thước đọc, ví dụ `1MB`.
#### /proc/kcore
* ``/proc/kcore`` là một file giả lập đại diện cho bộ nhớ `kernel` (tương tự file core `dump`).
```py
sudo cp /proc/kcore /path/to/kcore.dump
```
* Nhược điểm:
	* Chỉ áp dụng cho `kernel` cũ, dễ bị giới hạn quyền truy cập.
	* Trên `kernel` mới, hai cách này thường không khả dụng hoặc `dump` không đầy đủ.
### Trên kernel mới (hiện đại)
* Trên các `kernel` **Linux** mới, `dump` **RAM** cần thông qua `kernel module` có quyền trong `kernel space`.
* Nguyên lý:
	* Nạp module vào hệ thống (yêu cầu `root`).
	* Module có thể đọc toàn bộ bộ nhớ vật lý.
	* Dữ liệu được ghi ra file theo định dạng tùy chọn.
#### LiME (Linux Memory Extractor)
* [LiME Github](https://github.com/504ensicsLabs/LiME)
* Hoạt động bằng cách build module `lime.ko`, rồi nạp module để `dump` **RAM**.
```py
sudo insmod lime.ko "path=/path/to/dump.mem format=raw"
```
* `path`: đường dẫn file `dump`.
* `format`: có thể chọn
	* `raw`: nối tất cả các vùng **RAM** hệ thống.
	* `lime`: thêm `header` chứa thông tin địa chỉ bộ nhớ.
	* `padded`: vùng **RAM** không dùng sẽ được điền 0.
* Lưu ý:
	* Sau khi `make`, file module có thể bị đổi tên (ví dụ `lime-<version>.ko`).
	* Trên bản **Linux** mới (như **Kali**), có thể cần build profile để phân tích bằng **Volatility**.
#### fmem
* Một `kernel` module khác để `dump` **RAM**, tạo ra thiết bị ``/dev/fmem``.
* Nạp module:
```py
sudo insmod fmem.ko
```
* Dump **RAM** bằng `dd`:
```py
sudo dd if=/dev/fmem of=dumpfile.raw bs=1M count=4096
```
* `count` giúp giới hạn dung lượng (`VD: 4096 MB = 4GB`).
* Nhược điểm:
	* Nếu không dùng `count`, `fmem` khiến `dump` file tiếp tục ghi mãi → file có thể > **RAM** thực tế.
	* Do đó luôn cần thêm tham số `count` để tránh `overflow`.

### So sánh nhanh các phương pháp

| Phương pháp   | Kernel hỗ trợ              | Ưu điểm                                     | Nhược điểm                             |
| ------------- | -------------------------- | ------------------------------------------- | -------------------------------------- |
| `/dev/mem`    | **Kernel** cũ (<2.6.36)        | Đơn giản, không cần module                  | Bị hạn chế trên kernel mới             |
| `/proc/kcore` | **Kernel** cũ                  | Dễ copy                                     | Thường không đầy đủ, dễ bị chặn        |
| `LiME`          | **Kernel** mới (4.x, 5.x, 6.x) | Hỗ trợ phân tích forensics, nhiều định dạng | Cần build & nạp module                 |
| `fmem`          | **Kernel** mới                 | Dễ dùng, tạo `/dev/fmem`                    | Có bug dump vô hạn, cần giới hạn count |

# Phân tích bộ nhớ với Volatility
## Volatility là gì?
* **Volatility** là `framework` mã nguồn mở dùng để phân tích bộ nhớ (`memory forensic`). Nó cho phép trích xuất thông tin chi tiết từ file `dump` **RAM**, như:
	* Danh sách tiến trình (`process`, `thread`).
	* **Module kernel**, **driver**.
	* Kết nối mạng.
	* File/**DLL** đang được nạp.
	* **Registry** (`Windows`).
* **Volatility** hỗ trợ cả **Windows**, **Linux**, và **macOS**. Đây là công cụ cực kỳ phổ biến trong **Incident Response** và **Digital Forensics**.
## Tại sao có Volatility 3?
* **Volatility 2** được viết bằng **Python 2** (đã `end-of-life` từ 2020), nên gặp hạn chế:
	* Khó bảo trì và mở rộng.
	* Chậm khi phân tích bộ nhớ lớn.
	* Cần `profile` riêng cho từng hệ điều hành/`kernel`.
* → **Volatility 3** được phát triển để giải quyết các vấn đề đó:
	* Viết bằng **Python 3**, hiện đại, dễ mở rộng.
	* Không cần `profile` thủ công (như **Vol2**).
	* Dùng `symbol table` và tự động phân tích cấu trúc `kernel`.
	* Tối ưu tốc độ, dễ tích hợp **CI/CD** trong các `pipeline` phân tích số lượng lớn.
* Tuy nhiên, số `plugins` của **Vol3** hiện chưa nhiều bằng **Vol2**, nên thực tế người ta thường cài song song cả **Vol2** và **Vol3** để tận dụng ưu điểm của cả hai.
## Cài đặt Volatility 2 và Volatility 3
* Trên **Kali**/**Ubuntu**, có thể cài song song. Có thể tham khảo [How to Install Volatility 2 and Volatility 3 on Debian, Ubuntu, or Kali Linux](https://seanthegeek.net/1172/how-to-install-volatility-2-and-volatility-3-on-debian-ubuntu-or-kali-linux/) nhaaa.
* Cái này cứ cài theo lệnh họ hướng dẫn là được á.
* Như này là được rồi nha:
![image](https://hackmd.io/_uploads/rktNRYSYlx.png)
* Còn với **Volatility 3**:
![image](https://hackmd.io/_uploads/HyMnAFBFll.png)
## Plugins
* Có thể tham khảo [Volatility cheatsheet](https://blog.onfvp.com/post/volatility-cheatsheet/) hoặc [Volatility foundation](https://downloads.volatilityfoundation.org/releases/2.4/CheatSheet_v2.4.pdf) nhaaa.
# Thực hành
* Lý thuyết nhiều thì cũng chán, ~~súc miệng~~ thử vài bài là biết có hiểu không ngay ấy mà :))
* Mọi người có thể tải bài tại https://github.com/stuxnet999/MemLabs
## MemLabs Lab 1 - Beginner's Luck
* **Description**:
![image](https://hackmd.io/_uploads/SJx3GcrYgl.png)
* Đầu tiên, mình thử xác định hệ điều hành & profile.
* Với **Volatility 2**:
```python
python2 vol.py -f MemoryDump_Lab1.raw imageinfo
```
![image](https://hackmd.io/_uploads/SkN3OsSKlx.png)
* Ta xác định được profile là `Win7SP1x64`, tiến hành phân tích tiếp.
* Mình thử liệt kê các tiến trình:
```py
vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 pslist
```
* Tuy nhiên đến đây mình vẫn chưa có hướng đi tiếp, chính xác hơn là mình chưa biết tiến trình nào ~~sú~~, mình có nhớ ra là chưa đọc **Description**.
* Mình thấy có 2 thứ có thể coi là hint. 1 là `black window pop up`, 2 là `When the crash happened, she was trying to draw something`. Vậy mình nghĩ có 2 tiến trình mà khả năng cao cần xem đầu tiên đó là `cmd.exe` và `mspaint.exe`.
* Đối với `cmd.exe`, mình thử xem `console output`:
```py
vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 consoles
```
![image](https://hackmd.io/_uploads/B1nr9oBKll.png)
* Hẹ hẹ, mút luôn cái `flag` đầu tiên.
![image](https://hackmd.io/_uploads/B10_qjHKge.png)
* **Flag 1**: ||`flag{th1s_1s_th3_1st_st4g3!!}`||
* Mình nghĩ sau `console` thì có thể phân tích thêm `cmdline`:
```py
vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 cmdline
```
![image](https://hackmd.io/_uploads/HJIm3jrYll.png)
* Kiên nhẫn ngồi ~~đọc~~ 1 chút thì mình thấy **WinRar** khá sú:
![image](https://hackmd.io/_uploads/HyR_3srYeg.png)
* Sau khi `grep`, mình tìm thấy có 3 entry file **Important.rar**, mình `dump` hết ra luôn:
![image](https://hackmd.io/_uploads/SkNZ6srKll.png)
* Sau khi xem dạng file, mình thấy có 1 file **RAR** và 1 file **Bitmap**:
![image](https://hackmd.io/_uploads/BJMuajrtxl.png)
* File **Bitmap** có lẽ liên quan tới tiến trình `mspaint.exe` nên mình để sau, phân tích file **Rar** trước.
* Tuy nhiên khi mình giải nén thì nó đòi password:
![image](https://hackmd.io/_uploads/rkt1RoSYgl.png)
* Cụ thể là nó yêu cầu pass là **NTLM** hash của **Alissa**. Có thể `dump` hash ra như sau:
```py
vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 hashdump
```
* Có được `F4FF64C8BAAC57D22F22EDC681055BA6` là password cần tìm òi, do nó yêu cầu `uppercase` á.
![image](https://hackmd.io/_uploads/HJAvJhStlx.png)
* Để mở ảnh có thể dùng `xdg-open flag3.png`.
![image](https://hackmd.io/_uploads/HkTq1nBtxg.png)
* Có vẻ giải không đúng thứ tự rồi :))
* **Flag 3**: ||`flag{w3ll_3rd_stage_was_easy}`||
* Còn lại tiến trình `mspaint.exe`, đấm nốt nó nào. Như đã phân tích ở trên, tiến trình **WinRar** và 1 file **Bitmap** khá là sú.
![image](https://hackmd.io/_uploads/HyY4Z3HFxx.png)
* Mình thử mở nó xem thì không thấy gì:
![image](https://hackmd.io/_uploads/SyRsb2rFeg.png)
* Thử grep thì cũng không có gì:
![image](https://hackmd.io/_uploads/S1HNfnBKgg.png)
* Sau 1 hồi mình ~~thúc đít **chatGPT**~~ thì làm như sau, đổi file `2424.dmp`  thành `2424.data` và ném vào **GIMP**.
* Sau 1 hồi ~~rất lâu~~ để chỉnh thì mình thấy như này:
![image](https://hackmd.io/_uploads/rkhlzJLKxe.png)
* Ảnh bị ngược thì phải, và sau 1 hồi mò mò thì mình tìm được flag.
* **Flag 2: flag{G00d_BoY_good_girL}**

## MemLabs Lab 2 - A New World
* **Description**:
![image](https://hackmd.io/_uploads/S1Tim1IKlx.png)
* Đầu tiên vẫn là phải xác định các `profile` và `process` quan trọng:
```py
vol.py -f MemoryDump_Lab2.raw imageinfo
```
![image](https://hackmd.io/_uploads/BkueHJUFxx.png)
* Đọc **Description** thì thấy có vẻ chúng ta nên quan tâm tới những tiến trình dạng như **browser**.
```py
vol.py -f MemoryDump_Lab2.raw --profile=Win7SP1x64 pslist
```
* Mình sẽ thử với `chrome.exe` trước:
![image](https://hackmd.io/_uploads/BkRA8JLFge.png)
* Thử `dump` nó ra và strings nhưng không có gì:
![image](https://hackmd.io/_uploads/B14EwkUYxe.png)
* Hơi bế tắc chút, và ẻm ~~GPT~~ gạ mình thử `dump` history thử.
![image](https://hackmd.io/_uploads/ryiAwkIFxg.png)
* Cái cuối cuối trông sú đét, `dump` thử nó xem có gì không.
![image](https://hackmd.io/_uploads/rJMTOyIKll.png)
* Thấy có file **SQLite3** - **Chrome History** sú sú, mở thử nó xem.
![image](https://hackmd.io/_uploads/HJPf9J8teg.png)
* Trong tables **urls**, mình thấy có link `mega` đáng nghi.
![image](https://hackmd.io/_uploads/SkzL9yUtgl.png)
* Wut thế nào lại tìm được miếng flag thứ 3 ngay đầu tiên :))
* Tải nó về và `unzip`:
![image](https://hackmd.io/_uploads/rJT-i18Fee.png)
* Nó nói pass là sha1 của flag thứ 3 lap 1.
![image](https://hackmd.io/_uploads/SJ4aiyLtle.png)
![image](https://hackmd.io/_uploads/Hks5iJLKll.png)
* **Flag 3**: ||`flag{oK_So_Now_St4g3_3_is_DoNE!!}`||
* Phần còn lại mình lục lọi các thứ nhưng chẳng có gì, vậy chắc là `chrome.exe` không chứa thêm miếng flag nào nữa.
* Ngoài `chrome.exe` thì vẫn còn 1 thằng nữa đáng nghi là `Keepass`, có dạng `.kdbx`.
```py
vol.py -f MemoryDump_Lab2.raw --profile=Win7SP1x64 filescan | grep ".kdbx"
```
![image](https://hackmd.io/_uploads/HkTfayUFle.png)
* Tuy nhiên muốn mở ``.kdbx`` → cần `master password`
* Tiến hành `dump` thử xem:
![image](https://hackmd.io/_uploads/HkJoTy8Fex.png)
![image](https://hackmd.io/_uploads/H1OWkeIFex.png)
* Thực sự mấy bài này mình không có hướng làm lắm, nên nhờ **GPT** nó soi đường cho.
```py
strings 1064.dmp | grep -i password
```
![image](https://hackmd.io/_uploads/SkzlWgUYee.png)
* Wut ảnh mà lại tên là password ư. `Dump` ảnh ra thôi:
![image](https://hackmd.io/_uploads/SJ1yMl8Yll.png)
* Pass là `P4SSw0rd_123`, đây chắc là `master password` cần tìm:
![image](https://hackmd.io/_uploads/HJYizl8tlg.png)
```py
keepassxc file.None.0xfffffa8001593ba0.dat
```
![image](https://hackmd.io/_uploads/ByhbQx8teg.png)
* Mò 1 lúc thì thấy flag trong **Recycle Bin**: 
![image](https://hackmd.io/_uploads/rkPtmgIYex.png)
* **Flag 2**: ||`flag{w0w_th1s_1s_Th3_SeC0nD_ST4g3_!!}`||
* Còn cái flag nữa, mình vọc lại thử cái **Description** thì có 1 chi tiết khá lmao: 
`a very popular "environmental" activist`
* Khả năng cao là liên quan tới biến môi trường:
```py
python2 vol.py -f MemoryDump_Lab2.raw --profile Win7SP1x64 envars
```
* 1 hồi tìm ~~sưng mắt~~ thì mình để ý có cái này:
![image](https://hackmd.io/_uploads/HJ4Y8xLKgx.png)
![image](https://hackmd.io/_uploads/B1HcLeIKlg.png)
* **Flag 1**: ||`flag{w3lc0m3_T0_$T4g3_!_Of_L4B_2}`||

## MemLabs Lab 3 - The Evil's Den
* **Description**:
![image](https://hackmd.io/_uploads/BJyNFeIKxl.png)
* Đầu tiên vẫn là xác định profile:
```py
python2 vol.py -f MemoryDump_Lab3.raw imageinfo
```
![image](https://hackmd.io/_uploads/Hy1L5eUtge.png)
* Xem các tiến trình xem có gì không:
```py
vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 pslist
```
![image](https://hackmd.io/_uploads/S174igLYlx.png)
* Để ý có 2 cái `notepad`:
![image](https://hackmd.io/_uploads/HknLslIYex.png)
```py
vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 cmdline
```
![image](https://hackmd.io/_uploads/SklaCe8Fxe.png)
```py
python2 vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003e727e50 --dump-dir ./dumps
python2 vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000003de1b5f0 --dump-dir ./dumps
```
![image](https://hackmd.io/_uploads/SJUwlbLtgg.png)
![image](https://hackmd.io/_uploads/r1ypl-UFle.png)
* Rất rõ ràng, code này mã hóa với input là chuỗi base64, đem xor với 3 và in kết quả vào `vip.txt`.
![image](https://hackmd.io/_uploads/rJFsb-Itle.png)
* Ngon, được miếng flag đầu tiên là `inctf{0n3_h4lf`.
* Đến với phần 2, thì mình loay hoay khá lâu và thấy ở **Desktop** có gì đó:
```py
vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 filescan | grep "Desktop"
```
![image](https://hackmd.io/_uploads/ryKmfZ8tle.png)
* Cái ảnh `suspision1.jpeg` trông có vẻ lmao đấy, `dump` thôi còn chần chờ gì nữa. ~~(Thực ra do tên nó sú thế kia cơ mà :))~~
```py
python2 vol.py -f MemoryDump_Lab3.raw --profile=Win7SP1x86_23418 dumpfiles -Q 0x0000000004f34148 --dump-dir ./dumps
```
![image](https://hackmd.io/_uploads/r1LmmbIYll.png)
* Tiếp theo thì extract nó ra xem. Nó đòi passphrase thì mình đọc lại **Description** thấy nói phải có `flag1` mới giải được tiếp, vậy `flag1` chính là passphrase.
![image](https://hackmd.io/_uploads/Hyt6mW8Fgl.png)
* Ngon luôn, vậy đủ 2 miếng flag òi.
* **Flag: ||`inctf{0n3_h4lf_1s_n0t_3n0ugh}`||**

## MemLabs Lab 4 - Obsession
* **Description**:
![image](https://hackmd.io/_uploads/rJuoEbLKgg.png)
* Cũng đã quen tay với 3 bài trước, mình lại đi xác định profile và process như thói quen.
```py
vol.py -f MemoryDump_Lab4.raw imageinfo
```
![image](https://hackmd.io/_uploads/HyujSZLYxx.png)
```py
vol.py -f MemoryDump_Lab4.raw --profile=Win7SP1x64 pslist
```
![image](https://hackmd.io/_uploads/HJCnr-LYxx.png)
* Tuy nhiên chả có cái gì đáng nghi cả. 
* Sau 1 thời gian chơi forensic nhất định, mình cảm thấy **Description** có thể là hint rất quan trọng, nhưng mình thường bỏ qua nó cho đến khi bế tắc :))
* Gợi ý có nói liên quan tới những file bị xóa, và ~~**GPT**~~ cũng khuyến khích mình dùng **MFT**. 
```py
vol.py -f MemoryDump_Lab4.raw --profile=Win7SP1x64 mftparser > mft
```
![image](https://hackmd.io/_uploads/r1eAhPWUFxg.png)
* Tuy nhiên nó ra 1 mớ bùi nhùi như này, mình lướt thấy có rất nhiều luôn.
* Mình có thử grep mấy file mà các bài trước hay dùng, thì `important` được :))))
```py
grep -i "Important.rar" mft
```
![image](https://hackmd.io/_uploads/Sk-EdbLFle.png)
* Dump file đó ra thì mình được flag.
```py
python2 vol.py -f MemoryDump_Lab4.raw --profile=Win7SP1x86_23418 mftparser | grep -i  important -A 30
```
![image](https://hackmd.io/_uploads/SkxEK-8tel.png)
* **Flag**: ||`inctf{1_is_n0t_EQu4l_7o_2_bUt_th1s_d0s3nt_m4ke_s3ns3}`||

## MemLabs Lab 5 - Black Tuesday
* **Description**:
![image](https://hackmd.io/_uploads/HJMlq-8tex.png)
* Vẫn là check profile với process trước:
```py
vol.py -f MemoryDump_Lab5.raw imageinfo 
```
![image](https://hackmd.io/_uploads/BkdN9-UYee.png)
```py
vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 pslist
```
![image](https://hackmd.io/_uploads/SkoI5b8teg.png)
* Trông 2 cái này sú đét:
![Screenshot 2025-08-22 221748](https://hackmd.io/_uploads/BkCcq-8Klg.png)
```py
vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 cmdline
```
* Lmao, `notepad` này ở trong **Videos** :))
![Screenshot 2025-08-22 222218](https://hackmd.io/_uploads/B1GoobUKge.png)
* **WinRar** còn có 1 file sú, mình sẽ `dump` hết nó ra.
```py
vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 filescan | grep "NOTEPAD.EXE"     
vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 filescan | grep "SW1wb3J0YW50"           
```
![image](https://hackmd.io/_uploads/ryUenWIFex.png)
![image](https://hackmd.io/_uploads/rJiH2-LYel.png)
* Mình tính giải nén thì nó yêu cầu pass:
![image](https://hackmd.io/_uploads/rkLK2bIYgl.png)
* Mình thử tất cả các plugins và dừng lại ở `screenshot`:
```py
vol.py -f MemoryDump_Lab5.raw --profile=Win7SP1x64 screenshot -D ./dumps
```
![image](https://hackmd.io/_uploads/SkylTZLYgg.png)
* Trong các ảnh, thì mình thấy `session_1.WinSta0.Default.png` nó không hoàn toàn màu trắng:
![image](https://hackmd.io/_uploads/rJG4T-LYll.png)
![image](https://hackmd.io/_uploads/ryZu6ZIFxe.png)
![image](https://hackmd.io/_uploads/rJstTbLtee.png)
* Hẹ hẹ, có ngay cái flag.
* **Flag 1**: ||`flag{!!_w3LL_d0n3_St4g3-1_0f_L4B_5_D0n3_!!}`||
* **Flag 1** chính là pass để unzip cái file **WinRar** kia.
![image](https://hackmd.io/_uploads/BkkbCWUKel.png)
* Hẹ hẹ, được thêm cái flag thứ 2.
* **Flag 2**: ||`flag{W1th_th1s_$taGe_2_1s_c0mPL3T3_!!}`||
* Tới đây mình thấy bịp bịp, tại **Description** nói có 3 flag cơ, sao đây mới stage 2 mà final flag rồi. 🤷‍♂️
* Quên mất là còn `NOTEPAD.EXE` chưa sờ tới nó, mình thử `dump` xem có gì không.

![image](https://hackmd.io/_uploads/r1Ch1G8Fge.png)
![Screenshot 2025-08-22 224155](https://hackmd.io/_uploads/H1AXxz8Fee.png)
* Wut, sao lại file **PE** nhỉ, à nó là **NOTEPAD.EXE** mà :))
![image](https://hackmd.io/_uploads/H18_WMLtll.png)
* Ném vào **IDA** thử xem.
![image](https://hackmd.io/_uploads/Byj2bf8Ylg.png)
* Ngon mở ra có flag lun.
* **Flag 3**: ||`bi0s{M3m_l4B5_OVeR_!}`||
## MemLabs Lab 6 - The Reckoning
* **Description**:
![image](https://hackmd.io/_uploads/rkoXGGIKeg.png)
* Vẫn là các thao tác quen thuộc, check profile và process:
```py
vol.py -f MemoryDump_Lab6.raw imageinfo
```
![image](https://hackmd.io/_uploads/S17umfUYlg.png)
```py
vol.py -f MemoryDump_Lab6.raw --profile=Win7SP1x64 pslist
```
* **Description** gợi ý: `David communicated with his workers via the internet` khả năng là sú các browser, và có lẽ cả history nữa.
![image](https://hackmd.io/_uploads/SJE_VMLYee.png)
* Kiểm tra với `sqlite3`:
```py
sqlite3 file.None.0xfffffa800369c2f0.dat
```
* Sau 1 hồi ~~rất rất lâu~~ mò, thì mình thấy file [pastebin](https://pastebin.com/RSGSi1hk):
![image](https://hackmd.io/_uploads/H1nPLGUYex.png)
![image](https://hackmd.io/_uploads/rykcUzLKee.png)
* Nó redirect mình sang 1 file `.doc`, đọc 1 hồi thì thấy có 1 file [mega](https://mega.nz/#!SrxQxYTQ):
![image](https://hackmd.io/_uploads/H1IRIG8teg.png)
* Âu dia :))
![image](https://hackmd.io/_uploads/Bynxvf8Kxl.png)
* Wut, biết kiếm đâu key giờ.
* Ơ string grep có này :))
![image](https://hackmd.io/_uploads/By-OvzUtxg.png)
* Giải nén và tải về thì được 1 file ảnh, nhưng lại không mở được.
* Ném vô **HxD** thì mình thấy chunk đầu tiên sai, cụ thể là `i` thay vì `I`:
![image](https://hackmd.io/_uploads/Bk73OGItgx.png)
* Vậy sửa lại cho đúng:
![image](https://hackmd.io/_uploads/H1OeYMIKxg.png)
* Ý ngon đét :))
![image](https://hackmd.io/_uploads/SJj-YfLKlg.png)
* Đến đây thì mình lại mò tiếp, sau 1 hồi thì mình thấy lại là **WinRar**:
```py
python2 vol.py -f MemoryDump_Lab6.raw --profile=Win7SP1x64 cmdline 
```
![image](https://hackmd.io/_uploads/SkHvtz8Fge.png)
* Sú này, `dump` nó ra hoi.
![image](https://hackmd.io/_uploads/SkBCtzLYxx.png)
* Lại cần password nựa :v 
* 1 lần nữa strings grep được :))
![image](https://hackmd.io/_uploads/rkFX9MUYxl.png)
* Ấu dìa, có miếng flag còn lại òi.
![image](https://hackmd.io/_uploads/rkML9f8Fll.png)
* **Flag**: ||`inctf{thi5_cH4LL3Ng3!s_g0nn4_b3_?aN_Am4zINg!_i_gU3Ss???}`||
# Refs
https://hackmd.io/@phgvee/rywrwpwq6


