# Write-Up L4G – CSTV
## 1/ Sửa file PNG
File đầu khi đưa lên hexed.it thì mình nhận thấy 'NG', mình đoán đây là file PNG bị crash nên mình sẽ chỉnh lại.
Đầu tiên là sửa header và chunk IHDR

Đổi thành : 89 50 4E 47 (header) và 49 48 44 52 ( IHDR)

Dùng PNG check thì thấy có lỗi ở trunk gama -> đổi lại thành : 0B FC 61 05

Chunk IDAT bị sai cú pháp -> đổi thành 49 44 41 54

Chỉnh length của IDAT, length của IDAT là 4 byte phía trước ‘IDAT’
Length = offset đầu của đoạn IDAT kế tiếp – offset đầu của IDAT hiện tại ( ko tính length) – 0x08
= 0x10004 – 0x57 – 0x08 = 0xffa5
Và đây là tất cả các byte chỉnh sửa:

Mình có viết một đoạn code để fix ảnh mặc dù nó cũng chẳng nhanh hơn fix tay bao nhiêu :+1:
```python=
def modify(file_path,output_path):
try:
with open(file_path, 'rb') as file:
content = bytearray(file.read())
content[0x01] = 0x50
content[0x03] = 0x47
content[0x0c] = 0x49
content[0x0e] = 0x44
content[0x3a:0x3e] = [0x0B, 0xFC, 0x61, 0x05]
content[0x53:0x55] = [0x00, 0x00]
content[0x56] = 0xA5
content[0x58] = 0x44
content[0x5A] = 0x54
with open(output_path, 'wb') as file:
file.write(content)
except Exception as e:
print(f"Error: {e}")
modify('C:\\Users\\phgvee\\Downloads\\3y3L4g','C:\\Users\\phgvee\\Downloads\\fixed.png')
```
## 2/ Decode
Sau khi chỉnh ảnh thì mình thu được ảnh như sau

Bài này nó còn cho thêm một file .wav có mã morse, mình ngồi decode ra thì nó ra như này :
WH4TY0UH34R1SN0TWH4TY0US33KF0R
Đối với bài này thì mình không rõ hướng đi nên mình thử tất cả các cách có thể làm đối với file ảnh và wav, cuối cùng thì mình dùng steghide trên file wav với pass 123321232123 thì ra được một file txt:


Biết là BrainFuck nhưng decode hoài hong ra , nhìn lại cái ảnh thì thấy chữ viết dọc nên đoán là cái brainfuck nên viết dọc lại và decode, mình dùng script sau để chỉnh :
```python
def read_and_process_columns(file_path):
columns = []
with open(file_path, 'r') as file:
lines = file.readlines()
for line in lines:
for i, char in enumerate(line.rstrip('\n')):
if len(columns) <= i:
columns.append([])
columns[i].append(char)
for i, column in enumerate(columns):
print(f"{''.join(column)}",end="")
file_path = 'Br41nL4g.txt'
read_and_process_columns(file_path)
```
Và đây là kết quả :
```
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++.++++++.-----------.++++++.<------------.>+++++.<------.>-----..++.+++++.-------.--------.<-.>+++++++++++++++++++++++.<.>----.+++++++.--.---------------.<.>++++++++++.<.........
```
Giơ đem đi decode ở [tools](https://www.dcode.fr/brainfuck-language) này thì ra kết quả :
```flag:l4gging_3v3rywh3r333333333```