늘모자란, 개발 :: [wargame.kr] Challenge 23 - keypad CrackMe

늘모자란, 개발

Simple Reverse Engineering Challenge.


리버싱 문제는 풀 생각이 없었지만 어쩌다가 첫 문제를 풀었기때문에 이번에도 할 수 있지 않을까 하는 생각이 들어서 시도해보게 되었다
첫번째 문제와 마찬가지로 entry point를 찾기 위해 string을 조회해 엔트리 포인트를 찾아냈다.

버튼은 되게 많은데 사실 리버싱에서 버튼이란게 의미가 있나 싶기도...
어쨌든 AUTH의 이벤트에 대해서 확인을 하기위해 이렇게 수행했다
엔트리 포인트는 01051745 였다

여기서 보다보니

0BADBABE 라는 값을 cmp 하고 있는걸 발견했다.

>>> 0xBADBABE
195934910


물론 이대로 입력하니 안된다.



찾아보니 JE는 IF처럼 쓰이는것이라고 한다. 실제로 화살표가 쳐줘서 맞는 값이면 congrats... 로 이동하게 되어 있다.
그럼 195934910 이란 값과 비교하고 있는 EDI가 뭔지 알면될 것 같다.

바로 위를 보니
ADD EDI,EAX
라고 되어 있었다. 즉, 순서대로 가보면 EDI에 EAX를 더한값이 195934910 이 되야 한다는것.

여기까지 보고 든 생각이 그럼 195934910 부터 적당히 한자리쯤 빼고 더하기 올리면 되는거 아닌가 이생각을 했는데,
서버 페이지에 sleep 이 걸려있다. 것도 한 1초는 되는것 같다. 날 샐거같으니 권하지 않는다. 꼼수말고 정공법으로...ㅠㅠ

처음엔 입력하는 값이 아무 상관없는 줄 알았다. 그래서 JE를 JMP로 바꿔서 어셈블시켜보고했는데 계산값을 보내기 때문에 결국 정답이 필요하다.
그런데, 195934910 값을 입력 후 break point를 걸면 EDI값을 알아낼 수 있지 않을까? 생각했고
EDI 값이 나왔다.

그래서 195934910 값에서 EDI를 빼서 차를 구한후, 이 값을 다시 195934910 에 더해줘서 입력하니 패스되었다.
헤매고 있다가 한번의 입력으로 왠지 구원받은 느낌... 그래서 브레이크 포인트엔 스스로 잘 접근한것 같다.
2016/06/13 22:53 2016/06/13 22:53