[Reversing] 리버싱 핵심원리 [5-1].abex' crackme1.exe 풀이 1
내용 : abex' crackme 로 간단한 crack me 샘플 분석하기
어셈블리 코드 분석
우선 실행파일을 실행해보면 "MessageBox"로
Make me think your HD is a CD-ROM 이라는 문제 상황을 제시하였다.
위 상태에서 확인을 누르면 아래 이미지와 같이
이건 CD-ROM Drive가 아니다! 라는 문구가 출력이 된다.
전체 코드를 올리긴 어려워, IDA로 대강의 로직을 나타내보면
위와 같은 로직이 나오게 된다. 즉, 어셈블리 코드 내에서, CD-Rom인지 확인하고, 맞으면 Yes, 아니면 No로 보내는 비교구문이 있다는 것을 알 수 있다.
이제 직접적으로 어셈블리 코드를 보면서 해결 방법을 찾아보기로 했다.
간단하게 맨 처음부터 문제에 해당하는 부분을 찾을 수 있었다.
책의 내용을 인용하여 EP코드가 이렇게 짧은 이유는 어셈블리언어로 만들어진 실행파일이라 그렇다고 한다.
맨처음 나오는 MessageBoxA API에 처음 파일을 실행시켰을 때 나오는 문구가 있다.
그리고 401018번지를 보면 처음 보는 API를 호출하는 것을 볼 수 있는데 검색해 보았더니
UINT WINAPI GetDriveType( _In_opt_ LPCTSTR lpRootPathName );
의 원형을 가진 GetDriveType API가 존재하고 있었다.
여기서 3가지의 해결방법을 생각해 보았다.
첫번째로 비교하는 부분을 조작하여 Nah..! --- 문자열이 담긴 MessageBox 함수를 호출하는 부분을 정답루트로 보내는 메모리 주소로 바꿔치기하기!
두번째는 조건 검사부의 조건을 바꿔치기 하여 틀린조건을 맞게 하기!
(예를들어 '>' 라는 비교 조건이 있을때 '<=' 비교 조건으로 바꾸기)
마지막으로 GetDriveType Api에서 리턴값을 바꿔치기 하기
다음 포스팅에서 실습 예시를 정리할 것이다.