실행하면 다음과 같은 문구가 뜬다. "내가 HD를 CD-Rom으로 생각하게 만들어라"
바로 까보았다.
0x401018 주소를 보면 GetDriveTypeA라는 함수를 호출한다.
이 GetDriveTypeA함수의 원형은 다음과 같다
UINT GetDriveTypeA( [in, optional] LPCSTR lpRootPathName );
즉 반환 값이 5가 되도록 만들어야 HD가 아닌 CD-Rom으로 인식을 하는거 같다.
Step over으로 call 함수를 건너뛰어 넘어보았을때 진행되는 로직은 다음과 같다
1. esi 1 증가
2. eax 1 감소
3. esi 1 증가
4. esi 1 증가
5. eax 1 감소
6. eax와 esi를 비교하고, 같으면 0x40103d로 이동하고 같지 않으면 에러 출력
그래서 나는 다음과 같이 풀었다.
1. 6번까지 이동한다(cmp eax, esi)
2. 레지스터 값을 eax와 esi가 서로 같게 수정한다
3. 실행하면 끝
변경 전 변경 후
또는 cmp eax, esi 부분을 cmp eax, eax로 패치해도 된다.
Abex crackme # 1
실행하면 다음과 같은 문구가 뜬다. "내가 HD를 CD-Rom으로 생각하게 만들어라"
바로 까보았다.
0x401018 주소를 보면 GetDriveTypeA라는 함수를 호출한다.
이 GetDriveTypeA함수의 원형은 다음과 같다
즉 반환 값이 5가 되도록 만들어야 HD가 아닌 CD-Rom으로 인식을 하는거 같다.
Step over으로 call 함수를 건너뛰어 넘어보았을때 진행되는 로직은 다음과 같다
1. esi 1 증가
2. eax 1 감소
3. esi 1 증가
4. esi 1 증가
5. eax 1 감소
6. eax와 esi를 비교하고, 같으면 0x40103d로 이동하고 같지 않으면 에러 출력
그래서 나는 다음과 같이 풀었다.
1. 6번까지 이동한다(cmp eax, esi)
2. 레지스터 값을 eax와 esi가 서로 같게 수정한다
3. 실행하면 끝
또는 cmp eax, esi 부분을 cmp eax, eax로 패치해도 된다.
'리버싱공부' 카테고리의 다른 글