문제입니다.

임의의 Name을 넣고 실행했더니 아무 반응이 없네요 ~

PEID로 확인해보니 패킹은 되어 있지 않았습니다.

올리디버거로 열어 String 찾기를 이용하여 성공 문자열을 찾았습니다.

더블클릭해서 들어가보겠습니다.

분기문이 보이네요. break point의 call 결과로 인해 성공과 실패로 나뉘는 것 같습니다.

문제에서 Name은 한글자라고 했는데 정작 한글자는 입력이 안됩니다.

break point를 걸어놓은 곳이 Name의 문자열 개수를 확인하는 부분입니다.

이 부분을 "CMP EAX,1"로 수정하여 Name에 "A"를 넣고 진행해 보겠습니다.

결과는!!

성공과 실패를 나누기전의 call에 break point상황에서 레지스터 현황을 보니 EAX에는 제가 입력한 키값이 들어있고 EDX에는 Name값으로 생성된 키가 존재하는 것 같습니다.

위로 차근차근 F7로 call 내용을 살펴보니 수상한 곳을 발견했습니다.

무언가를 연산하고 반복하는 부분입니다.

현재 45b8c4 부분에서의 레지스터 현황을 한번 살펴보겠습니다.

EDX에 "FFE374F0"이 들어있네요

이전에 발견했던 키는 "FFE3-2C73-0502A34C-8A48-E1CB"였습니다.

쭉 실행을 시켜보면 첫번째 반복루틴에서 키의 4글자를 만들어준다는 것을 확인할 수 있습니다.

즉 "FFE374F0"중 "FFE3"은 이루틴에서 만들어지는 것이지요.

모든 문자에 대해 이 루틴을 파이썬으로 짠후 앞의 4글자만 추출해보면 될 것 같습니다.

문제에서 제공받은 키는 "BEDA-2F56-BC4F4368-8A71-870B"이므로 앞의 "BEDA"만 맞는지 확인하면 되겠습니다.

[소스코드]

[결과]

Name은 'F'였습니다.

그럼 찾은 값이 맞는지 검증을 진행해보겠습니다.

맞았습니다.

문제에서 찾은 Name을 MD5 대문자로 사이트에 인증하라고 했기때문에 MD5로 변환했습니다.

이 값을 제출하면 !

Basic RCE L17 성공!

'WAR GAME > CodeEngn(Basic)' 카테고리의 다른 글

Basic RCE L19  (0) 2020.04.29
Basic RCE L18  (0) 2020.04.29
Basic RCE L16  (0) 2020.04.29
Basic RCE L15  (0) 2020.04.29
Basic RCE L14  (0) 2020.04.29

+ Recent posts