728x90
728x90
728x90

파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17

 

Downloads / Lenas Reversing for Newbies - Tuts 4 You

 

tuts4you.com

Tutorials Index: 16. Reversing using resources

사용도구: 올리디버거 2.01

 

Lena's Reversing for Newbie 16(이하 원본파일) 분석해보자.

 

16단계는 분석할 파일이 2개이다.

 

1. URLegal

2. movgear

 

튜토리얼 인덱스(Reversing using resources)에 맞게 리소스 편집기 eXeScope 프로그램으로 분석해보자.

 

첫 번째 URLegal 파일부터 분석해보자.

 

[사진 1-1]
[사진 1-2]

원본파일을 설치해주자.

 

 

[사진 1-33]

URLegal 프로그램을 실행하면 위와 같은 모습이다. File - Register... 기능을 클릭해보자.

 

 

[사진 1-4]

등록에 필요한 값은 Name, Code로 2개이다.

 

 

[사진 1-5]

실패했을 때의 메시지 박스는 위와 같다.

 

 

[사진 1-6]

프로그램을 종료하면 위와 같은 창이 뜬다. "I Will Register Soon" 버튼을 클릭하면 완전히 종료된다.

 

 

[사진 1-7]

eXeScope 프로그램의 실행된 모습은 위와 같다. File - Open... 기능을 클릭하여 URLegal 프로그램을 읽어보자.

 

 

[사진 1-8]

그러면 위와 같이 URLegal 프로그램이 사용하는 resource를 확인할 수 있다. 이 중 Dialog 메뉴클 살펴봐야 한다.

왜냐하면 [사진 1-6]에서 프로그램을 종료 시 떴던 창을 확인할 수 있었다. 이 창을 끄려면 "I Will Register Soon" 버튼을 클릭해야 한다.

즉, [사진 1-6]의 창은 사용자가 특정 버튼을 클릭하면 반응하는데 이와 관련된 API가 DialogBoxParam 함수이다. DialogBoxParam 함수에 대해서는 다음 링크르 참고하면 된다.

참고 링크: https://jade9reen.tistory.com/96

 

DialogBoxParamA Function

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dialogboxparama DialogBoxParamA function (winuser.h) Creates a modal dialog box from a dialog box template resource. docs.micros..

jade9reen.tistory.com

 

 

[사진 1-9]

왼쪽 Dialog 메뉴에서 숫자들이 있는데 이 숫자들은 DialogBoxParam의 lpTemplateName 인자가 나태는 대화상자 템플릿의 식별자 ID 값이다. 103번을 보면 프로그램 종료 시 나타나는 대화상자임을 알 수 있다. 즉, 이 대화상자를 제거해야 하는데 식별자 ID 값은 103번이고 16진수로 0x67 값이다.

 

 

[사진 1-10]

올리디버거로 URLegal 프로그램을 실행한 뒤, code 섹션에서 우클릭 - Search for - Allcommands... 기능을 클릭하여 위와 같이 push 67 명령어를 검색해보자. 왜냐하면 [사진 1-9]에서 DialogBoxParam 함수에 사용할 lpTemplateName 인자로 0x67 값을 전달하는 것을 확인했다. 즉, 스택에 push 명령어로 인자 값 0x67을 저장할 것이다.

 

 

[사진 1-11]

그러면 위와 같이 명령어 1개가 사용되고 있다.

 

 

[사진 1-12]

해당 주소로 가면 바로 위에 함수 프롤로그를 수행하는데 이 루틴이 프로그램 종료 시 [사진 1-6]의 대화상자를 띄우는 루틴인지 확인하기 위해 브레이크 포인트를 설정하고 프로그램을 다시 실행하고 종료해보자.

 

 

[사진 1-13]

위와 같이 브레이크 포인트에 의해 멈추는 것으로 보아 이 루틴이 프로그램 종료 시 보여지는 대화상자를 실행하는 루틴임을 알 수 있다. 그리고 위와 같이 0x004023C0 주소가 리턴주소이므로 해당 주소 직전의 명령어로 인해 이 루틴이 호출되었을 것이다.

 

 

[사진 1-14]

리턴 주소를 살펴보면 0x004023BB 주소의 CALL 00401220 명령어에 의해 [사진 1-13]의 루틴이 호출되었음을 알 수 있다. 그리고 바로 위에 0x00403E18 함수를 호출하고 EAX 레지스터의 값에 따라 0x004023BB 명령어를 수행하지 않고 0x004023F6 주소로 점프하고 있다. 0x004023AA 주소에 브레이크 포인트를 설정하고 다시 프로그램을 실행하고 종료해보자.

 

 

[사진 1-15]

그럼 위와 같이 0x00403E18 함수를 호출하기 전에 EAX 레지스터의 값이 0x1 값임을 알 수 있다. 함수 내부로 이동해보자.

 

 

[사진 1-16]

내부 함수를 보면 0x00403E22 주소의 MOV EAX, DWORD PTR SS:[EAX+2C] 명령어에 의해 EAX 레지스터의 값이 0x0 값으로 변경된다. 따라서 이 명령어를 패치하면 된다.

 

 

[사진 1-17]

위와 같이 NOP 명령어로 패치해주면 RETN 명령어 수행 시 EAX 레지스터의 값은 0x0 값이 아니게 된다.

 

 

[사진 1-18]

그럼 위와 같이 File - Register... 기능이 비활성화되고 종료 시에도 대화상자는 보이지 않는다.

 

 

두 번째 movgear 파일을 분석해보자.

 

[사진 2-1]

원본파일을 설치해주자.

 

 

[사진 2-2]

movgear 프로그램을 실행하면 위와 같이 환영한다는 메시지 창이 뜬다.

 

 

[사진 3]

Start from Scratch 버튼을 클릭하면 메인 프로그램이 시작된다.

 

 

[사진 2-4]

메인 프로그램의 모습은 위와 같다. Help - Register Now... 기능을 클릭해보자.

 

 

[사진 2-5]

등록을 위한 값으로 Name, Code 2개의 값이 필요하다.

 

 

[사진 2-6]

실패했을 때의 메시지 창은 위와 같다.

 

[사진 2-7]

프로그램 종료 시 위와 같은 창이 뜨고 30일 동안 사용이 가능하다는 내용이다.

 

마찬가지로 리소스 편집기 eXeScope 프로그램으로 분석해보자.

 

[사진 2-8]

eXeScope 프로그램으로 movgear 프로그램을 읽어보자. 그리고 Dialog 메뉴의 100번이 [사진 2-7]에서 확인한 대화상자임을 알 수 있다. 즉, 이 대화상자를 제거해야 하는데 식별자 ID 값은 100번이고 16진수로 0x64 값이다.

 

 

[사진 2-9]

올리디버거로 movgear 프로그램을 메인 화면이 나올 때까지 실행한 뒤, code 섹션에서 우클릭 - Search for - Allcommands... 기능을 클릭하여 위와 같이 push 64 명령어를 검색해보자.

 

 

[사진 2-10]

PUSH 64 명령어가 여러 개 보이기 때문에 전부 브레이크 포인트를 설정해주자. 그리고 프로그램을 종료해보자.

 

 

[사진 2-11]

그럼 위와 같이 0x00406725 주소에 멈추게 된다. 이 함수가 [사진 2-7]에서 확인한 대화상자를 띄우는 함수이다.

 

 

[사진 2-12]

1번 프로그램과 마찬가지로 종료 시 대화상자를 실행하는 함수가 수행되기 전에 0x0040670B 주소의 CALL 00431650 명령어가 수행되고 EAX 레지스터의 값이 0x1 값이 아닐 때만 대화상자를 띄워준다.

따라서 0x0040670B 주소에 브레이크 포인트를 설정하고 프로그램을 다시 실행한 뒤 종료해보면 0x0040670B 주소에 멈추게 된다. 이 때 EAX 레지스터의 값은 0x0 값이다. 내부 함수로 이동해보자.

 

 

[사진 2-13]

내부 함수에서 종료 직전 EBX 레지스터의 값을 EAX 레지스터에 복사하는데 EBX 레지스터의 값은 0xFFFFFFFF 값이다. 따라서 0x1 값이 아니기 때문에 [사진 2-12]에서 확인한 0x00406716 주소의 JE 명령어에 의해 점프하지 않는 것이다.

 

 

[사진 2-14]

위와 같이 MOV EAX, EBX 명령어를 MOV AL, 1 명령어로 패치해주자.

 

 

[사진 2-15]

그리고 프로그램을 실행해보면 Help - Register Now... 기능이 사라진 것을 알 수 있다.

 

 

[사진 2-16]

Help - About GIF Movie Gear... 기능을 클릭해보면 등록되었다는 것도 확인할 수 있다.

728x90
728x90

+ Recent posts