---
# System prepended metadata

title: 'UTCTF 2025 [FORENSICS]'

---

# UTCTF 2025 [FORENSICS]
![image](https://hackmd.io/_uploads/S1VgnxN3yg.png)

---
## 1. Streamified
![image](https://hackmd.io/_uploads/BJyzhxVn1l.png)
Bài cho:  
> 1111111000011110101111111100000100110101100100000110111010110110111010111011011101010101001101011101101110101001010010101110110000010100101111010000011111111010101010101111111000000001011110100000000010111110001110110011111000111010101100000010100000100011110111100101110111100000100001010100010000011000001000000001011011111100010001010111011100011010100010101001111100110111011100001001100110000011100001100110101011111111100000000110000001000110101111111001111001101010011100000101101001010001000010111010111100011111111011011101011001110011010011101110101010011110010010110000010011011001011100011111111010101010000010111

Tuy nhiên thì không phải là binary decode thông thường, mình bảo AI nó gen code qr thì được:  
```python=
import numpy as np
import matplotlib.pyplot as plt

# Binary string
binary_str = "1111111000011110101111111100000100110101100100000110111010110110111010111011011101010101001101011101101110101001010010101110110000010100101111010000011111111010101010101111111000000001011110100000000010111110001110110011111000111010101100000010100000100011110111100101110111100000100001010100010000011000001000000001011011111100010001010111011100011010100010101001111100110111011100001001100110000011100001100110101011111111100000000110000001000110101111111001111001101010011100000101101001010001000010111010111100011111111011011101011001110011010011101110101010011110010010110000010011011001011100011111111010101010000010111"

# Function to reshape and visualize
def reshape_and_visualize(binary_str, width, height):
    if width * height > len(binary_str):
        # Pad with zeros
        binary_str = binary_str.ljust(width * height, '0')
    elif width * height < len(binary_str):
        # Truncate
        binary_str = binary_str[:width * height]
    
    # Reshape
    matrix = np.zeros((height, width), dtype=int)
    for i in range(height):
        for j in range(width):
            index = i * width + j
            if index < len(binary_str):
                matrix[i, j] = int(binary_str[index])
    
    # Visualize
    plt.figure(figsize=(8, 8))
    plt.imshow(matrix, cmap='binary')
    plt.title(f'Binary data as {width}x{height} grid')
    plt.axis('off')
    plt.tight_layout()
    plt.show()
    
    return matrix

# Try different dimensions
print("Trying different dimensions for visualization")
dimensions = [(20, 31), (31, 20), (24, 26), (26, 24), (25, 25), (20, 31)]

for width, height in dimensions:
    print(f"Creating {width}x{height} visualization")
    reshape_and_visualize(binary_str, width, height)
```
![Figure_1](https://hackmd.io/_uploads/BkDK3lNhJl.png)
> Flag: utflag{b!t_by_b!t}

---
## 2. Forgotten Footprints
![image](https://hackmd.io/_uploads/SJFp2xEnyl.png)
Bài cho mình file img, tuy nhiên thì strings grep là ra flag:  
```bash=
7574666c61677b64336c337433645f6275375f6e30745f67306e335f34657665727d35ca565d03455294d2c26a3a7aec32ce04b3c9f515519d6c8a6f4ecb306680296b3c7bd67562d88d5aa8996e9c119a6b022a4e11b15f14d7c5ffd7fb3ae46a9dbe0b85eced831c992cb2ceda4e05d92e11777104d96c0d50693db03a0aa3841553dcf2b7f5298f0e376546ca78e4d88c2c6402b7dbbcbb7bb8950e425092d3954684bdf38c7969103b39e2272067e57f5f2372e5799418f4d330433ca02ca566581f288ced8bc1a25df3d7d5d14b845adc9ff40fd249f5c7c74ee640568299874df4f82e0503dfc702d0ffe3a89ddb80880fb054cb34c7f974f338e7735bba3febc55cdbe4bb93aac71076d7e32964c644293bd381ce45ad7002d0f3f17e5c1c77b37fbf9767d76101c6db24635ec0efa890ebb997f111d6bcc751ffaced1ef0140ef2c7847ac2bd8e13f10f6fe9e44b24fb40bcc2cd210e48204ed875490bf6d4b66ae48be19a33d3895d157df2c2c77ce2d76f85c17f26a19cb9e2d467ec686e2b67fda6b7bc435c52c40f954c65d813ac259e0ee0a2e057d93d04eeb44b25b0b153043a22ed1eeaa8f63f0919a7d72b98c68b3816bd3553c387471a850070094d4e3319a9e2afffe437e310c0c26514eb6b20ef8551cd318642f72225fa60c3a3220544798b191ce07f303da973bd0d05c8a68c8a2b43b7fb241135f900e5c86f0fba01ee4750b9107b22c11deff1046e6fa90008706a5fa82f57d35aca2b10934120e2a5982587504800c39ec62463f60195f178fb9df7578c630be846f7bff460a77a90da25c4ce632285fc9550eaeb2d06de4c8375f88d1a51e3f6bd2cb287c75a66a8adffa732e63250fd0db5d1205aa3f2825ee09ff63bbb2395a9d506f7e52bbc21d3803aed6675fc1902774952a73d19347208496d4976aa7b9d426995e6ca97b19022a11f5a53f91712f9422dbac51fdd6588176902047a9ec0c3f7ef4568daf248e72536fe8eaada4a21983dfa096e26c4bbee4725cc38b1f096935d3e024802eb1d8e024bcb31e60d27c873424cffc1c083b8b442778285ebb171e58ac397fe0e3c3ed8cbf41b19e6cb9e13e18ef1f5801a94db48b9c342c5d33b378b4902b1c6840034cec60bcaa0f49395dff18d91009658bdc56f70ecefea6f674e5179268d1efb03634adcdb70aeed3fc0146f638d75d7cc74d78af62d0e28db63581873d10eddee545f9355f6115cbe766afdf10f0a5b52acbb119ffdab1fef940caf2b1de4dabb628651c074112598cd9a4213479687767ef04c01986cb709ced8423f625ad21be672551cdcc89ce72a1cd88d522e6f301d1601fd185542ed658c4f5334602a4ecc4f7a2c0aa67ad786a1532881c0438223d96cec46f0af355418b3cde59bf754afb59e5e5715beeb2bef83e9e70d963206f303f6ad34c5d0a5bd28b03170c983a15a68a812e9418b46a9e920af6228fd9ad73a95197f06d430e9fcde10d2f11c52be2714ae615852efe216c3a82a4e0f8baa3d5ebb2e50477195d29086c8f5b75d690fd7d422a2d4a03427fb18c147ecc75ca5517621789ef79c10a95803cd3c55f4b810bf879e3853b1860a68fc73184c4759a36a1ac6ee1a913a374f40aba1cb998a5b2390c430b3c7508c4382bf7e64ffa8def33ae7c770f9960f6fb0c480a9b8a9038b6bf520a1ea76f7299b6f989a674befd1610de5480c866b1d33b145b4da0ae709236ee56162a2b57b2b8585e06a49942dfa8a37d3864600637cd8700abc6d3d21a6775e9c86d5d119346dbea10832cced15ca58011c65f537ea1e30ea48c14e6b8abe5539060d6e9da766ea982fe40410fc53283db7603f6b31b341c72ce9c48030252ec2025e54f89065fe20108e5b23b6d61c6997fd591b61801cc82452b4c2ff1600d49e03a1dbd71e4d7b7112cd6877d5f036d1cede05455a0af055e64f9af0deaa95bfe7dfbb6b7ba2eac4990ac03b3561dcc93d88c5d4cca3422fbc55a651a85cfdfeb315a5661dba79a9196edd598d8a097f4c75118efe9b9ea8fc0ea76e65e6118a77b62fcc2e873e51950cfdd9caf7971b2e369b2c28b7ef55de6b46f89e3150368883f9611b796a8a16a814705edf044ab99f27e2863225c9af10370dd8864e3b3b162084f43e90845cebba95af2240551e3d7594fecfba92fbc334d3e06fbe43b2f2e69b9a9ffd66b327b01b8d2a6aecb6a3acaeca918985b1df5af841054094fd92e94f4128a4ee34b7e3491df402ca9760d467e727ca5fb5e5dcfdd0f3d10dff7126a9b314e03032a1e841ee8fece586b29cea92ea7f9f559b2a4ea18ace3d4402a2975e495c58bb0d9b4a41c8829fe74c7d0fddc2cbc310a2c2509576efaa33ed7d3dcfc24f7c9e095bf14ca16f07999536757cf1cc9249e21cdae3bc67eceda5fb8499abdb1f4129d8d4876f28734df026767914b582d968235c1d87352484310b6f79531660fefb56744a66a6a3139b46e6b5af52063f99f2319e561fedd021d26efa38f2021760a97ff4a044a7f9fd0a7e7408f99000e3e61702fc84b480a5856009cb5ac551c8fd43b0bb0eb4af4962af15de646bf6a45f19b39048696a058cf45dcfcf541de7e2877a9ab02f02b674a34b49ffd31d3727bb78b9f64efe613ecbe824123c2e8d6bc1c50c2380b975bc45478c79d66e3e56193f19000d7b3a4bf9226b8bd7f251cc9a4aabd5346284e7b9e665a8bb9adbde15b55f8ec363d1eb4d3d9494b947c09197045bf9261335dee4cd00ba25990175d251ac02681a56d974f94981ab2a91ec4375019f565cf8878a64e546d663fe3633f4e23d6d31c14891bb9a072eae469d245ec8242ffe79215979d85dcf10acc4245e117df20bf0478583d57139ba2287426717cfc6903cd6f7d63f97577c8c411a22ec6464c6a0131b2c421237522d0f44f6e029ddbf8a1a985bbbcbc9defa85e4c2189206e6e2baca3feb77a8eb7394cef4e2999b4a1321e00f580840188b6924af2e51ca0d6088b6961fcb824f064c5baccb1ddf0730f45815dad510ae40a9be7e24ab64231b9781a42c6078cfe987c1d9dbdfdb3aa2e43126df7adbc8bcf37e80b84d1984e3ea339022c7b0946854e6ceed776fbed12bb292c729e62bbacc063a91727a13fb018b177a67985c2462349472f56540bb202f9985ebdd7f6f484060823b061107cfcc2a2d62bf08e77b96e95428ad5e8aab67bc2393e6ad6ef18d6b48e9fd5622cbb42e9ea128e4151f13c2acce7c27a7f4601a18668efa5c77edda41fc0a2b0ff2a9c3f90f34baafb5bdbdadae443b6f0e1fe0d39b24a648143eaf37bb4ebda98fedafa116875c8ea40746a86a935919dcccdaa3ebd20c48651c56ae57a31e69007b1d2e76ca3758db44e5e09de344d9e13e3b1018b479c09947235a9c3682c09fa88337917aaf115181ae6fc245bc4a976337c9a886e5d98b2c7fc0b78e7a7993301bb288e5aa1ffca1cb7f03a7eb89551b0df1596f17be6b135f7a2837c67e2c2a5432a12e1c0ab96291529f8568f89d2916bfc32a6272c08a723a4a7dddc26faec3dd4205a79088a01af81ebff71d3f354d68e340799d793f8d737b1a913662316b73307c176a256357d62d313c64dfa84af6218c342d1d84c78d7df9755d6dc24e4cc04ea824e6b3e7b2658d72c92cd212dd116ef4c0dea2eaf8dc3ade95d4d256a2bcbd428f58a544a1aa5e78195ca60a8f5649afcc0da53c896b504f6d0a68dd9c32df22811dee5109dcff95f2...
```
![image](https://hackmd.io/_uploads/rJabTeNnJe.png)

> Flag: utflag{d3l3t3d_bu7_n0t_g0n3_4ever}

---
## 3. Finally, an un-strings-able problem
![image](https://hackmd.io/_uploads/ByODaxV2Jx.png)
Vẫn tiếp tục là 1 file img chứa thư mục lost+found, tuy nhiên mình làm đủ mọi cách thế nhưng vẫn không decode được nội dung như các loại mã hóa base64..., sau khi đổi hướng thì mình để ý đến phần phân quyền của file:  
![Screenshot 2024-11-05 131920](https://hackmd.io/_uploads/H1fApx43kx.png)
```bash=
──(kali㉿kali)-[~/Downloads]
└─$ file disk.img

disk.img: Linux rev 1.0 ext4 filesystem data, UUID=981eb2d5-0400-4c7d-986e-e9c3860666d3 (extents) (64bit) (large files) (huge files)
                                                                                                                                        
┌──(kali㉿kali)-[~/Downloads]
└─$ mkdir mount_point
sudo mount -o loop disk.img mount_point

[sudo] password for kali: 
                                                                                                                                        
┌──(kali㉿kali)-[~/Downloads]
└─$ ls -lah mount_point

total 152K
drwxr-xr-x  3 root root 4.0K Mar 12 09:08 .
drwxr-xr-x 16 kali kali 4.0K Mar 15 15:40 ..
--wx---rw-  1 root root 1.1K Mar 12 08:26 1Pe4S76zWpxA8mgI.txt
-rwxr--rwx  1 root root 1.1K Mar 12 08:51 3zkhN7A0Vqe0HgNC.txt
-rw---x-wx  1 root root 1.1K Mar 12 08:49 5UhgLeVLJWuEnc4W.txt
-rw---xr--  1 root root 1.1K Mar 12 08:36 6ReSGoJsRnFqhg7r.txt
-r--rw-r-x  1 root root 1.1K Mar 12 08:50 B7HIyq5CKwGavwaW.txt
---xr-xr--  1 root root 1.1K Mar 12 08:46 bG0d9OBnfwVP2NS8.txt
--wxr-----  1 root root 1.1K Mar 12 08:31 cDnYAOBE4mvBnh0C.txt
-rw--wx--x  1 root root 1.1K Mar 12 08:29 eiUFiXPDk6oee8sL.txt
-rwxr-xr--  1 root root 1.1K Mar 12 08:35 fGMkb1gANtjLb5Qz.txt
-rwx--xr--  1 root root 1.1K Mar 12 08:48 GeDYq3hoIx7oijhO.txt
-rwx--xr--  1 root root 1.1K Mar 12 08:40 GP4decBqHC6UL66s.txt
-rw-rw---x  1 root root 1.1K Mar 12 08:53 HN5vsOJkU4004pEl.txt
-r-x---r-x  1 root root 1.1K Mar 12 08:34 HsxVbSgKw3d7tvFi.txt
----rw-r-x  1 root root 1.1K Mar 12 08:42 kcVtPjZM85b4B3V6.txt
--w---xr--  1 root root 1.1K Mar 12 08:52 KEY19YZmg8L92D1H.txt
-r-xrwx---  1 root root 1.1K Mar 12 08:30 kY4FOlfPt3qGR17K.txt
drwx------  2 root root  16K Mar 12 09:08 lost+found
--wx-wxr--  1 root root 1.1K Mar 12 08:39 LuVzAMVXkpJYAxRM.txt
----rw--wx  1 root root 1.1K Mar 12 08:38 lysJisb6wMlPG9WX.txt
-rw--w--wx  1 root root 1.1K Mar 12 08:33 OOVH70vCevC3FSZq.txt
--wxr-x-w-  1 root root 1.1K Mar 12 08:23 PtRcxoHyWhhS6z9q.txt
-r---wx-wx  1 root root 1.1K Mar 12 08:44 pU2aTHrPpCjthwwi.txt
-r--rw--wx  1 root root 1.1K Mar 12 08:25 R6qgmnljCORHERFH.txt
-rw---x-wx  1 root root 1.1K Mar 12 08:41 S5dyoQrp6a8grHOD.txt
-rwxr--rw-  1 root root 1.1K Mar 12 08:43 t7WeFKhvlS3e1Yet.txt
----r-xr--  1 root root 1.1K Mar 12 08:27 u70m5b8l2T3vnZHZ.txt
----rwx--x  1 root root 1.1K Mar 12 08:37 uAkL5PqfK2I7K4PE.txt
--wx--xr-x  1 root root 1.1K Mar 12 08:32 Uljik5BaQPOeMjfc.txt
--wxrw--w-  1 root root 1.1K Mar 12 08:47 Vp7XQiTt4ad9IDfB.txt
-r-xrwxr-x  1 root root 1.1K Mar 12 08:54 W5xw54rLYvyj7qRM.txt
-rwx-wxrw-  1 root root 1.1K Mar 12 08:28 x9f1QlloTkYd5sfU.txt
-rwx-w---x  1 root root 1.1K Mar 12 08:24 y7Dsjz7CmkvpTA1H.txt
-r---wx-w-  1 root root 1.1K Mar 12 08:45 Z0VC73hFMVt2AcO9.txt
```
> Quyền file trong Linux/Unix:
> 
> Mỗi file có 9 bit phân quyền: 3 bit cho owner (rwx), 3 bit cho group (rwx), và 3 bit cho others (rwx)
> Ví dụ: -rwxr-x-w- nghĩa là:
> 
> Bit đầu tiên - chỉ loại file (thông thường)
> 3 bit tiếp theo rwx là quyền của owner (read, write, execute)
> 3 bit tiếp theo r-x là quyền của group (read, no write, execute)
> 3 bit cuối -w- là quyền của others (no read, write, no execute)
> 
> 
> 
> 
> Chuyển đổi quyền thành nhị phân:
> 
> Mỗi ký tự được chuyển đổi: - thành 0, và r, w, hoặc x thành 1
> Ví dụ: -rwxr-x-w- => 111101010 (bỏ ký tự đầu tiên)
> 
> 
> Sắp xếp file theo thời gian:
> 
> Files được sắp xếp theo timestamp (08:23 đến 08:54)
> Điều này giúp đọc bit theo đúng thứ tự mà người ra đề đã thiết kế
> 
> 
> Chuyển đổi nhị phân thành ASCII:
> 
> Mỗi 8 bit được chuyển thành một ký tự ASCII
> Ví dụ: 01110101 => 117 trong hệ thập phân => ký tự u trong ASCII

Để AI gen Script là ra:  
```python=
file_listing = """
--wx---rw- 1 root root 1.1K Mar 12 08:26 1Pe4S76zWpxA8mgI.txt
-rwxr--rwx 1 root root 1.1K Mar 12 08:51 3zkhN7A0Vqe0HgNC.txt
-rw---x-wx 1 root root 1.1K Mar 12 08:49 5UhgLeVLJWuEnc4W.txt
-rw---xr-- 1 root root 1.1K Mar 12 08:36 6ReSGoJsRnFqhg7r.txt
-r--rw-r-x 1 root root 1.1K Mar 12 08:50 B7HIyq5CKwGavwaW.txt
---xr-xr-- 1 root root 1.1K Mar 12 08:46 bG0d9OBnfwVP2NS8.txt
--wxr----- 1 root root 1.1K Mar 12 08:31 cDnYAOBE4mvBnh0C.txt
-rw--wx--x 1 root root 1.1K Mar 12 08:29 eiUFiXPDk6oee8sL.txt
-rwxr-xr-- 1 root root 1.1K Mar 12 08:35 fGMkb1gANtjLb5Qz.txt
-rwx--xr-- 1 root root 1.1K Mar 12 08:48 GeDYq3hoIx7oijhO.txt
-rwx--xr-- 1 root root 1.1K Mar 12 08:40 GP4decBqHC6UL66s.txt
-rw-rw---x 1 root root 1.1K Mar 12 08:53 HN5vsOJkU4004pEl.txt
-r-x---r-x 1 root root 1.1K Mar 12 08:34 HsxVbSgKw3d7tvFi.txt
----rw-r-x 1 root root 1.1K Mar 12 08:42 kcVtPjZM85b4B3V6.txt
--w---xr-- 1 root root 1.1K Mar 12 08:52 KEY19YZmg8L92D1H.txt
-r-xrwx--- 1 root root 1.1K Mar 12 08:30 kY4FOlfPt3qGR17K.txt
--wx-wxr-- 1 root root 1.1K Mar 12 08:39 LuVzAMVXkpJYAxRM.txt
----rw--wx 1 root root 1.1K Mar 12 08:38 lysJisb6wMlPG9WX.txt
-rw--w--wx 1 root root 1.1K Mar 12 08:33 OOVH70vCevC3FSZq.txt
--wxr-x-w- 1 root root 1.1K Mar 12 08:23 PtRcxoHyWhhS6z9q.txt
-r---wx-wx 1 root root 1.1K Mar 12 08:44 pU2aTHrPpCjthwwi.txt
-r--rw--wx 1 root root 1.1K Mar 12 08:25 R6qgmnljCORHERFH.txt
-rw---x-wx 1 root root 1.1K Mar 12 08:41 S5dyoQrp6a8grHOD.txt
-rwxr--rw- 1 root root 1.1K Mar 12 08:43 t7WeFKhvlS3e1Yet.txt
----r-xr-- 1 root root 1.1K Mar 12 08:27 u70m5b8l2T3vnZHZ.txt
----rwx--x 1 root root 1.1K Mar 12 08:37 uAkL5PqfK2I7K4PE.txt
--wx--xr-x 1 root root 1.1K Mar 12 08:32 Uljik5BaQPOeMjfc.txt
--wxrw--w- 1 root root 1.1K Mar 12 08:47 Vp7XQiTt4ad9IDfB.txt
-r-xrwxr-x 1 root root 1.1K Mar 12 08:54 W5xw54rLYvyj7qRM.txt
-rwx-wxrw- 1 root root 1.1K Mar 12 08:28 x9f1QlloTkYd5sfU.txt
-rwx-w---x 1 root root 1.1K Mar 12 08:24 y7Dsjz7CmkvpTA1H.txt
-r---wx-w- 1 root root 1.1K Mar 12 08:45 Z0VC73hFMVt2AcO9.txt
"""

# Function to convert permission string to binary
def perm_to_binary(perm_str):
    binary = ""
    # Skip the first character (file type)
    for c in perm_str[1:]:
        if c == "-":
            binary += "0"
        else:  # r, w, or x
            binary += "1"
    return binary

# Parse the file listing to get file permissions and timestamps
files = []
for line in file_listing.strip().split("\n"):
    if not line.strip():
        continue
    parts = line.split()
    if len(parts) >= 9:
        permissions = parts[0]
        # Parse time
        time_str = parts[7]  # Time is at index 7
        # Extract file name
        filename = parts[8]
        files.append((permissions, time_str, filename))

# Sort files by their creation time
files.sort(key=lambda x: x[1])

print("Files sorted by time:")
for perm, time, filename in files:
    print(f"{time} - {perm} - {filename}")

# Extract binary from permissions
binary_message = ""
for perm, time, filename in files:
    binary = perm_to_binary(perm)
    binary_message += binary
    print(f"{filename}: {perm} -> {binary}")

print("\nBinary message:")
print(binary_message)

# Convert binary to ASCII (assuming 8 bits per character)
flag = ""
for i in range(0, len(binary_message), 8):
    if i + 8 <= len(binary_message):
        byte = binary_message[i:i+8]
        char = chr(int(byte, 2))
        flag += char
        print(f"{byte} -> {char}")

print("\nDecoded flag:")
print(flag)
```
Kết quả:  
```bash=
Files sorted by time:
08:23 - --wxr-x-w- - PtRcxoHyWhhS6z9q.txt
08:24 - -rwx-w---x - y7Dsjz7CmkvpTA1H.txt
08:25 - -r--rw--wx - R6qgmnljCORHERFH.txt
08:26 - --wx---rw- - 1Pe4S76zWpxA8mgI.txt
08:27 - ----r-xr-- - u70m5b8l2T3vnZHZ.txt
08:28 - -rwx-wxrw- - x9f1QlloTkYd5sfU.txt
08:29 - -rw--wx--x - eiUFiXPDk6oee8sL.txt
08:30 - -r-xrwx--- - kY4FOlfPt3qGR17K.txt
08:31 - --wxr----- - cDnYAOBE4mvBnh0C.txt
08:32 - --wx--xr-x - Uljik5BaQPOeMjfc.txt
08:33 - -rw--w--wx - OOVH70vCevC3FSZq.txt
08:34 - -r-x---r-x - HsxVbSgKw3d7tvFi.txt
08:35 - -rwxr-xr-- - fGMkb1gANtjLb5Qz.txt
08:36 - -rw---xr-- - 6ReSGoJsRnFqhg7r.txt
08:37 - ----rwx--x - uAkL5PqfK2I7K4PE.txt
08:38 - ----rw--wx - lysJisb6wMlPG9WX.txt
08:39 - --wx-wxr-- - LuVzAMVXkpJYAxRM.txt
08:40 - -rwx--xr-- - GP4decBqHC6UL66s.txt
08:41 - -rw---x-wx - S5dyoQrp6a8grHOD.txt
08:42 - ----rw-r-x - kcVtPjZM85b4B3V6.txt
08:43 - -rwxr--rw- - t7WeFKhvlS3e1Yet.txt
08:44 - -r---wx-wx - pU2aTHrPpCjthwwi.txt
08:45 - -r---wx-w- - Z0VC73hFMVt2AcO9.txt
08:46 - ---xr-xr-- - bG0d9OBnfwVP2NS8.txt
08:47 - --wxrw--w- - Vp7XQiTt4ad9IDfB.txt
08:48 - -rwx--xr-- - GeDYq3hoIx7oijhO.txt
08:49 - -rw---x-wx - 5UhgLeVLJWuEnc4W.txt
08:50 - -r--rw-r-x - B7HIyq5CKwGavwaW.txt
08:51 - -rwxr--rwx - 3zkhN7A0Vqe0HgNC.txt
08:52 - --w---xr-- - KEY19YZmg8L92D1H.txt
08:53 - -rw-rw---x - HN5vsOJkU4004pEl.txt
08:54 - -r-xrwxr-x - W5xw54rLYvyj7qRM.txt
PtRcxoHyWhhS6z9q.txt: --wxr-x-w- -> 011101010
y7Dsjz7CmkvpTA1H.txt: -rwx-w---x -> 111010001
R6qgmnljCORHERFH.txt: -r--rw--wx -> 100110011
1Pe4S76zWpxA8mgI.txt: --wx---rw- -> 011000110
u70m5b8l2T3vnZHZ.txt: ----r-xr-- -> 000101100
x9f1QlloTkYd5sfU.txt: -rwx-wxrw- -> 111011110
eiUFiXPDk6oee8sL.txt: -rw--wx--x -> 110011001
kY4FOlfPt3qGR17K.txt: -r-xrwx--- -> 101111000
cDnYAOBE4mvBnh0C.txt: --wxr----- -> 011100000
Uljik5BaQPOeMjfc.txt: --wx--xr-x -> 011001101
OOVH70vCevC3FSZq.txt: -rw--w--wx -> 110010011
HsxVbSgKw3d7tvFi.txt: -r-x---r-x -> 101000101
fGMkb1gANtjLb5Qz.txt: -rwxr-xr-- -> 111101100
6ReSGoJsRnFqhg7r.txt: -rw---xr-- -> 110001100
uAkL5PqfK2I7K4PE.txt: ----rwx--x -> 000111001
lysJisb6wMlPG9WX.txt: ----rw--wx -> 000110011
LuVzAMVXkpJYAxRM.txt: --wx-wxr-- -> 011011100
GP4decBqHC6UL66s.txt: -rwx--xr-- -> 111001100
S5dyoQrp6a8grHOD.txt: -rw---x-wx -> 110001011
kcVtPjZM85b4B3V6.txt: ----rw-r-x -> 000110101
t7WeFKhvlS3e1Yet.txt: -rwxr--rw- -> 111100110
pU2aTHrPpCjthwwi.txt: -r---wx-wx -> 100011011
Z0VC73hFMVt2AcO9.txt: -r---wx-w- -> 100011010
bG0d9OBnfwVP2NS8.txt: ---xr-xr-- -> 001101100
Vp7XQiTt4ad9IDfB.txt: --wxrw--w- -> 011110010
GeDYq3hoIx7oijhO.txt: -rwx--xr-- -> 111001100
5UhgLeVLJWuEnc4W.txt: -rw---x-wx -> 110001011
B7HIyq5CKwGavwaW.txt: -r--rw-r-x -> 100110101
3zkhN7A0Vqe0HgNC.txt: -rwxr--rwx -> 111100111
KEY19YZmg8L92D1H.txt: --w---xr-- -> 010001100
HN5vsOJkU4004pEl.txt: -rw-rw---x -> 110110001
W5xw54rLYvyj7qRM.txt: -r-xrwxr-x -> 101111101

Binary message:
011101010111010001100110011011000110000101100111011110110011001101111000011100000011001101110010011101000101111101100110001100000111001000110011011011100111001100110001011000110101111100110100011011100011010001101100011110010111001100110001011100110101111100111010001100110110001101111101
01110101 -> u
01110100 -> t
01100110 -> f
01101100 -> l
01100001 -> a
01100111 -> g
01111011 -> {
00110011 -> 3
01111000 -> x
01110000 -> p
00110011 -> 3
01110010 -> r
01110100 -> t
01011111 -> _
01100110 -> f
00110000 -> 0
01110010 -> r
00110011 -> 3
01101110 -> n
01110011 -> s
00110001 -> 1
01100011 -> c
01011111 -> _
00110100 -> 4
01101110 -> n
00110100 -> 4
01101100 -> l
01111001 -> y
01110011 -> s
00110001 -> 1
01110011 -> s
01011111 -> _
00111010 -> :
00110011 -> 3
01100011 -> c
01111101 -> }

Decoded flag:
utflag{3xp3rt_f0r3ns1c_4n4lys1s_:3c}
```
> Flag: utflag{3xp3rt_f0r3ns1c_4n4lys1s_:3c}

---
