'리버싱'에 해당되는 글 12건

  1. 2010.02.25 [Reversing With Lena] lena's tutorial 04 풀이

* 예제 문제 및 강의 내용 출처 : http://tuts4you.com lena로 검색

계속해서 lena's tutorial 4번에 대해서 알아보도록 하자.
일단 Olly로 프로그램을 열어 프로그램의 흐름을 보도록 하자.

3개 이상의 그룹을 추가하려고 하면 "You've reached the limit of 3 groups" 라는 경고와 함께 프로그램을 등록하라는 메시지가 출력된다.

마찬가지로 각 그룹의 5개 이상의 엔트리를 등록하려고 하면 "You've reached the limit of 4 entries per group"이라는 경고와 함께 프로그램을 등록하라는 메시지가 출력된다.

이번 tutorial 에서는 string 검색을 통해서 해당 함수가 실행되는 주소를 찾아가는 등의 방법을 사용하는 것이 아닌 "Back to user mode"를 이용하여 해당 메시지를 출력한 함수를 찾아가게 된다. "Back to user mode"란 특정 이벤트를 일어나기 전에 설정해두고 Call 명령이 일어난 바로 다음 위치를 잡을 수 있게 하는 방법이다. 사용 방법은 다음과 같다.
1. Olly로 프로그램 로딩
2. 프로그램 실행(F9)
3. 프로그램을 메시지 창 출력과 같은 정지 상태로 만든다.
4. Olly의 일시정지 버튼을 누른다.(F12)
5. back to user mode(Alt+F9) 설정
6. 프로그램에서 이벤트 발생(메시지 창의 확인 버튼 클릭)
7. Olly에서 해당 부분에 커서가 이동되는 것을 확인

일단 그룹의 제한을 체크하는 부분을 찾기위해 4개 이상 그룹 추가시 발생하는 부분에서 back to user mode로 설정한다.

이어서 확인 버튼을 클릭하면 확인버튼을 클릭한 이후의 부분으로 커서가 이동하는 것을 볼 수 있다. 커서가 이동된 POP ESI 및에 있는 RETN 명령어의 경우 현재 함수를 호출한 주소 명령어로 복귀하게 된다. 따라서 Step-over(F8)을 이용해서 현재 함수를 호출한 부분으로 이동해 보자.

커서가 이동한 004008B1D 위의 명령어를 보면 CALL 명령어를 통해 경고창을 출력하는 함수를 호출하는 것을 볼 수 있다. 그렇다면 함수가 호출되는 부분을 건너뛰게 되면 그룹의 3개가 등록되어 있는지 검사하는 부분을 생략하게 될 것이다. 00408B08 주소의 명령어를 보면 JL(jump if less)명령어를 이용하여 위에서 비교한 값이 작을 경우 jump를 하게 된다. 따라서 비교 구문을 JL(조건 분기문)에서 JMP(무조건 분기)으로 변경하면 경고창을 발생시키는 함수를 생략하게 되는 것을 알 수 있다.
변경 하는 방법은 해당 명령어를 더블클릭하면 위와 같은 창이 생성되고 JL을 JMP로 변경한다. 이후 Assemble을 클릭해 준다. 변경된 부분이 빨간색으로 변경되는 것을 볼 수 있다.

변경한 부분을 저장하기 위해서는 마우르 오른쪽 버튼 클릭 -> Copy to executable -> All modifications -> Copy all -> 마우스 우 클릭 -> Save file을 선택한다.

그룹당 엔트리 수를 4개로 제한해 놓은 부분도 위의 방법대로 Back to user mode를 사용하여 조건 분기 부분을 JMP 구문으로 변경해 주면 쉽게 크랙이 가능하다.

하지만 아직도 Unregisterd 라는 거슬리는 단어들이 많이 눈데 띈다. 해당 부분을 변경해보도록 하자.

Olly 메뉴중에 "M"(Memory map)을 클릭하여 메모리 덤프창을 띄운다. 화면에서 마우스 우클릭하여 Search를 선택. UNICODE 부분에 우리가 찾고자 하는 문자열인 Unregister를 입력한뒤 OK를 클릭한다.

검색 결과 위와 같이 문자열을 찾을 수 있다. 문자열이 시작하는 주소를 기억한 뒤 CPU 창의 Memory dump를 보여주는 부분에서 마우스 우클릭 -> Go to -> Experssion 을 선택한 뒤 문자열이 시작하는 주소(004D4830)을 입력하여 해당 주소로 이동한다.

메모리덤프 부분에서 변경하고자 하는 부분을 선택한 뒤 우클릭 -> Binary -> Edit를 선택한다. 위와 같이 문자열을 Registerd로 변경해 준 뒤 OK를 클릭한다. 변경된 내용을 저장하기 위해서 메모리덤프 부분에서 우클릭 -> Copy to executable file -> 새로뜬 창에서 우클릭 -> Save file을 선택한다.

위 과정을 반복하면 Unregistered 라고 거슬리는 문구들을 모두 마음대로 변경할 수 있다.

                                                                +-----------------------------+
                                                                | Infinite Flow..                               |
                                                                | mail : geekspark@gmail.com       |
                                                                | Blog : http://sinun.tistory.com     |
                                                                | CISSP                                         |
                                                                +------------------------------+
저작자 표시 비영리 변경 금지
신고
Posted by By. PHR34K