#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

+ Recent posts