czwartek, 22 stycznia 2026

picoCTF - Corrupted file

W tym poście chciałbym opisać rozwiązania zadania Corrupted file z działu Forensics picoCTF.


Dzięki podpowiedzi odrazu nakierowują nas na nagłówek pliku oraz informują nas, że jest to plik JPEG. 

Na stronie można znaleźć informacje jak powinien wyglądać nagłówek pliku JPEG


Gdy plik dostarczony do zadania otworzymy w WinHex można odrazu zobaczyć różnicę miedzy nagłówkami:


Nagłówek jest traktowany jak tzw. file signature. Dzięki temu odrazu wiadomo jaki to jest typ pliku. Jeśli jest on uszkodzony to nie wiadomo jak interpretować pozostałe dane zapisane w pliku.

Poprawiamy nagłówek w programie WinHex na poprawny. Dopisujemy rozszerzenie do pliku, po czym wyświetli nam się flaga:

Można to też lekko zautomatyzować za pomocą Pythona:

  1. def fix_jpeg_header(input_file, output_file):
  2.     with open(input_file, "rb") as f:
  3.         data = f.read()
  4.  
  5.     #poprawny nagłówek
  6.     correct_header = b'\xFF\xD8'
  7.  
  8.     print("Pierwsze 8 bajtów pliku:", data[:8])
  9.  
  10.     #weryfikacja nagłówka
  11.     if data.startswith(correct_header):
  12.         print("Nagłówek JPEG poprawny.")
  13.         return
  14.  
  15.     print("Niepoprawny nagłówek")
  16.  
  17.     #podmien bajty
  18.     fixed_data = correct_header + data[2:]
  19.  
  20.     with open(output_file, "wb") as f:
  21.         f.write(fixed_data)
  22.  
  23.     print(f"Plik zapisany: {output_file}")
  24.  
  25. fix_jpeg_header("file", "file_repaired.jpg")

W konsoli otrzymamy:

  1. $ py jpeg.py
  2. Pierwsze 8 bajtów pliku: b'\\x\xff\xe0\x00\x10JF'
  3. Niepoprawny nagłówek
  4. Plik zapisany: file_repaired.jpg

Flage wklejamy do odpowiedzi i zadanie rozwiązane.