---
title : task 1 - File Signature and Hex Analysis
tags: [forensics,training,beginer]
---
# Task 1: Phân tích chữ ký file và hex
1. Nội dung :Magic bytes, header/footer, offset, endianness, container format, chunk/section, padding, appended data, malformed header, entropy cơ bản
2. Yêu cầu : Viết lại theo kiến thức bản thân đọc đượ(Magic bytes là gì,liệt kê các loại magic bytes,etc.) và viết write up cho 2 chall được giao.
3. Tham khảo:
- [Phân tích chữ ký tệp và hex (File Signature & Hex Analysis) - Hán Duy Long PTIT](https://www.notion.so/Ph-n-t-ch-ch-k-t-p-v-hex-File-Signature-Hex-Analysis-22824fc2a53081c7aaefcdaa93affca4?source=copy_link) (bắt buộc)
- [How to hexdump works](https://opensource.com/article/19/8/dig-binary-files-hexdump?fbclid=IwY2xjawRGAIhleHRuA2FlbQIxMABicmlkETE2WkF6WmdZNXpUN0YyNVlPc3J0YwZhcHBfaWQQMjIyMDM5MTc4ODIwMDg5MgABHivc6MQWgHG584KiSJx6y_j3DYAAHSB4zEh32QMhuw3grSP9RWQrsuGL_oYB_aem_BPY5cx4aJF4daRckw9Vfvg) (nên đọc)
- [What's the Hex Code and how to use it](https://www.linearity.io/blog/hex-code/?fbclid=iwy2xjawrgai9lehrua2flbqixmabicmlkete2wkf6wmdznxpun0yynvlpc3j0ywzhchbfawqqmjiymdm5mtc4odiwmdg5mgabhohxmn0yv9vi6afcqar5yhog_tr-m7jlcnrc5m6ho9x0ty_jbuxin_xgavj__aem_59lxr00ed1thuirykikqzq) (nên đọc)
- [PE file và những gì liên quan](/XHiqM5aXTzqsHBpm4rj4hg) , cái này thiên về Reversing hơn ,có thể đọc để hiểu sâu hơn về cấu trúc file. (nếu muốn hiểu sâu hơn)
- [Windows Forensics](/t9seHKYnT92V3ITERuc10g), đọc `File System` nếu muốn hiểu sâu thêm. (nếu muốn hiểu sâu hơn)
4. Challenge
- pico-chall : [File Types](https://play.picoctf.org/practice/challenge/268?assigned=0&category=4&page=1&search=File%20type&solved=0)
- dreamhack-chall : [Enc-JPG](https://dreamhack.io/wargame/challenges/752)
5. Deadline : 17/4/2026
# Viết ở dưới đây.
- Magic bytes là chuỗi byte đầu tiên định danh loại tệp bất kể phần mở rộng
- Header là phần chữ ký đầu của file trong khi footer là chữ ký cuối, VD:
+ PNG; header: 89 50 4E 47 0D 0A 1A 0A; footer: 00 00 00 00 49 45 4E 44 AE 42 60 82
+ JPG; header: FF D8 FF E0 hoặc FF D8 FF E1; footer: FF D9
- Endianess là thứ tự sắp xếp các byte trong đa byte (Big endianess sẽ xếp các byte có giá trị cao nhất trước trong khi small endianess thì ngược lại)
- Container format là một cấu trúc tệp tin kỹ thuật số dùng để đóng gói, lưu trữ nhiều luồng dữ liệu trong 1 file duy nhất
- Một số định dạng có thể bao gồm các chunk/section (VD: .png bao gồm IHDR, IDAT,..)
- padding: đệm thêm ký tự vào để đủ độ dài tiêu chuẩn (VD: base64 padding bằng `=`)
- Append data: chèn thêm dữ liệu vào file
- Maliformed header là khi header bị lỗi/ thay đổi khác so với định dạng tiêu chuẩn
- Entropy để đo sự hỗn loạn của nội dung file, với file có entropy cao (gần 1) thì chứng tỏ file đó có thể đã bị nén/ mã hóa
## Write-up
### File types
Tải file từ picoCTF và kiểm tra loại file thì thấy file pdf thực chất là shell archive text


Cấp quyền chạy cho file và chạy thì được trả về file nén flag
```
chmod +x Flag.pdf
./Flag.pdf
```
File flag là 1 file được nén nhiều lần bằng các công cụ nén khác nhau, thực hiện giải nén đến khi thu được file flag là file ASCII text. Nội dung file text dưới dạng hex, chuyển lại thì có được flag
```
7069636f4354467b66316c656e406d335f6d406e3170756c407431306e5f
6630725f3062326375723137795f37396230316332367d0a
picoCTF{f1len@m3_m@n1pul@t10n_f0r_0b2cur17y_79b01c26}
```
FLAG: **picoCTF{f1len@m3_m@n1pul@t10n_f0r_0b2cur17y_79b01c26}**
### Enc-JPG
Tải file từ DreamHack và giải nén thì được file `Enc` và `flag.jpg`. Kiểm tra file Enc thì đây thực chất là file `.exe` nên đổi tên thành `Enc.exe` để chạy

Sử dụng HxD để mở file `flag.jpg`, Phần header file có dạng của file `.jpg` nhưng 2 byte để kết thúc `.jpg` là `FF D9` lại xuất hiện 2 lần nên lần xuất hiện tại offset `0xCC7` là để chia cắt file


Copy lại phần đầu tới offset `0x12C7` và xóa đi 2 byte `FF D9` trước đó và lưu lại thì được phần đầu của flag

Ngay sau đó thì file chứa phần tiếp theo của flag

Trong đoạn cuối cùng thì thấy đây là định dạng của file `.png`. Lưu lại và mở ra thì thấy ảnh vẫn mở được trong khi `.png` là định dạng nhạy cảm với lỗi => flag được lưu sao cho không ảnh hưởng đến file. Ở đây flag được lưu bằng cách chèn vào giữa 2 chunk `IHDR` và `IDAT`


FLAG: **DH{How_ENc_ECrypt_yo}**