ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dreamhack - broken-png
    wargame/Dreamhack 2024. 3. 18. 13:24

    [LEVEL 1 - broken-png - misc]

     

     

     

    문제를 잘 읽어야 한다.

    원래 정사각형 이미지인데 반밖에 오지 않아서 복구해야 하는 상황

     

     

    문제 파일을 다운로드 받으면 png 이미지 파일 하나가 나온다.

     

     

    해당 이미지 파일의 속성에 들어가 보면 width가 512픽셀, height가 256픽셀임을 볼 수 있다.

     

     

     

     

     

    바이너리 분석을 해보기 위해 HxD로 해당 png 파일을 열어본다.

    드래그 해놓은 곳이 png 파일 시그니처의 헤더 부분이다.

     

     

     

     

     

    그리고 png 파일은 헤더 및 푸터 시그니처와 다양한 청크들로 구성되어 있는데, 여기서 청크(chunk)는 공통된 데이터를 갖고 있는 데이터들의 집합이라고 생각하면 된다.

    중요 청크에는 IHDR, IDAT, PLTE, IEND가 있고, png 파일에 반드시 포함되어야 하는 청크는 IHDR, IDAT, IEND이다.

     

     

    그 중 이 문제 풀이에 필요한, 드래그 해놓은 IHDR 청크는 시그니처 바로 뒤에 붙으며, png 파일의 기본 정보를 담고 있다.

    또한, 데이터의 길이는 언제나 13바이트이다.

    IHDR 청크의 구조는 아래와 같다.

     

    {
    Length : 00 00 00 0D (4bytes),
    Chunk type : IHDR (4bytes),
    Chunk data (모든 IHDR은 13bytes),
    {
    Width (4bytes),
    Height (4bytes),
    Bit depth (1byte),
    Color type (1byte),
    Compression method (1byte),
    Filter method (1byte),
    Interlace method (1byte)
    }
    CRC (4bytes)
    }

     

     

     

     

     

    앞서 언급했듯 해당 png 이미지 파일의 높이가 256픽셀인데, 이를 폭과 똑같은 512픽셀로 변경하여 길이를 맞추어야 절반이 잘리지 않은 원본을 얻을 수 있는 것이다.

    위에 드래그한 곳의 앞부분 4바이트가 width이고, 드래그한 부분 4바이트가 height이다.

    폭 512는 16진수로 바꾸면 0x00000200이고, 256은 0x00000100이다.

    따라서 높이 부분인 00 00 01 00을 수정하면 된다.

     

     

     

     

     

    위와 같이 폭의 값과 똑같은 00 00 02 00으로 수정하면 얻고자 했던 원래의 정사각형 이미지로 복구할 수 있다.

     

     

     

     

     

     

     

    플래그를 획득했다!

     

    'wargame > Dreamhack' 카테고리의 다른 글

    Dreamhack - file-download-1  (1) 2024.03.25
    Dreamhack - image-storage  (0) 2024.03.18
    Dreamhack - Mango  (0) 2024.02.27
    Dreamhack - simple_sqli  (0) 2024.02.21
    Dreamhack - csrf-2  (0) 2024.02.20
Designed by Tistory.