리버싱 핵심원리(소위 나뭇잎책)에서의 레나 리버스미 문제 풀이를 책을 따라가 보며 풀어보았다. 분석은 책에서 쓰인 올리디버거를 사용하였다. Tut.ReverseMe1 문제는 처음에 Nag Screen이라는 박스가 뜨고 확인을 누르면 다음 창이 뜬다. 이게 다음 창인데, 여기서 Regcode를 맞춰서 Register me 버튼을 누르는 비밀번호 문제인 것 같다. Nag Screen 메시지창의 뜻은 모든 Nag?를 삭제(무시)시키고 올바른 registration code를 찾아라는 뜻이다. 메인 창에서도 Nag?버튼을 누르면 다시금 Nag Screen창이 뜨게 된다. 우선 책도 그렇고 문제에서 요구하는 것도 그렇고 Nag창을 없애기 위해 Nag창 부터 찾아봐야겠다. 버튼들이 있는 윈도우 폼인것을 봤을 때 버튼을 눌렀을 때 행동하게 되는 버튼 리스너 등의 처리가 있을 것이다. Nag?버튼을 눌렀을 때 Nag메시지 창이 떴던 것을 생각하면, 어떤 메시지 박스를 띄우게 하는 함수들이 있을 것이다. Search for - All intermodular calls 에서 찾아보았다. 모듈 Tut.ReverseMe1의 함수 콜 목록에서 rtcMsgBox함수를 호출하는 곳이 4군데 보인다. 4군데 다 bp를 걸어두고 Nag? 버튼을 눌러보자 bp를 건 곳중에 한군데에서 걸렸다. 이 어셈이 있는 곳에서 Nag 메시지 박스를 띄우게 하는 내용들이 있을 것이다. 좀 위를 봐보자. Nag 메시지 창에서 보았던 문자열 내용들이 있다. 이곳이 Nag 메시지를 띄우는 곳인것을 확정할 수 있다. 좀 더 올려보면 이곳 자체도 함수로 되어있는 것을 볼 수 있다. 단순히 Nag메시지 박스를 띄우지 않게 하려면 rtcMsgBox함수를 호출하지 않게 하면 된다. 함수 호출 부분을 다시 보면, 함수 호출 이후 스택을 따로 정리하지 않는 모습을 볼 수 있다. 이를 보면 함수의 호출 규약은 stdcall방식인 것을 볼 수 있다. ...
댓글
댓글 쓰기