#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

+ Recent posts