#About
Author : WarRock
Korean :
Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가
힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)
English :
What is Name when the Key is BEDA-2F56-BC4F4368-8A71-870B
Hint : The name is 1 letter and it could be either alphabetic or numeric.
Verify your solution with the MD5 value of the Name.
#Contents
키 값에 따라 달라지는 네임 값을 구하는 것을 목표로 함
#Solution
[그림 1] - 실행 화면
17.exe 를 실행했을 때, Name과 Key 값을 입력하는 창을 확인할 수 있으며 주어진 문제에서 고정 키 값을 사용할 때 Name을
구하는 문제이므로, Name란에는 임의의 값과 Key란에는 고정 키 값을 넣어주고 Check it!을 누르면 아래와 같은 메시지를 볼 수 있다.
( Name란에 문자의 길이가 3 글자 이상이면 Check it! 버튼이 먹히지 않음 )
[그림 2] - 키 박스 메시지
더 많은 문자를 입력하라는 메시지라는 정보만 출력되며, 디버거로 열기전 패킹여부를 PEiD로 확인한 결과는 아래와 같다
[그림 3] - Delphi Programming
패킹은 되어 있지 않고 단지 델파이 프로그래밍 되었기에 별도의 언패킹 과정을 하지 않고 디버깅을 진행하면 된다
[그림 4] - 아스키 값 추출
위 그림은 메시지에서 출력된 메시지가 저장되어 있는 값을 찾기 위해 아스키 값만 추출한 것이며,
정답과 관련되어 보이는 값들 또한 같이 확인할 수 있었다
다시, 해당 문제는 Key 값이 "BEDA-2F56-BC4F4368-8A71-870B"일 때의 1자리 값의 Name을 구하는 것인데 [그림 2]에서 확인할 수 있듯 Name에
값 하나만 넣어주게 되면 Please Enter more Chars...라는 메시지가 출력되기에 이를 확인하기 위해, 위 그림에서 확인할 수 있는 주소 0045BB29로 이동했다
[그림 5] - 비교 구문
0045BB29로 이동했더니 두 줄 위의 코드에서 비교 구문을 확인할 수 있었고 이는 [그림 2]에서 확인할 수 있었듯,
Name란에 입력된 글자 수를 제어하는 구문으로 추측된다
따라서 해당 주소 0045BB24에 bp를 걸고 임의의 값을 입력한 뒤의 EAX 값을 확인 해보았다
[그림 6] - 임의의 값 입력
[그림 7] - EAX 값 확인
위 과정에서 알 수 있듯, Name에 입력한 값의 길이가 EAX의 값으로 들어감을 확인할 수 있고, 해당 문제는 1 글자일 때므로 아래와 같이 코드 패치를 진행
[그림 8] - 코드 수정
코드를 수정해 준 뒤, 아래의 옵션을 통해 바이너리 패치 본을 만들어 준다
[그림 9] - 코드 패치
[그림 10] - 패치 본
Name이 한 글자임을 감안해 브루트포싱을 통해 임의의 값을 입력하다보면 아래와 같이 F에서 Well done! 메시지를 확인할 수 있다
[그림 11] - Brute Forcing을 통한 Name 값 확인
[그림 12] - 인증
'Wargame' 카테고리의 다른 글
CodeEngn Basic 19 (0) | 2017.10.19 |
---|---|
CodeEngn Basic 18 (0) | 2017.10.17 |
CodeEngn Basic 16 (0) | 2017.10.13 |
CodeEngn Basic 15 (0) | 2017.10.12 |
CodeEngn Basic 14 (0) | 2017.10.11 |