본문 바로가기

[+] Hacking/[-] Challenge Report

순천향대 청소년 정보보호 페스티벌 예선 문제 풀이.

일단 전 청소년이 아닙니다.

또한 이글은 풀이라고 보기보다는 풀이 과정을 써놓은 글 입니다.

적어도 이 글을 보고 문제 푸는 방향은 잡으실 수 있으나 풀이에 사용된 코드는 공개하지 않습니다.

(전 제 코드는 거의 공개하지 않는 편이라... 가끔 공개해요 ㅎㅎ)

사실 시스템 복원했는데 날렸어요 ㅡㅡ;;

.
.
.

자 이제부터 시작해볼까요??

전 아는분께 bmp 파일을 하나 받았습니다.




하지만 전 'bmp는 그냥 bitmap 이다~' 라는 것 뿐이 몰랐죠..

어떻게 해야 하나 고민하고 있다가 '파일은 역시 파일구조부터 봐야지' 하며 파일 구조를 검색했습니다.

검색하니 bmp 헤더는 53바이트까지라고 하네요
(참조 :
http://www.riemers.net/kor/Tutorials/XNA/Csharp/Series1/Importing_bmp_files.php)

위 문서에 의하면 data는 54바이트 부터 시작이라네요..

전 일단 bmp 파일 정보를 보기 위해서 검색하다 얻은 툴을 이용해서 정보를 봤습니다.

제가 쓴 툴은 헤더정보와 픽셀정보를 볼 수 있는데 아무래도 이미지 안에 인증 패스워드가 숨겨져 있는거 같아 픽셀 정보를 보았습니다.



엥.. 보니 RGB 값이 모두 같네요??? 전 이걸 이번에 삽질하면서 처음알았어요..(bmp는 RGB로 이루어져 있답니다.)

정상적인 RGB라면 저렇게 모두 같을테니 의도적으로 넣은 문자열의 픽셀은 RGB 값이 다를꺼라 생각하고 코딩을 시작했습니다.

여기서도 꽤 오래 걸렸죠... 전 코딩을 잘 못해서요 ㅠㅠ

코드 시나리오는 이렇습니다.

1. 원본파일과 결과파일을 파일포인터로 연다.

2. 원본파일의 헤더를 결과파일에 복사한다.

3. data에 있는 R, G, B의 값들을 비교하여 모두 같다면 특정 색으로 결과파일에 넣어준다.

4. data에 있는 R, G, B의 값들이 하나라도 다르다면 특정 색으로 결과파일에 넣어준다.

5. 파일포인터를 닫아준다.

3, 4번에 특정색은 극과극으로 주는것이 제일 좋겠죠??? 그렇게 하면 임의적으로 넣은 문자열이 선명하게 보일테니까요..

프로그램을 돌리고 결과파일을 보면 다음과 같습니다.




와우... 근데 이게 답인지를 모르겠어요 ㅡㅡ;;

전 인증을 못했거든요 청소년이 아니라 대회를 참가를 못했거든요 ㅋㅋ

음.. 무튼 전 여기까지 풀었습니다 ㅋㅋㅋㅋ

아는분이 주신 파일만 봤구요. 시간이 없어서 고작 이것만 풀었네요..

나중에 파일 많이 구해서 다시 풀이 올릴께요^^

제가 만든 이미지 분석툴은 이 이미지를 분석하지 못하더라구요 ㅡㅡ.....

제 프로그램은 역시 허접인가 봅니다 ㅎㅎ

저도 청소년이었다면 얼마나 좋았을까요 ㅋㅋ


p.s 문제 제공해주신분 감사해요 ㅋㅋ 지금은 밝히지 못하고... 3년뒤에 밝히겠습니다 ㅋㅋ