URL : https://ch.codeengn.com/
실행시켜보면
그러면 'MSVBVM50.DLL'를 다운로드해줄 필요가 있다.
Download : https://ko.dll-files.com/msvbvm50.dll.html
다운로드 버튼을 누르고 압축 해제하자.
그러면 3개의 파일이 보이는데 .DLL 파일 빼고 다른 건 현재 문제 푸는 데에는 필요가 없다.
.DLL 파일을 드래그 앤 드롭으로 03.exe가 있는 데에 넣어주자.
그러면 03.exe 파일을 실행시켜주자
그러면 아까와 다른 메시지가 뜨는 걸 확인할 수 있다.
변역하면 "이 잔소리를 제거하거나 올바른 암호를 얻으십시오!" 라는 뜻이다. (왜 독일어로 되어있지..?)
확인을 누르자
그러면 아까 창을 제거하거나 요기 Regcode 암호를 얻으라는 말이다.
아무거나 넣으면 이렇게 "오류! 비밀번호가 틀립니다!" 라는 메시지가 나온다.
자 이제 OllyDbg 도구를 이용해서 뜯어보자!
뜯어보면 저번의 문제 1,2번이랑 다르게 시작 지점이 이상하다.
문제를 보면 스트링 비교 함수 이름을 찾아보라고 한다.
따라서 우린 비교하는 함수를 찾을 필요가 있다.
어셈블리코드 창에다가 우클릭 -> Search for -> All intermodular calls 를 클릭 해준다.
그럼 이렇게 많은 함수들이 보이게 되고 이 중에서 비교 함수 이름을 찾으면 된다.
어떻게 찾냐고?
저번에 문제 1번에서 CMP가 무엇을 뜻하는지 아는 사람은 쉽게 뭘 찾아야 할지 알 수 있을 것이다.
까먹으신 분들을 위해 다시 한번 말하면
CMP는 쉽게 말하면 '비교' 한다는 뜻이고 정확히는 '두 피연산자를 비교하는 작업'을 말한다.
따라서 CMP가 있는 글자를 찾아보자.
찾은 거 같다.
더블 클릭해서 이동하자
위로 스크롤을 좀 올려보면
바로 이 세 줄이 입력받은 문자열을 비교한다는 거다.
확실하게 알기 알아보자
<F2> 키를 눌러 'break point' 걸어보자
그러면 이렇게 빨간색으로 나탄 난걸 확인할 수 있다.
<F9> 키를 눌러 'break point' 까지 실행 시켜보자
처음 실행한 메시지 박스가 똑같이 나오고
확인을 누르자
똑같이 나오고
여기서 아무거나 입력 해보자
이렇게 스택에 내가 입력한 값이 저장한다는 것을 확인할 수 있다.
계속 실행시켜 보자..
그러면 내가 입력 한 '1234' 의 값과 '2G83G35Hs2' 값이 똑같은지 비교를 할 것이고
같지 않기 때문에 ZF(Zero Flag)가 0이 된다. (같으면 반대로 1이 되겠죠? ㅎㅎ)
나머지 위에 코드는 해석하기 귀찮기 때문에 여러분들이 알아서 찾아보자
코드를 보면 DI SI 를 비교한다고 되어 있고
다음코드(JE)는 같으면 점프 한다고 했기 때문에
레지스터 ESI 와 EDI 를 보면 값이 같다.
그러면 점프 하겠죠?
그러면 딱봐도 저기 보이는 성공 메시지를 점프 해버린다.. ㅠㅠ
따라서 실패 메시지 박스를 볼 수 있다.
자 이제 문제를 풀어보자
눈치 챘는분들도 있겠지만
정답은 바로 여기에 있다.
<Ctrl+F2>를 눌러 초기화 시켜 문자열 입력을 다시 저기에 있는 문자로 입력해 보자
계속 실행시켜 보자..
아까와 다르게 ZF(Zero Flag)가 1인 걸 알 수 있다.
계속 실행시켜 보자..
아까와 다르게 SI와 DI 값이 다른 걸 확인할 수 있다.
따라서 값이 다르므로 점프하지 않는 걸 확인할 수 있다.
계속 실행시켜 보자..
그러면 "감사합니다 비밀번호가 정확합니다" 라는 메시지 박스를 볼 수 있다.
'【 리버싱 】 > [ CodeEngn ] Basic RCE 문제 풀이' 카테고리의 다른 글
[ CodeEngn ] Basic RCE 6 문제 풀이 (0) | 2021.07.21 |
---|---|
[ CodeEngn ] Basic RCE 5 문제 풀이 (0) | 2021.07.19 |
[ CodeEngn ] Basic RCE 4 문제 풀이 (0) | 2021.07.19 |
[ CodeEngn ] Basic RCE 2 문제 풀이 (0) | 2021.07.17 |
[ CodeEngn ] Basic RCE 1 문제 풀이 (0) | 2021.07.15 |