#About
Author : Raz0r
Korean :
Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial
Ex) 00400000PASSWORD
English :
Unpack, and find the serial. The solution should be in this format : OEP + Serial
Ex) 00400000PASSWORD
#Contents
#Solution
[그림 1] - 실행 화면
[그림 2] - 에러 메시지 출력
임의의 값을 준 뒤 Check Serial 버튼을 눌렀을 때, 에러 메시지가 출력 됨을 확인가능하며 값을 입력하지 않아도 같은 메시지가 출력 되었다
[그림 3] - UPX
디버거로 열기 전, 주어진 지문에서 패킹이 되어있음을 알 수 있었기 때문에 어떤 패커로 패킹되었는지 확인결과 UPX로 패킹되어 있었다
[그림 4] - 언패킹
언패킹과 원본파일의 유지를 위해 d와 k옵션을 사용하여 언패킹을 진행후 아래와 같이 디버거로 열었다
[그림 5] - Original Entry Point (OEP)
프로그램의 실제 시작 주소를 의미하는 OEP가 00401360임을 확인 후, 시리얼 키는
Static으로 저장되어 있을거라 생각 후 아스키 값만 뽑아주었더니 아래와 같이 시리얼로 추측되는 값을 확인할 수 있었다
[그림 6]
아스키 값을 확인하고 해당 값을 지니고 있는 주소로 이동해 보았다
[그림 7]
시리얼 값으로 추정되는 AD46DFS547이라는 값을 가지는 주소 주변에 가보았더니
분기문(JNZ)을 통해서 서로 다른 메시지를 출력하는 어셈블리코드를 확인할 수 있었다
JNZ SHORT 06.004010A3은 TEST EAX, EAX의 결과 값으로 0이 나오지 않았을때 004010A3으로 이동후
"Wrong serial!!!" 메시지를 출력시키는 MessageBoxA함수를 호출 했으며 해당 문제는 시리얼키를 얻어 "You got it ;)" 이라는
문구를 확인하는 것이 목적이므로 메시지 박스를 출력하기 전 분기문에 브레이크포인트를 걸고 실행해보았다
[그림 8]
실행 도중 시리얼키 입력창에 임의의 값을 넣어주었고 아래와 같이 00401069 부분에 값이 들어가 있음을 확인했다
[그림 9]
PUSH된 값은, 사용자 입력 값이며 다른 하나의 값은 AD46DFS547이며 JNZ구문에서 사용자 입력값과 AD46DFS547을 비교하여 분기함을 예상할 수 있다
[그림 10]
브레이크포인트에서 F8을 통해 다음 코드로 넘어가자 TEST 명령의 결과 값이 0이 아님을 뜻하는 JNZ가 실행되어
004010A3으로 분기했고, 다음 코드로는 Wrong serial!!!이라는 메시지박스를 출력함을 알 수 있었다
이는 입력 값과 시리얼이 틀림을 알 수 있기에 시리얼 값으로 예측되는 AD46DFS547을 넣어주면 You got it ;)이라는 메시지 가 출력될 것 같다
[그림 11]
입력 값에 AD46DFS547을 넣어주었고, 예상대로 JNZ에서 분기하지 않고 바로 다음 코드로 넘어간 뒤
00401094까지 내려가고 MessageBoxA 함수가 실행되고 You got it ;) 이라는 메시지 박스를 확인할 수 있었다
'Wargame' 카테고리의 다른 글
CodeEngn Basic 8 (0) | 2017.09.25 |
---|---|
CodeEngn Basic 7 (0) | 2017.09.24 |
CodeEngn Basic 5 (0) | 2017.09.08 |
CodeEngn Basic 4 (0) | 2017.09.05 |
CodeEngn Basic 3 (0) | 2017.09.05 |