안녕하세요. 이번엔 누락된 부분 인 basic rce level 5를 풀어보겠습니다. 홈페이지로 들어가 파일을 받아서 실행해봅시다.

등록키를 알아내는 문제입니다. 올리디버그로 열어봅시다.

PUSHAD로 적혀있는것을 보아 UPX패킹되어있을 확률이 높습니다. EXEINFO PE로 확인해봅시다.

UPX로 패킹되어있군요. UPX패커로 풀어줍시다.

풀었으면 파일을 올리디버그로 열어봅시다. 그리고 아까 보인 실패문구열(WRONG...)을 찾기 위해 오른쪽마우스 - Search for - All referenced text strings를 누릅시다.

문구열을 찾아봅시다.

찾았습니다. 들어가봅시다.

코드를 실행해보니 저기 JMZ가 분기점인 모양입니다. ZF가 0이면 점프를 하여 실패문구열로 가버리는 놈입니다. 그런데 ZF를 결정하는 비교문이 없습니다. 아무래도 바로 위 코드에서 호출하는 부분에 있는 모양입니다. 브레이크를 걸고 실행해봅시다. 등록키값은 그냥 12345로 줍시다.

브레이크에 걸리면 F7키를 이용해 따라가 봅시다.

EAX와 EDX를 비교해서 같으면 JE를 이용해 점프를 합니다. 점프를 하게 되면 바로 RETN부분으로 가며 ZF도 1인 상태로 가게 됩니다. EAX와 EDX의 값을 확인해봅시다.

EAX는 Unregistered...이고 EDX는 Registered User이군요. Unregistered...는 우리가 창에서 본 첫번째 입력칸에 적혀 있는 문구입니다. 그렇다면 이 부분을 Registered User로 고치고 실행해봅시다.

값을 바꾸고 실행해봅시다.

ZF가 1이 반환되어 JNZ에서 점프를 하지 않는 것을 하지 않는 것을 알 수 있습니다. 계속 한줄씩 실행해봅시다.

더 말이 필요하겠습니까? 403B2C로 들어갑시다.

마찬가지로 EAX,EDX를 비교합니다.

12345는 입력한 값, 비교하는 값은 GFX-754-IER-954이군요. 해봅시다.

성공이군요. 등록키를 입력해봅시다.

네 이것으로 문제해결을 마치겠습니다.

 

'codeengn' 카테고리의 다른 글

codeengn - Advance RCE level 1  (0) 2016.08.03
codeengn - basic rce level 6  (0) 2016.08.02
codeengn - basic rce level 20  (0) 2015.10.02
codeengn - basic rce level 19  (0) 2015.10.02
codeengn - basic rce level 16  (0) 2015.10.02
Posted by englishmath
,