---
# System prepended metadata

title: '[Write-up] Root-Me Forensics - Part 2'

---

# [Write-up] Root-Me Forensics - Part 2

## Find me

![image](https://hackmd.io/_uploads/rkALv8CVee.png)

Dùng ```volatility``` để phân tích bộ nhớ ram 
```
 volatility -f dump imageinfo
Volatility Foundation Volatility Framework 2.6.1
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x86_23418, Win7SP0x86, Win7SP1x86_24000, Win7SP1x86
                     AS Layer1 : IA32PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/home/minhtuan/Documents/Cyber_Security/CTFs/RootMe/ch188/dump)
                      PAE type : No PAE
                           DTB : 0x185000L
                          KDBG : 0x8294bbe8L
          Number of Processors : 1
     Image Type (Service Pack) : 0
                KPCR for CPU 0 : 0x8294cc00L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2016-09-15 10:12:31 UTC+0000
     Image local date and time : 2016-09-15 12:12:31 +0200

```

plugin ```pstree``` để xem các tiến trình theo quan hệ cha-con

```
 0x84e27030:TrueCrypt.exe                           3224   1956     14    326 2016-09-15 10:11:20 UTC+0000
. 0x85a57d40:firefox.exe                             2720   1956     49    756 2016-09-15 10:11:15 UTC+0000
. 0x85a39ab8:mspaint.exe                             2644   1956      7    147 2016-09-15 10:11:13 UTC+0000
. 0x858cbd40:VBoxTray.exe                            1124   1956     14    167 2016-09-15 10:10:53 UTC+0000
 0x8579a030:notepad.exe                              3716   3684      2     59 2016-09-15 10:11:59 UTC+0000

```
Ta thấy có tiến trình ```TrueCrypt.exe``` là một phần mềm mã nguồn mở dùng để tạo ổ đĩa ảo được mã hóa hoặc mã hóa toàn bộ phân vùng/ổ đĩa thật

Giờ thì cần tìm file bị mã hóa ổ địa và mật khẩu TrueCrypt, ta sẽ dùng plugin ```cmdline```

```
notepad.exe pid:   3716
Command line : "C:\Windows\system32\NOTEPAD.EXE" C:\Users\info\Desktop\findme
```
Oke đã tìm thấy file tên là ```findme```, kéo nó về

```
volatility -f dump --profile=Win7SP1x86_23418 filescan | grep "findme"
Volatility Foundation Volatility Framework 2.6.1
0x000000001ee20110      3      0 R--rwd \Device\HarddiskVolume2\Users\info\Desktop\findme
```

```
 volatility -f dump --profile=Win7SP1x86_23418 dumpfiles -Q 0x000000001ee20110 -D .

Volatility Foundation Volatility Framework 2.6.1
DataSectionObject 0x1ee20110   None   \Device\HarddiskVolume2\Users\info\Desktop\findme
```

Dùng plugin ```truecryptsummary``` để tìm mật khẩu của TrueCrypt

```
volatility -f dump --profile=Win7SP1x86_23418 truecryptsummary
Volatility Foundation Volatility Framework 2.6.1
Registry Version     TrueCrypt Version 7.0a
Password             R3sqdl3Fuuz2ZdbdYsf56opFFLe9sAsx at offset 0x87433e44
Process              TrueCrypt.exe at 0x84e27030 pid 3224
Service              truecrypt state SERVICE_RUNNING
Kernel Module        truecrypt.sys at 0x87400000 - 0x87437000
Symbolic Link        Volume{a4cc2add-7b2c-11e6-b853-0800271fb50b} -> \Device\TrueCryptVolumeF mounted 2016-09-15 10:11:42 UTC+0000
Driver               \Driver\truecrypt at 0x1ee1d700 range 0x87400000 - 0x87436980
Device               TrueCrypt at 0x84e1dc90 type FILE_DEVICE_UNKNOWN
```

Đã có password giờ thì mount ổ đĩa bình thường

![image](https://hackmd.io/_uploads/HygWYvC4xe.png)

Mở ảnh flag.png nhưng không có flag bên trong :))), readme.txt cũng vậy, nhưng file readme.odt có một bài hướng dẫn sử dụng ```keepass```, Nhưng mà file database của keepass ở đâu ????

Sau 1 lúc thì mình steganography trên file ```readme.odt```
Dùng ```binwalk``` sẽ thấy một tệp ```zip``` bị ẩn bên trong, giải nén và tìm được file database của keepass trong thư mục data

```
file data/my_safety_box
data/my_safety_box: Keepass password database 2.x KDBX

```

Nhưng mà không có mật khẩu để vào :)), quay lại file ```dump``` dùng ```hashdump``` để trích xuất hash mật khẩu sau đó dùng ```john``` để bẻ khóa (Mật khẩu là ở người dùng ```infor```)

```
volatility -f dump --profile=Win7SP1x86_23418 hashdump
Volatility Foundation Volatility Framework 2.6.1
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HomeGroupUser$:1001:aad3b435b51404eeaad3b435b51404ee:57e82f46aff390080f143c09ab2c5b68:::
info:1002:aad3b435b51404eeaad3b435b51404ee:dc3817f29d2199446639538113064277:::
```

```
john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Using default input encoding: UTF-8
Loaded 3 password hashes with no different salts (NT [MD4 256/256 AVX2 8x3])
Remaining 2 password hashes with no different salts
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
#1Godfather      (info)
1g 0:00:00:00 DONE (2025-06-29 13:14) 1.724g/s 24730Kp/s 24730Kc/s 49444KC/s  _ 09..*7¡Vamos!
Warning: passwords printed above might not be all those cracked
Use the "--show --format=NT" options to display all of the cracked passwords reliably
Session completed.
```
Đã có file database và password giờ thì vào keepass xem có flag khong :)))

```
keepassxc my_safety_box
```
![image](https://hackmd.io/_uploads/BkC33v0Elg.png)

Và tất nhiên là không dễ dàng đến thế :))) một đống file, không thể xem từng cái được nên mình sẽ export về dạng CSV

![image](https://hackmd.io/_uploads/SJUxRwANlg.png)

Mở ta sẽ thấy 1 đoạn được mã hóa bằng base64 khá dài, giải mã tầm 10 lần liên tục ta sẽ nhận được flag hehe ;))

## Find me again

![image](https://hackmd.io/_uploads/S1utku04el.png)

Giải nén ra ta được 2 file 

```
tar -xvf ch19.txz
backup/
backup/forensic.img
backup/memory.raw
```

Sử dụng ```fls``` để xem toàn bộ file ở phân vùng ```forensic.img```  nhưng đã bị mã hóa ```LUKS``` muốn giải mã thì cần mật khẩu hoăc key

```
fls forensic.img
Encryption detected (LUKS)
```
Ta quay lại phân tích file ```memory.raw```, sử dụng ```volatility``` nhưng không tìm được ```imageinfo```, sau một lúc thì biết được ```memory.raw``` không có sẵn và cũng không phải của window mà là của Linux

```
strings memory.raw | grep "Linux version"

Linux version 4.4.0-72-lowlatency (buildd@lcy01-17) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #93-Ubuntu SMP PREEMPT Fri Mar 31 15:25:21 UTC 2017 (Ubuntu 4.4.0-72.93-lowlatency 4.4.49)
Linux version 4.4.0-72-lowlatency (buildd@lcy01-17) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #93-Ubuntu SMP PREEMPT Fri Mar 31 15:25:21 UTC 2017 (Ubuntu 4.4.0-72.93-lowlatency 4.4.49)
 o  The intent is to make the tool independent of Linux version dependencies,

```
Phải tiến hành cài ```profile``` khá lằng nhằng chúng ta để sau

1. ***Mở file LUKS***

Để tìm được key thì có 1 tool đơn giản khá hiệu quả là ```aeskeyfind```

```
aeskeyfind memory.raw
8d3f527de514872f595908958dbc0ed1
Keyfind progress: 100%
```

Giờ đã có key dùng ```cryptsetup``` để mount phân vùng

```
echo "8d3f527de514872f595908958dbc0ed1" | xxd -r -p > lukskey.bin
```
```!
sudo cryptsetup luksOpen forensic.img luks_forensic --master-key-file lukskey.bin
```
```
sudo mkdir /mnt/forensic
```
```
sudo mount /dev/mapper/luks_forensic /mnt/forensic
```

```
ls /mnt/forensic
dir2  lost+found
```

Chúng ta có mount phân vùng ra và được thư mục ```dir2``` có 3 file

```
ls
end.png  findme.txt.gpg  readme.txt
```
file ```findme.txt.gpg``` bị mã hóa gpg 

2. ***Tệp end.png***

Thấy ảnh png có vẻ nghi ngờ nên mình dùng ```binwalk``` trích xuất ra 1 tệp zip chứa file ```end.zip.gpg```

```
binwalk end.png


DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 850 x 300, 8-bit/color RGB, non-interlaced
320           0x140           Zlib compressed data, best compression
917           0x395           Zlib compressed data, best compression
493886        0x7893E         Zip archive data, at least v2.0 to extract, compressed size: 61917, uncompressed size: 61907, name: end.zip.gpg
555953        0x87BB1         End of Zip archive, footer length: 22
```

Vậy là có 2 file ```findme.txt.gpg``` và ```end.zip.gpg``` đều bị mã hóa gpg

3. ***Profile Volatility***

Cài đặt profile ```LinuxUbuntu16044x64```


4. ***Các tập tin gpg***

Dùng plugin ```linux_bash``` để xem các lệnh bash được dùng

```
volatility -f memory.raw --profile=LinuxUbuntu16044x64 linux_bash

Volatility Foundation Volatility Framework 2.6.1
Pid      Name                 Command Time                   Command
-------- -------------------- ------------------------------ -------
    1229 bash                 2017-04-14 07:58:36 UTC+0000   history
    1229 bash                 2017-04-14 07:58:36 UTC+0000   apt-get install linux-image-4.4.0-72-lowlatency linux-headers-lowlatency
    1229 bash                 2017-04-14 07:58:36 UTC+0000   reboot
    1229 bash                 2017-04-14 07:58:36 UTC+0000   apt-get insta
    1229 bash                 2017-04-14 07:59:07 UTC+0000   history
    1229 bash                 2017-05-05 12:04:44 UTC+0000   apt-get install lynx gnupg
    1229 bash                 2017-05-05 12:06:54 UTC+0000   nano /etc/fstab
    1229 bash                 2017-05-05 12:06:58 UTC+0000   nano /etc/crypttab
    1229 bash                 2017-05-05 12:07:08 UTC+0000   cd /mnt/
    1229 bash                 2017-05-05 12:07:29 UTC+0000   cp -R /media/sf_DUMP/dir* .
    1229 bash                 2017-05-05 12:07:38 UTC+0000   ping 8.8.8.8
    1229 bash                 2017-05-05 12:09:14 UTC+0000   gpg --quick-gen-key 'Troll <abuse@root-me.org>' rsa4096 cert 1y
    1229 bash                 2017-05-05 12:09:49 UTC+0000   lynx -accept_all_cookies "https://www.google.com/?=password+porno+collection"
    1229 bash                 2017-05-05 12:10:27 UTC+0000   gpg --yes --batch --passphrase=1m_4n_4dul7_n0w -c findme.txt
    1229 bash                 2017-05-05 12:10:37 UTC+0000   lynx -accept_all_cookies "https://www.google.com/?=password+troll+memes"
    1229 bash                 2017-05-05 12:11:04 UTC+0000   gpg --yes --batch --passphrase=Troll_Tr0ll_TrOll -c end.zip
    1229 bash                 2017-05-05 12:11:20 UTC+0000   nano dir1/dic_fr_l33t.txt
    1229 bash                 2017-05-05 12:11:28 UTC+0000   rm findme.txt
    1229 bash                 2017-05-05 12:11:35 UTC+0000   rm -rf dir1/
    1229 bash                 2017-05-05 12:11:55 UTC+0000   dd if=/dev/sdb of=/media/sf_DUMP/forensic.img bs=2048
```
Ta thấy có các câu lệnh mã hóa 2 file ```findme.txt.gpg``` và ```end.zip.gpg``` có mật khẩu kèm theo, giờ thì giải mã khá đơn giản

```
gpg --batch --yes --passphrase 1m_4n_4dul7_n0w -d findme.txt.gpg > findme.txt

gpg: AES.CFB encrypted data
gpg: encrypted with 1 passphrase
```
file ```fixme.txt``` chứa 

```
cat findme.txt
The flag is not here of course !!!
You must find it :-)
Troll one day troll always ........
```

```
gpg --batch --yes --passphrase Troll_Tr0ll_TrOll -d end.zip.gpg > end.zip

gpg: CAST5.CFB encrypted data
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
```

Giải nén tệp ```end.zip``` nhưng nó yêu cầu mật khẩu :)))



5. ***Mật khẩu end.zip***

Xem lại lịch sử bash, chúng ta thấy rằng ```dir1/dic_fr_l33t.txt``` đã được chỉnh sửa rồi xóa.
Hãy thử khôi phục tệp này

```
sudo extundelete /dev/mapper/luks_forensic --restore-directory dir1

NOTICE: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
The partition should be unmounted to undelete any files without further data loss.
If the partition is not currently mounted, this message indicates
it was improperly unmounted, and you should run fsck before continuing.
If you decide to continue, extundelete may overwrite some of the deleted
files and make recovering those files impossible.  You should unmount the
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n)
y
Loading filesystem metadata ... 3 groups loaded.
Loading journal descriptors ... 31 descriptors loaded.
Searching for recoverable inodes in directory dir1 ...
2 recoverable inodes found.
Looking through the directory structure for deleted files ...
1 recoverable inodes still lost.
```
Giờ dùng ```john``` với wordlists là tệp vừa khôi phục ta sẽ bẻ khóa được mật khẩu

```
john hash.txt --wordlist=../RECOVERED_FILES/dir1/dic_fr_l33t.txt
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Cyb3rs3curit3    (end.zip/flag.gif)
1g 0:00:00:00 DONE (2025-06-29 15:19) 33.33g/s 1911Kp/s 1911Kc/s 1911KC/s Cont3ntions..D3activons
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
```

Giải nén được 1 tệp ```flag.gif```
```
unzip end.zip
Archive:  end.zip
[end.zip] flag.gif password:
  inflating: flag.gif
```
```flag.gif``` được thay đổi liên tục theo từng frame có thể viết mã ```python``` nhưng đơn giản hơn là dùng ```zbarimg```

```
zbarimg -q --raw flag.gif | tr -d '\n'
....
The_flag_is:1_Lik3_F0r3nS1c_4nd_y0u?
```