1 분 소요

[HackCTF] 나는 해귀다 풀이

Environments

Name Config
CPU Apple M1
Architecture ARM64
OS Microsoft Windows 11 on ARM
Tools - Mh-Nexus HxD Editor

Problem

URL: https://ctf.j0n9hyun.xyz/challenges#나는%20해귀다

목표: waytogo.png 으로부터 Flag 찾기

접근 방법: png format 비교

Solution

정상적인 png 파일 인 것은 이미지 뷰어와 PNG 파일 Signature Header로 확인 가능

우선 PNG 파일의 구조를 알아야 분석 가능. PNG 파일 구조는 JPG와 Stganography 와 함께 별도 글 분리.

49 45 4E 44 AE 42 60 82IEND 부분을 검색하면 PNG 파일 IEND Chunk 뒤로 Dummy data 존재 확인.

다만 재미 있는 것이 49 45 4E 44 AE 42 60 82 뒤로 바로 82 60 42 AE 44 4E 45 49가 있음.

최고의 해커!

새로운 PNG 구조가 모두 역순으로 dummy data 화 되어 있음. 이를 해결하기 위해 C++로 fstream을 활용. Simple Text Reverser 참고.

/*
 * Simple Text Reverser
 *
 * Author: iCAROS7 (hominlab@gmail.com)
 * Date/Time: 2022.03.29 22:14
 */

#include <iostream>
#include <fstream>

int main(int argc, const char * argv[]) {
    std::ifstream is{ "input.txt" };
    std::ofstream os { "output.txt" };
    if (!is || !os) {   // 파일 열기 실패시
        std::cerr << "파일 오픈에 실패하였습니다." << std::endl;
        exit(1);        // 1과 함께 종료
    }

    is.seekg(0, std::ios::end);  // 커서 위치를 가장 끝으로 이동
    int num = is.tellg();   // 현재 커서 위치를 파일의 크기로 간주하고 저장
    char c;
    
    for (int i = num - 1; i >= 0; i--) {
        is.seekg(i, std::ios::beg);
        is.get(c);
        os << c;
    }
    return 0;
}

이 후 다시 재정렬 된 hex 값 저장시 flag 확인 가능