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

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

OEP와 stolenbyte를 찾으라네요. stolenbyte는 앞서 문제에서 한번 봤지만 한 번 더 설명하면 훔쳐진 바이트입니다.

자 그러면 파일을 받아 봅시다.

어디서 많이 본 문구네요. 음 한번 올리디버그로 열어 봅시다.

맨 위가 pushad로 되어있네요. 패킹되었을 확률이 높습니다. 앞서 level 10에서 설명드렸다 시피 pushad로 패킹된 프로그램은 popad로 풀었을 수도 있습니다. popad를 찾아봅시다.

오른쪽 마우스를 눌러 다음과 같이 들어갑니다.

 popad를 쳐주시고 find를 눌러줍시다.

 딱 한개가 나오는군요, 한번 더블클릭 해줍시다.

OEP를 알아내기 위해 전부 브레이크를 걸고 실행해보겠습니다.

실행을 하시면 아래와 같이 문자열이 뜨는군요.

계속 실행을 해봅시다. 중간에 반복되는 부분이 있군요. 그래서 반복되는 부분은 브레이크를 해제하게습니다.

맨마지막 줄까지 왔습니다. 이제 맨마지막줄을 실행해봅시다.

맨마지막줄까지 하니 프로그램이 실행되는 것을 볼 수 있습니다. 즉 맨마지막에 보시면 JMP 0040100C 라고 적혀있는 걸로 보아 0040100C가 OEP라고 볼 수 있습니다. OEP를 한번 봅시다. 오른쪽 마우스 follow를 눌러줍시다

.

음 뭐라고 하는지 모르겠네요. 실행버튼을 눌러줍시다.

예 지금 보니까 0040100C에서 시작하는 것이 확실해 지는군요. OEP는 0040100C입니다.

그리고 이젠 stolenbyte를 찾아야 합니다.stolenbyte는 훔친 바이트란 뜻이죠. 즉 빼돌린 바이트를 의미합니다. 지금 OEP부분에서 빠진 것이 보이나요?
그렇죠. 문자열 하나가 빠졌습니다. 어떤 문자열일까요?

이 문자열이 빠졌습니다. 그러면? 이 문자열을 찾아야겠죠. 오른쪽 마우스를 눌러 아래와 같이 들어갑시다.

 눌러주시면 아래와 같은 그림이 뜹니다.

빠진 문자열이 보이는군요. 더블클릭 해줍시다.

빠진 문자열은 두개이지만 앞서 문제에서 앞의 PUSH 0까지 넣었던 적이 있었기 때문에 이번에도 넣어서 해보겠습니다. stolenbyte는 6A0068002040006812204000입니다.

OEP까지 넣어야 하므로 0040100C6A0068002040006812204000 이겠네요. 한번 인증해 봅시다.

아니라는군요. 그렇다면 앞의 PUSH 0을 빼봅시다.

0040100C68002040006812204000을 인증해봅시다. 그런데? 이것도 안됩니다. 뭐가 잘못됐나 하면서 계속 헤맸습니다. 그리고 몇번의 삽질 후에 저는 OEP가 틀렸다는 것을 알 수 있었습니다.

0040100C위쪽을 보시면 NOP라고 나와있습니다. 그런데 NOP가 원래 아무 뜻도 없지만 하나당 1바이트를 차지합니다. 총 세어보니 12바이트가 나오더군요. 그런데? 앞의 6A0068002040006812204000을 1바이트씩 나누어보면

6A 00 68 00 20 40 00 68 12 20 40 00 총 이렇게 12개가 나옵니다. 그렇다는 것은 원래 NOP부분에 이 stolenbyte가 들어가져 있었다는 뜻이 됩니다.

만약 원래로 복구시킨다면 실질적 OEP는 0040100C가 아닌 00401000이 되겠지요. 00401000을 넣어서 해봅시다.

004010006A0068002040006812204000을 입력해줍시다.

다음문제로 넘어가는 것으로 보아 정답인 것 같습니다.

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

'codeengn' 카테고리의 다른 글

codeengn - basic rce level 13  (0) 2015.08.12
codeengn - basic rce level 12  (0) 2015.08.12
codeengn - basic rce level 10  (0) 2015.08.05
codeengn - basic rce level9  (0) 2015.08.05
codeengn - basic rce level 8  (0) 2015.08.05
Posted by englishmath
,