-
[Lenas Reversing for Newbies] 16Wargame/Lenas Reversing 2021. 3. 8. 15:07
이번 실습에서는 다음 두 가지 프로그램을 패치한다.
- URLegal
- GIF Movie Gear
1. URLegal
(1) 프로그램 실행
첨부된 파일을 이용하여 URLegal을 설치한 후 실행하고, 종료 버튼을 누르면 다음과 같은 등록을 독촉하는 대화 상자 창이 나타난다.
실행화면 응용 프로그램의 리소스 관련 편집 도구인 exeScope를 통해 어떤 대화상자가 나타나는 것인지를 파악하고, 대화 상자를 생성하는 코드로 이동하여 조건을 적당히 수정하여 프로그램이 등록된 것으로 인지하도록 패치해보자.
(2) Debugging
eXeScope로 URLegal 파일을 열어보자.
eXeScope 실행 위와 같이 Resource -> Dialog -> 103(리소스 ID)를 선택하면 이전의 실행화면과 같은 대화상자대화 상자 창이 나타나는 것을 확인할 수 있다. 즉, 등록을 요구하는 대화 상자 창의 리소스 ID는 103인 것이다. 대화 상자를 생성하기 위해 호출되는 Win32 API는 다음과 같다.
void DialogBoxA( hInstance, lpTemplate, hWndParent, lpDialogFunc );
hInstance는 대화상자를 포함하는 모듈의 handle, lpTemplate는 리소스 ID나 NULL-terminated 문자열(대화 상자 이름), hWndParent는 대화 상자를 소유하는 윈도우 handle, DLGPROC은 대화 상자의 프로시져 함수 포인터이다. 즉 앞의 대화 상자가 생성되기 위해서는 push 0x67(==103)을 통해 argument로 lpTemplate를 넘겨준 후 DialogBox API가 호출될 것이다. 이점에 착안하여 OllyDbg에서 push 67 명령어를 탐색해보자.
디버깅 위와 같이 한 곳에서 push 67 명령어가 호출되는 것을 확인할 수 있다. 아래 쪽의 CALL <JMP. &MFC42. #324>에서 DialogBox API가 호출될 것으로 보인다. 이제 00401220 지점에 BP를 설정하고, 프로그램을 실행한 후 종료 버튼을 누른 뒤, 콜 스택을 확인하여 어느 부분에서 함수가 호출되는 것인지 확인해보자.
디버깅 아래쪽에 표시한 004023BB의 명령어에 의해 BP를 설정한 곳이 호출된다. 위쪽의 명령어를 살펴보면 conditional jump 명령어가 보이는데 위의 004023AA 명령에 의해 EAX 레지스터 값이 바뀔 것으로 추측할 수 있다. conditional jump에서 점프가 일어나기 위해서는 EAX 레지스터가 0이 아닌 값이어야 한다. 일단 CALL UrLegal.00403E18 함수 내부로 들어가 보자.
디버깅 체크 표시한 부분에서 MOV 연산에 의해 EAX가 0으로 세팅되는 것을 확인할 수 있다. 간단하게 NOP으로 코드를 패치한 후 저장해 보면 프로그램이 등록된 것으로 인식되어 더 이상 등록해달라는 대화 상자가 나타나지 않게 된다.
2. GIF Movie Gear
(1) 프로그램 실행
마찬가지로 실행했다 종료하면, 다음과 같이 등록해달라고 요구한다.
실행화면 똑같은 방법으로 리소스 편집 툴을 이용하여 대화 상자의 resource ID를 알아내보자. 이번에는 Resource Hacker라는 툴을 이용한다.
(2) Debugging
Resource Hacker 등록을 요구하는 대화상자의 resource ID는 100이다. push 0x64(==100) 명령어를 OllyDbg에서 탐색해보자.
디버깅 위와 같이 굉장히 많은 PUSH 64 명령어가 있는 것을 확인할 수 있다. 모든 지점에 BP를 설정하고 관련 없어 보이는 곳은 넘기는 방식으로 디버깅을 진행해보자. 그러면 다음과 같은 곳에서 멈추게 된다.
디버깅 바로 위에 conditional jump와 함수 호출 명령어(CALL)가 보인다. 점프가 일어나기 위해서는 EAX 레지스터가 1로 세팅되어야 할 듯하다. 함수 내부로 들어가서 ret 근처에서의 코드를 살펴보자.
디버깅 위와 같이 함수 내부에서 retn 명령어 위의 MOV EAX, EBX에 의해 EAX 레지스터 값이 1이 아닌 값으로 바뀌는 것을 확인할 수 있다. 해당 부분을 MOV AL, 1로 패치하면 다음과 같이 프로그램이 정상적으로 등록된 것으로 인식된다.
패치 성공 3. Comment
이번 실습을 통해 리소스 관련 툴을 다뤄볼 수 있었고, 리소스를 통한 리버스 엔지니어링 기법을 연습해 볼 수 있었다.
반응형'Wargame > Lenas Reversing' 카테고리의 다른 글
[Lenas Reversing for Newbies] 15 (0) 2021.02.26 [Lenas Reversing for Newbies] 14 (0) 2021.02.23 [Lenas Reversing for Newbies] 13 (0) 2021.02.20 [Lenas Reversing for Newbies] 12 (0) 2021.02.18 [Lenas Reversing for Newbies] 11 (0) 2021.02.09