Reversing/crackme

CodeEngn Basic RCE 01 문제 풀이

string_ 2022. 5. 7. 12:54

디버거 : CheatEngine

분석환경 : Window 10

 

 

문제내용

 

 

 

실행 했을떄 뜨는 메세지박스

 

우선 해당 프로그램이 어떤 동작을 하는 프로그램인지 직접 실행하여 확인해봤습니다.

나의 HD를 CD-Rom으로 인식하도록 하는것이 이번 문제 해답인것 같습니다.

우선 GetDriveTypeA 의 리턴값이 어떻게 반환되는지 확인하기 위하여 구글에서 해당 함수를 검색해봅니다.

 

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea

 

해당 Return 되는 값을 봤을떄 GetDriveTypeA 함수는 CD-ROM일시 5를 반환한다는걸 알수있습니다.

이제 디버거로 열어봅시다.

 

 

abex1 디스어셈블리

GetDriveTypeA에 BreakPoint(중단점)을 걸고 다음 단계로 넘어가봅시다.

GetDriveTypeA에 매개변수로 들어가는 값을 확인해보면

나의 드라이브의 루트 디렉터리가 push 되는것을 확인할수있습니다.

 

 

 

 

 

GetDriveTypeA함수를 실행후 레지스터를 확인하여 Return 값을 확인해보았습니다.

3이 반환되고

 

계속 트레이싱하면 esi에 inc , dec 명령어를 사용하여

마지막에 esi와 eax를 비교하여 분기하는 코드를 확인할수 있습니다.

 

comment 주석

반환값은 3이였으니

해당 cmp 까지 왔을떄 esi 값은3이되고 eax의 값은 1이 되므로 분기에 통과하지못하고 에러 메세지가 출력됩니다.

 

그럼 위에서 확인했는대로 반환값을 5로 조작한다면

연산을 했을시에 eax와 esi가 동일하여 분기를 통과하여 성공 메세지로 출력하게 될것입니다.

 

하지만 esi는 0이라는 데이터가 담기는것이아니라 00401000 값이 담기므로

00401005라는 값을 eax에 줘야 분기를 통과합니다.

 

 

성공메세지 출력