'lens's tutorial 11'에 해당되는 글 1건

  1. 2010.03.28 [Reversing With Lena] lena's tutorial 11 풀이 (2)

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

이번 Lena의 11장 강의에서는 프로그램 crippled program(라이센스 등으로 사용의 제한이 있는 프로그램)을 patch 하는 방법을 보여준다.

Ollydbg : http://www.ollydbg.de
PEiD : http://peid.has.it

2. 분 석
먼저 PEiD를 이용하여 바이너리 파일에 대한 정보를 살펴보자.

Visual C++ 7.0으로 개발되었으며 패킹은 되어 있지 않다는 것을 알 수 있다.
Olly를 이용하여 프로그램을 로딩한 뒤 프로그램의 큰 흐름을 보도록 하자.

특정 기능을 사용하기 위해서는 등록 절차가 있어야 된다는 것을 알 수 있다. lena의 강의에서는 프로그램의 타이틀 부분에 Unregistered라는 문구가 있었으나 본인이 실행했을때는 그런 문구가 나타나지 않았다. 프로그램 분석은 Unregistered 문구가 있는 것을 가정하고 진행할 것이다.

일단 Olly에서 Search for -> All referenced text strings를 이용하여 Unregistered 문구를 찾아보자.

프로그램의 타이틀에 나타나는 문구를 찾은 뒤 더블클릭하여 해당 문구로 이동해 보자.
먼저 프로그램의 타이틀 부분에 "(unregistered)"구문이 있는 부분과 없는 부분에 대한 분기가 ③번의 JE 구문에서 이루어지는 것을 볼 수 있다. 따라서 간단하게 ②번의 TEST 구문을 NOP 처리하면 쉽게 문제를 해결할 수 있지만 좀 더 스마트한 patch 방법을 찾아보기로 한다. ①번 구문에서 ESP+4의 값을 AL 레지스터에 복사하는 것을 볼 수 있다. 이 후 TEST AL, AL 비교를 통하여 분기 여부가 결정된다. ①번 구문에 BP(Break Point)를 걸고 프로그램을 실행해보면 현재 구문이 호출되기 전에 이미 ESP+4의 값이 0으로 설정되는 것을 알 수 있다. 그렇다면 ESP+4의 값을 0으로 설정하는 곳을 찾아보자.

함수의 시작되는 부분을 선택하면 위 그림과 같이 해당 함수를 호출한 곳을 볼 수 있다. 총 두 군데서 호출되는 것을 볼 수 있으며 호출하는 곳으로 모두 이동하여 BP를 설정한다. 이 후 다시 프로그램을 로딩하자.

첫 번째 BP를 설정한 부분을 보면 해당 함수를 호출하기 전에 이미 AL 레지스터의 값이 00으로 설정된 것을 볼 수 있다. 또한 함수가 호출되기 전에 PUSH EAX 구문을 통해 EAX의 값을 스택에 저장하는 것을 볼 수 있다. 그렇다면 PUSH 구문의 바로 위에 있는 함수호출을 통해서 AL 레지스터의 값이 설정되는 것이 아닐까 의심해 볼 수 있다. 따라서 PUSH 구문 바로 위의 CALL 구문에 BP를 설정한 뒤 다시 프로그램을 로딩해 보자.

의심되는 함수까지 프로그램을 실행한 뒤 Step-in(F7)을 이용하여 해당 함수를 살펴보면 위와 같이 XOR AL, AL 구문에서 AL 레지스터의 값이 0으로 셋팅되는 것을 알 수 있다.

따라서 XOR AL, AL 구문을 AL 레지스터의 값을 항상 1로 설정하기 위해 MOV AL, 1로 변경한 뒤 저장한다. 이후 다시 프로그램을 실행해 보자.

위와 같이 등록이 안되어 있어서 사용이 제한되었던 기능까지 사용 가능한 것을 알 수 있다.

3. 결 론
이번 lena의 강의에서는 crippled program의 제한된 기능을 리버싱을 통한 patch를 통하여 제한된 기능까지 사용할 수 있게 만들었다. 명령어의 단순 NOP 처리가 아닌 프로그램 흐름을 분석을 통해 해당 구문을 찾아 patch를 실행하는 부분까지 설명되었다. 프로그램의 구조나 흐름 분석의 경우 많은 경험이 있어야 쉽게 가능할 듯 하다.

                                                                +---------------------------------+
                                                                | Infinite Flow..                              |
                                                                | mail : geekspark@gmail.com         |
                                                                | Blog : http://sinun.tistory.com       |
                                                                | CISSP                                        |
                                                                +----------------------------------+

저작자 표시 비영리 변경 금지
신고
Posted by By. PHR34K