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: 08. Debugging with W32Dasm, RVA, VA and offset, using LordPE as a hexeditor

사용도구: 올리디버거 2.01

 

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

 

[사진 1]

원본파일을 실행하면 다른 프로그램을 설치한다.

 

 

[사진 2]
[사진 3]
[사진 4]
[사진 5]
[사진 6]
[사진 7]

설치 자체는 어려운게 없다.

 

 

[사진 8]

설치를 마치면 위와 같은 파일들이 생성된다.

 

 

[사진 9]

ArtGem 파일을 실행하면 위와 같은 프로그램이 실행되고 Nag 창이 뜬다.

 

 

[사진 10]

Manual 파일을 실행하면 위와 같이 도움말을 확인할 수 있다.

 

 

[사진 11]

ReadMe 파일을 실행하면 위와 같은 노트를 확인할 수 있다.

 

 

[사진 12]

RLUninst 파일은 프로그램을 삭제하는 파일인 것 같다.

 

 

[사진 13]

ArtGem 파일을 실행하고 좌측 상단의 ? - About 기능을 클릭하면 위와 같이 Name, Company, Key-Code를 등록하는 창이 뜬다. 등록을 실패하면 "Invalid Key!" 문자열과 함께 메시지 박스가 뜬다. 이 문자열을 이용해보자.

 

 

[사진 14]

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

 

 

[사진 15]
[사진 16]

위와 같이 문자열이 사용되는 코드로 이동하면 0x00438601 주소의 명령어 MOV ECX, DWORD PTR DS:[4949A8]을 확인할 수 있다. 그런데, 왼쪽을 보면 '>' 기호가 있는데 이는 0x00438601 주소로 어딘가에서 점프했다는 뜻이다.

 

 

[사진 17]

코드를 조금 위로 올리면 0x00438578 주소의 명령어 JZ 00438601을 확인할 수 있다. 점프하기 전에 EAX 레지스터의 값을 TEST 연산하는데, EAX 레지스터의 값이 0x0이라면 [사진 16]의 코드로 점프하는 것이다. 0x0043856E 주소의 CALL 00434C00 명령어에 의해 어떠한 함수가 호출되고 그 결과가 EAX 레지스터에 저장될 것이다.

따라서 해당 함수가 종료되지 전에 EAX 레지스터의 값이 0x0이 아니도록 패치하면 된다.

 

 

[사진 18]

0x00434C00 함수가 종료되기 전 코드를 보면 위와 같이 EAX 레지스터를 XOR 연산한다. 즉, EAX 레지스터의 값은 0x0이 되고 [사진 16]의 코드로 점프할 것이다.

 

 

[사진 19]

따라서 위와 같이 XOR 명령어를 NOP 명령어로 패치하였다. 그러면 어떠한 Name, Company, Key-Code를 입력해도 실패하지 않는다.

 

 

[사진 20]
[사진 21]

위와 같이 정상적으로 등록되었다.

728x90
728x90

+ Recent posts