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: 11. Intermediate patching using Olly's "pane window"

사용도구: 올리디버거 2.01

 

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

 

 

[사진 1]

원본파일을 실행하면 Flash Jigsaw Producer라는 프로그램을 설치한다.

 

 

[사진 2]

Flash Producer 프로그램은 포토샵? 같다. 우리가 봐야할 것은 Register 버튼과 상단 메뉴의 Desk - Select... 기능이다.

 

 

[사진 3]

먼저 Register 버튼을 클릭하면 위와 같이 Password를 입력하여 등록할 수 있는 창이 뜬다.

 

 

[사진 4]

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

 

 

[사진 5]

다음으로 상단 메뉴의 Desk - Select... 기능을 실행하면 위와 같이 등록된 사용자만 사용할 수 있다고 한다.

 

 

[사진 6]

code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Invalid Password" 문자열을 검색해보자.

 

 

[사진 7]

0x0040489E 주소에서 "Invalid Password" 문자열을 스택에 저장하고 있음을 알 수 있다.

 

 

[사진 8]

해당 주소로 가보면 [사진 4]에서 확인했던 실패 메시지 박스 함수를 호출하고 있다.

 

 

[사진 9]

실패했을 때의 메시지 박스 윗 부분의 코드를 보면 0x00404860 주소의 JZ 명령어로 인해 점프되는데, 점프하기 전에 AL 레지스터의 값을 TEST 연산한다. 즉, AL 레지스터의 값이 0x0이라면 실패 메시지 박스 함수가 호출되는 것이다.

따라서 바로 직전에 호출되는 함수의 리턴 값(EAX 또는 AL 레지스터)을 조작해야 한다. 바로 직전 호출되는 함수는 0x00404856 주소에서 호출된다.

 

 

[사진 10]

0x00404856 주소에 브레이크 포인트를 설정하고 다시 올리디버거로 Flash Producer 프로그램을 실행하면 위와 같이 내가 입력한 Password 값을 인자로 전달한다.

 

 

[사진 11]

함수 내부로 들어오면 내가 입력한 Password 값의 길이가 4 이상인지 체크한다. 4 이상이면 0x00404665 주소로 점프하여 문자열 "fgr" 값을 인자로 어떠한 함수가 실행된다. 그리고 그 함수의 리턴 값이 0x0이 아니면 0x00404677 주소의 JNZ 명령어에 의해 0x0040465E 주소로 점프된다. 그리고 AL 레지스터의 값을 초기화한 후 리턴하게 된다.

즉, 0x0040465E 주소의 XOR AL, AL 명령어를 패치하여 AL 레지스터의 값이 0x0이 아니도록 하면 된다.

 

 

[사진 12]

위와 같이 MOV AL, 1 명령어로 패치하면 AL 레지스터의 값은 0x1이 된다.

 

[사진 13]

0x1 값을 가지는 AL 레지스터를 TEST 연산하면 JZ 명령어에 의해 0x0040487 주소로 점프되지 않는다. 그리고 쭉 실행해보자.

 

 

[사진 14]

그리고 상단 메뉴의 Desk - Select... 기능을 클릭하면 위와 같이 이미지를 불러올 수 있다.

728x90
728x90

+ Recent posts