Reversing/WriteUp

[Reversing.kr] Replace

BadSchool 2017. 2. 21. 00:51

문제사이트 : Reversing.kr

문제이름 : Replace

링크 : http://reversing.kr/challenge.php


풀이


↑프로그램을 실행하고 Check 버튼을 누르면 나오는 화면

문제의 시작부터 상당히 불친절하다.ㅎㅎ


↑올리디버거로 보아하니 이 부분에서 오류가 난다. 아마도 EAX값과 같은 메모리 주소가 없어서 예외처리가 나는것으로 보인다. 90은 NOP인데, 아마도 correct로 가지 못하게 하는 코드부분의 주소값을 이 부분에서 NOP처리하게 만들면 정상실행이 될 것 같이 보인다. 

(correct로 가지 못하게 하는 점프문은 401071이다)



↑물론 이렇게 직접 EAX값을 수정해 주면 Correct를 볼 수 있다. 하지만 문제는 우리가 무슨값을 입력해야 Correct가 나오는지 알아야 하기 때문에 의미가 없다고 할 수 있다.



↑일단 우리가 입력한 값이 어떻게 변화하는지 보기위해 BP을 걸고 확인하여 보았다.

입력한 값은 4084D0 이라는 곳에 저장이 된다.



↑쭉 넘어가 보니 몇몇 연산들이 보였다.

대충 보자면 함수들을 호출하여 4084D0에 INC를 해주는 모습이다. 순서를 따져보자면

입력한 값 + 0x1 + 0x1 + 0x601605C7 + 0x1 + 0x1

으로 정리해 볼 수 있다.

즉 정리해 보자면

입력한값 + 0x601605CB = 0x401071 이다.

계산기 조금만 뚜드려 보면 답을 알 수 있다.