안녕하세요. 오늘은 basic rce level 12를 풀어보겠습니다.

홈페이지로 들어가 basic rce level 12를 눌러주세요.


key값과 주소영역을 찾으라는 군요. 

파일을 받아 열어봅시다.

아무래도 key값을 알아내야 하는 모양입니다. 올리디버그로 열어봅시다.

패스워드나 key, 시리얼 값을 알아낼 때에는 문자열을 보시는 것이 좋습니다. 문자열을 한 번 봅시다.

위와 같이 보시면 올바른 키를 찾았다며 축하해주는 메세지가 있습니다. 더블클릭하여 자세히 봅시다.

문구의 위쪽에 보시면 CMP 비교함수가 있습니다. EAX와 7A2896BF를 비교한다는군요.

즉 EAX-7A2896BF를 해서 0이 나오면 jnz가 인식하고 바로 아래로 넘어갑니다.

만약 위의 차가 0이 아니라면 jnz는 성공문자열을 뛰어넘은 00401098로 이동시켜줄 것입니다.

그렇다면 EAX값은 얼마가 되어야 할까요? 7A2896BF를 빼서 0이 나와야 하니 EAX값은 7A2896BF가 되겠지요. 7A2896BF은 16진수이므로 10진수로 고쳐줍시다. 2049480383가 나오네요. 그러면 이제 EAX가 뭔지 알아야겠죠? cmp 부분에 브레이크를 걸고 프로그램을 실행시켜 10이란 값을 넣어보겠습니다.

check버튼을 누르셨으면 이제 CMP쪽에 멈출것입니다.

EAX값을 확인해 봅시다.

A가 나오네요. 입력한 값이 EAX값인 것을 알 수 있습니다.

그러면 이제 다시 실행시켜 2049480383를 입력해 봅시다.

성공메세지가 나오는군요. key 값은 2049480383입니다. 그런데 이 성공메세지 대신 key값이 나오도록 hexedit로 수정하라는 군요. hexedit로 열어봅시다.

성공메세지가 있는 쪽을 블럭잡았습니다.

수정시켜 줍시다. 문제는 값을 넣을때 16진수아스키코드를 넣어야 합니다.

즉 2라는 값을 넣을 때에는 그에 맞는 16진수아스키코드인 32를 넣어줘야 합니다.

그럼 차례대로 넣어봅시다.

차례대로 넣고 남은 부분은 그냥 0으로 채워주시면 됩니다. 자 그러면 이제 0x???? ~ 0x????의 값을 알아내야겠죠?

열을 보시면 총 16개가 있습니다. 그리고 번호는 이렇습니다.

0 1 2 3 4 5 6 7 8 9 A B C D E F

32부터 시작하므로 00000D30의 B 즉 000000D3B가 시작점입니다. 0x????라고 표현했으니까 4자리만 뽑아오면 0x0D3B가 됩니다.

자 그러면 끝은 어디일까요? 보통 정상적으로 33이 끝이라고 생각합니다. 하지만 여기엔 Null이 있습니다. 문자열의 끝을 알리는 Null은 16진수로 00을 의미합니다. 즉 끝은 33이 아닌 Null을 포함한 00. 즉 0D45가 마지막입니다.

그러면 영역은 0D3B ~ 0D45 까지 입니다. key값은 2049480383이므로

합치면 20494803830D3B0D45입니다. 인증을 해 봅시다.

네 이것으로 문제풀이를 마치겠습니다.

'codeengn' 카테고리의 다른 글

codeengn - basic rce level 14  (0) 2015.08.18
codeengn - basic rce level 13  (0) 2015.08.12
codeengn - basic rce level 11  (0) 2015.08.12
codeengn - basic rce level 10  (0) 2015.08.05
codeengn - basic rce level9  (0) 2015.08.05
Posted by englishmath
,