1. What is the valid width and height of this bitmap image file?
(image size) = (width) x (height) x (byte per pixel)이다.
width는 0x3d1, height는 0x2c7, bit per pixel은 0x18, image size는 0x21a1c4라고 정보가 나와있으나, width는 잘못된 값이라고 한다.
image size의 단위는 비트가 아니라 바이트이므로 byte per pixel은 0x3이다.
따라서, (실제 width) = (image size) / (height) / (byte per pixel) = 0x21a1c4 / 0x2c7 / 0x3 = 0x409이다.
이것을 십진수로 표현하면 (width) = 0x409 = 1033이고, (height) = 0x2c7 = 711이다.
답: 1033 x 711
2. What is the key for decrypting a hidden byte stream?
1번에서 구한 실제 width 값인 0x409를 little endian 방식으로 오프셋 0x12부터 4바이트만큼 고쳐주면 아래와 같은 그림을 얻을 수 있다.
그림의 오른쪽 아래를 보면, ?? 가 다음 단계로 가기 위한 key라고 한다.
6eba4c271f4ad801를 DCode 프로그램을 이용하여 time decoding을 해보자.
6eba4c271f4ad801는 window filetime 2022-04-07 10:31:07.1211118+09:00을 의미한다.
따라서, ?? 값은 07이다.
답: 07
3. What is the latitude and longitude stored in the hidden byte stream?
2번에서 구한 그림에 따르면 hidden byte stream은 file의 끝에 있다고 한다.
위 그림에서 하이라이트친 hidden byte stream을 아래와 같이 from hex→XOR→from base64→rot13으로 복호화해주자. 이때, XOR에서 키값은 2번에서 구한 07이다.
그러면 다음과 같은 NMEA 값이 나온다.
$GPRMC,070119.306,A,3714.498,N,13151.902,E,,,070422,000.0,W*7A
이것을 GPRMC decoder을 통해 복호화하여 위도와 경도를 알아내자.
위도는 37.241633°N이고, 경도는 131.865033°E이다.
답: (37.241633, 131.865033)
4. What is the Korean name of the place where the coordinates point to? Represent it as UTF-8 hex-encoded value
3번에서 구한 위도, 경도 값을 구글 맵에 입력하면 아래와 같이 서도를 가리킨다.
서도를 utf-8 hex값으로 암호화해보자.
그러면 ec 84 9c eb 8f 84 0a가 나온다.