Wargame/codeengn

[codeEngn] Basic RCE level05

1q 2015. 7. 28. 19:03

level05의 힌트를 보면 등록키를 물어보네요.


실행을 하면 인증과정이 나옵니다. 일단, 등록되지 않은 사람과 시리얼 키 값이 입력이 되있고 등록을 해보면 False가 나옵니다. 유추를 해보자면 정확한 user와 registration key를 가져와서 입력해야 하는 루틴이 있을 겁니다.

Exeinfo PE로 본 결과 UPX로 패킹이 되어있네요.


UPX의 대명사 PUSHAD가 보입니다. 이런 UPX는 쉽게 우회할 수가 있습니다.


코드가 짧기 때문에 맨 밑을 보면 JMP가 있을 겁니다. 그 부분을 BP걸고 들어가 봅시다.


메인 화면이 나오네요. 여기서부터 분석을 시작하면 되는데, 하다가 오류나면 처음부터 다시 해야하니까 스냅샷을 찍는 것을 추천드립니다. 또한 덤프를 뜨는 방법도 추천드립니다. 


아까 오류창에 뜬 문자열을 타고 들어가서 BP걸고 실행을 해보니 실행을 하네요. 일단, 어떻게 동작하는지 알아보기 위해서 오류 값을 그대로 넣고 트레이싱 해보겠습니다.


이 두부분은 EditText값에 문자열이 있는지 없는지 확인하는 루틴입니다. 하나라도 비어있다면 바로 오류가 납니다.


위의 부분을 넘어가면 아래 루틴이 보이는데 첫 번쨰로 [LOCAL.1]부분(인자로 줬던 USER값)을 옆의 아스키 코드 "Registered User"와 비교합니다. 여기서 비교하는 루틴을 알 수가 있습니다.


그 밑의 부분도 똑같습니다. 시리얼 값을 입력한 것과 비교하네요. 답은 박스 안에 있습니다.


값이 일치하다면 아래와 같이 성공, 실패 루틴으로 나눠집니다.


아스키 코드를 그대로 입력했더니 성공을 하네요.