문제 종류 - Forensic(Programming)
사용한 툴 - ILSpy
Flag, Hint, 정답 형식
flag: ?
hint: X
정답 형식: ?
풀이
문제에 들어가면 zip 하나가 주어진다. 압축을 풀어보자.
압축을 풀면 account.dat, getthepw.exe가 있다. 먼저 account.dat 파일을 열어보자.
대충 봐서는 ID:md5_encoding_key:PW의 형태로 나타나 있는 듯 하다.
이제 getthepw.exe를 실행해보자.
ID와 PW에 admin, 31337을 입력해보자.
아니란다. 답을 얻기 위해서는 가운데 md5 문자열이 무엇인지 알아내야 할 듯 하다.
ILSpy를 이용해 getthepw.exe를 디버깅 해보자.
우선 PW의 입력값이 소문자, 숫자로 이루어진 5글자인지 확인한다. 아니라면 메시지박스를 출력한다.
이제 같은 경로에 있는 account.dat에 들어있는 값을 읽어온다.
읽어올 때는 배열에 저장하며, :를 기준으로 split 해준다. 예를 들면 이렇다.
array[0] = admin
array[1] = md5A0F60D70FAD9DC9846D971FD61D2B7A0
array[2] = 31337
이제 array[0]값, PW의 입력 값, array[2]값을 문자열로 합치고 MD5 함수로 들어간다.
for문에서 해당 길이만큼 16진수로 변환시켜준다.
그 후, 나온 값과 array[1]의 값이 같고 ID의 입력 값이 admin이면 답을 출력한다.
아마도 PW의 입력 값을 구하면 해결되는 문제인 것 같다.
PW의 조건이 정해져 있으니, Bruteforing 해보자.
문제에서 주어진 MD5Hash를 그대로 사용하기 위해서는 C# 언어를 사용해야 한다.
일부러 잘 안보이게 해놨다. 여러분들이 직접 생각하고 코드를 작성해보길 바란다.
알아야 할 사실은 한 자리의 들어갈 key값의 경우의 수는 36개 이므로 총 경우의 수는 $36^5$ 이다.
코드를 작성해 답을 구했다면, 이제 flag를 획득할 수 있다.
'Wargame > XCZ.KR' 카테고리의 다른 글
[XCZ.KR] 26번 풀이 (0) | 2020.05.15 |
---|---|
[XCZ.KR] 35번 풀이 (5) | 2020.05.13 |
[XCZ.KR] 36번 풀이 (0) | 2020.05.05 |
[XCZ.KR] 32번 풀이 (0) | 2020.05.02 |
[XCZ.KR] 30번 풀이 (0) | 2020.05.02 |