Lena's Reversing for Newbie 13 Write-Up
파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17
Downloads / Lenas Reversing for Newbies - Tuts 4 You
tuts4you.com
Tutorials Index: 13. The use of API's in software, avoiding doublechecking tricks
사용도구: 올리디버거 2.01
Lena's Reversing for Newbie 13(이하 원본파일) 분석해보자.
원본파일을 실행하면 설치를 진행한다.
설치한 프로그램을 실행하면 위와 같은 로딩 창이 뜬다.
프로그램이 실행되면 위와 같은 모습이다.
좌측의 About 메뉴를 클릭하면 위와 같이 Enter Registration Code 버튼을 통해 등록을 할 수 있다.
Username, Registration Code 총 2개의 값을 입력하여 등록을 할 수 있다.
등록을 실패하면 "Invalid code." 문자열을 포함한 메시지 박스를 확인할 수 있다.
프로그램을 실행한 후 올리디버거의 상단 메뉴 중 File - Attach... 기능을 통해 위와 같이 실행 중인 XoftSpy 4.13 프로세스를 Attach 하자.
프로그램을 올리디버거로 실행한 후 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Invalid code" 문자열을 검색해보자.
0x004174A5 주소에서 "Invalid code." 문자열을 스택에 저장하고 있다.
해당 주소를 살펴보면 0x00417690 함수를 실행하고 리턴 값이 0x0이 아니면 0x004174E3 주소로 점프한다. 리턴 값이 0x0이기 때문에 0x004174E3 주소로 점프하지 않고 "Invalid code." 문자열을 출력한다.
0x4174E3 주소로 점프하면 "Congratulations! successfully registered" 문자열이 사용된다. 일단 이 곳으로 점프를 하도록 패치해야 한다.
따라서 0x0041749C 주소으 JNZ 명령어를 JZ 명령어로 패치하여 0x004174E3 주소로 점프한 후 실행해보자.
그러면 위와 같은 내용의 메시지 박스를 확인할 수 있다.
하지만 About 메뉴를 다시 클릭하면 라이센스가 등록되지 않았다고 한다.
다시 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 "This license of XoftSpy has been registered" 문자열을 확인할 수 있다.
해당 주소로 이동하여 살펴보면 0x00401492 주소의 CALL 명령어에 의해 0x004350A0 함수가 실행되고 리턴 값에 따라 0x004014AD 주소로 점프하여 [사진 14]에서 확인했던 라이센스가 아직 등록되지 않았다는 문자열을 사용한다.
따라서 루틴의 맨 윗 부분에 브레이크 포인트를 설정하고 실행하면 딱 이 곳에서 중지된다.
그리고 0x004350A0 함수를 실행하면 리턴 값이 0x0이기 때문에 0x004014AD 주소로 점프하게 된다.
따라서 위와 같이 JZ 명령어를 JNZ 명령어로 패치하여 리턴 값이 0x0일 때 0x004014AD 주소로 점프하지 않도록 한다.
그리고 실행하고 About 메뉴를 클릭하면 위와 같이 라이센스가 등록된 것을 확인할 수 있다.