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

이번 Lena의 7장 강의에서는 Olly와 PEiD 툴을 사용하며 아래 주소에서 무료료 받아볼 수 있다.
Ollydbg : http://www.ollydbg.de
PEiD : http://peid.has.it

PEiD는 PE 파일이 어떤 packer, cryptor, compiler등이 사용되었는지 쉽게 확인할 수 있는 Tool로 이번 예제의 파일을 PEiD로 로딩해 보면 아래와 같은 화면을 볼 수 있다.

현재 프로그램이 packing 되어 있지 않으며 MS Visual C++ 7.0을 이용하여 개발된 것을 알 수 있다.

그럼 프로그램을 실행시킨 뒤 이번 연습문제에서 어떤 점을 제거해 나가야되는지 알아보자.


프로그램 실행 뒤 TItle을 보면 "MrBills [Unregistered]" 라는 문구를 볼 수 있다. 또한 About -> Register를 누르면 정식등록을 위하여 이메일과 License Number를 넣는 것을 알 수 있다. 임의의 이메일과 License number를 넣고 "Register Now"를 누르면 위와 같은 에러 메시지가 나타나는 것을 알 수 있다.

Olly에서 Search for → All referenced text strings 기능을 이용하여 잘못된 이메일과 라이센스 번호를 입력했을 때 나타나는 문구를 찾아보자.

위와 같이 쉽게 해당 문자열을 찾을 수 있다. 더블클릭하여 해당 주소로 이동해 보자.

④번 에서 해당 메시지를 볼 수 있으며, 조금 밑에 ⑤번에서 정상적으로 등록이 될 경우 나타나는 것으로 추정되는 메시지를 볼 수 있다. 두 메시지 중 어느 것이 선택될 것인지 결정하게 되는 조건분기문은 ③번의 JNZ 문에 의해서 결정되는 것을 알 수 있다.
(여기서 단순히 JNZ 구문을 JMP로 변경하여 항상 ⑤번으로 분기하게 만들 수 있지만 실력향상에 도움이 되지 않는다. 좀 더 스마트한 방법을 연구해 보자)
JNZ 문은 ②번에 있는 TEST AL, AL에 의해서 분기 여부가 결정되며, AL 레지스터의 값은 ①번에서 호출되는 함수에 의해서 결정되는 것으로 유추해 볼 수 있다. ①번 함수 호출에 BP(Break Point)를 걸고 함수가 어떻게 작동되는지 살펴보자.

함수안으로 Step-in(F7)해서 F8을 누르면서 진행해보면 위에서 표시한 곳에서 함수가 CALL된 이후에 AL의 값이 0으로 셋팅되는 것을 볼 수 있다. 이번에는 BP를 걸고 Step-in을 이용하지 않고 해당 함수에서 Enter를 눌러 프로그램을 진행하지 않고 호출되는 함수를 살펴볼 수도 있다.

위에 표시한 부분에서 AL의 값이 0으로 셋팅되는 것을 알 수 있다. 다시 함수안으로 Stop-in해보자.

Step-in한 후에 AL 레지스터의 변화에 유의하면서 프로그램의 진행을 보자. 첫번째 표시한 부분에서 AL의 값이 1호 셋팅되는 것을 볼 수 있다. 이 후 두번째 표시한 곳에서 MOV AL, BL 명령에 의해 AL의 값이 0으로 셋팅되는 것을 볼 수 있다.

MOV AL, BL 부분을 위와 같이 AL 값을 항상 1로 설정하도록 변경해보자. 다른 방법으로는 MOV BL, 1 또는 NOP 처리를 해도 결과는 같다. 명령어를 변경한 후 프로그램을 진행해 보자.

위와 같이 정상적으로 등록이 되는 것을 볼 수 있다. 프로그램의 타이틀도 Unregistered 부분이 없어지고 Register 버튼도 비활성화되는 것을 볼 수 있다.

이번 Lena의 강의에서는 프로그램 패치시에 조건분기문을 정상적인 흐름으로 강제분기하도록 하는 방법에서 벗어나서 조건분기문 자체의 변경없이 분기를 하게 하는 원인 값(레지스터)을 찾아 프로그램의 흐름을 분석하여 해당 부분을 변경해 주는 방법이다. 리버싱 역시 알아갈 수록 점점 재미있고 방대한 분야인 듯 하다. :) 아무튼 이번 강의도 finish!!

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