[HackCTF/Forensic] 9번 Let'S get it ! Boo*4 풀이

2019. 8. 1. 02:46문제풀이/ctf.j0n9hyun.xyz

문제 제목이 힙하네

일단 파일을 다운받아 보면 다음과 같은 이미지다.

 

가사마저 힙하다

HxD로 파일을 열었는데, 푸터는 원래 없고 헤더는 멀쩡하다.

일단 비트맵 파일 구조를 검색해보았다. 멀쩡해보였다.

이미지 파일이니까, 스테가노그라피..? 이런 생각이 들어서 스테가노그라피에 대해 자세히 찾아보았다.

그리고 아래 이미지와 같이, 어느 분이 잘 정리해 놓으신 자료를 발견하였다. (출처)

 

이미지가 단순하고(하얗고 까맣고 등등) 색깔 많이 안썼으면 HxD로 직접 확인해보려고 했는데 ㅠㅠㅠ

그런 이미지가 아니라서 결국 툴을 다운받았다..(출처)

StegSolve라는 툴을 사용하였고, 처음 StegSolve를 실행하여 이미지를 오픈하면 다음과 같은 상태이다.

여기서 이미지 좀 돌려보다가, 이미지로는 안 나올것같아서 텍스트 분석 기능?을 사용하였다.

[Analyse]-[Data Extract]를 누르고, 각 옵션을 다음과 같은 상태로 맞춰준다.

그리고 Preview 버튼을 눌러주면 다음과 같은 헥스코드가 나온다.

저 내부에서는 검색기능이 안먹혀서 Save Text로 텍스트부분만 저장해준 후 HackCTF를 검색해주었다.

중간에 줄바꿈되어있고 그래서 사실 HackCTF로 검색하면 안되고 Ha 이런식으로 검색해야한다...!

HackCTF{0U].B10C0xCDA90xBD840xD7880d.8AC000H.8CE580xC7880xB2940xC8740xC7AC0v.8C57C}

라고 나온다...

 

넣어봤더니 오답이라 나온다.

뭘까 하다가 저 중간중간의 0x가 거슬려서 0x로 시작하는 부분만 봤더니

0xCDA9

이런식으로 딱 2byte였다.

 

LOS 문제 풀었던 걸로 직감하면 저건 딱 유니코드! 근데 0U 0v 이런애들은 뭔지 모르겠다 ㅠㅠㅠㅠㅠ

일단 규칙성은 보이는게, 0x로 시작하지 않으면 0d.8 0h.8 등 0 + [알파벳] + .8 로 시작한다.

일단 그 사이사이값들을 번역해보았다.

즉, 진하게 표시한 부분들을 번역했다.

 

0U].B10C0xC**DA90xBD840xD7880d.8AC000H.8CE580xC7880xB2940xC87**40xC7AC0v.8C57C

 


유니코드를 한글로 복호화하는 코드를 짜봤다.

코드로 하니까 엄청엄청 간단한데 검색하면 진짜 아예 안나왔다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

다 이미 유니코드형식인걸 한글로 바꾸는것만 나오고 나처럼 문자열? 4개만 있는건 안나오던데

쨌든 성공했다.. 밑에 크롤링한건 이제 필요없지만 백업용으로 남겨놔야지

 

msg = "B10C CDA9 BD84 D788 AC00 CE58 C788 B294 C874 C7AC C57C".split()

result = []

for i in msg:

   result.append(chr(int(i,16)))

print(''.join(result))


 

따라서 B10C CDA9 BD84 D788 AC00 CE58 C788 B294 C874 C7AC C57C을

이 사이트에서 u+를 붙여 검색해보면(ex: u+b10c) 한글자씩 알아낼 수 있다...

 

 

하나하나 검색하려다가, 파이썬 공부도 될것같아서 크롤러를 만들었다.

간단하니까 코드 공개해야지

import urllib.request
from bs4 import BeautifulSoup

word = "B10C CDA9 BD84 D788 AC00 CE58 C788 B294 C874 C7AC C57C".split(' ')
url = "https://www.compart.com/en/unicode/U+"

for i in range(0,len(word)):

    req = urllib.request.Request(url+str(word[i]))
    data = urllib.request.urlopen(req).read().decode('utf-8')
    soup = BeautifulSoup(data, 'html.parser')
    key = soup.find("title")

    print(key)

결과화면은 다음과 같다.

그리고 답을 입력하면 클리어!

HackCTF{넌충분히가치있는존재야}

궁금한점

대체 0U]. 0d.8 0h.8 0v.8의 의미는 뭘까 ㅠㅠㅠ못찾겠다

아시는분 꼭 알려주시면 감사하겠습니다