[Reversing] 리버싱 핵심원리 [5-1].abex' crackme1.exe 풀이 1

2020. 2. 25. 13:18보안/리버싱

728x90

내용 : abex' crackme 로 간단한 crack me 샘플 분석하기

 

어셈블리 코드 분석

 

abex' 1st crackme 1.1

우선 실행파일을 실행해보면 "MessageBox"로

Make me think your HD is a CD-ROM 이라는 문제 상황을 제시하였다.

 

 

 

 

 

 

 

 

 

 

위 상태에서 확인을 누르면 아래 이미지와 같이

 

 

 

이건 CD-ROM Drive가 아니다! 라는 문구가 출력이 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

전체 코드를 올리긴 어려워, IDA로 대강의 로직을 나타내보면

위와 같은 로직이 나오게 된다. 즉, 어셈블리 코드 내에서, CD-Rom인지 확인하고, 맞으면 Yes, 아니면 No로 보내는 비교구문이 있다는 것을 알 수 있다.

 

이제 직접적으로 어셈블리 코드를 보면서 해결 방법을 찾아보기로 했다.

 

assembly파일 처음 위치

간단하게 맨 처음부터 문제에 해당하는 부분을 찾을 수 있었다. 

책의 내용을 인용하여 EP코드가 이렇게 짧은 이유는 어셈블리언어로 만들어진 실행파일이라 그렇다고 한다.

 

맨처음 나오는 MessageBoxA API에 처음 파일을 실행시켰을 때 나오는 문구가 있다.

그리고 401018번지를 보면 처음 보는 API를 호출하는 것을 볼 수 있는데 검색해 보았더니

UINT WINAPI GetDriveType( _In_opt_ LPCTSTR lpRootPathName );

의 원형을 가진 GetDriveType API가 존재하고 있었다.

 

출처 : https://vlindersec.tistory.com/24

 

여기서 3가지의 해결방법을 생각해 보았다.

 

첫번째로 비교하는 부분을 조작하여 Nah..! --- 문자열이 담긴 MessageBox 함수를 호출하는 부분을 정답루트로 보내는 메모리 주소로 바꿔치기하기!

 

두번째는 조건 검사부의 조건을 바꿔치기 하여 틀린조건을 맞게 하기!

(예를들어 '>' 라는 비교 조건이 있을때 '<=' 비교 조건으로 바꾸기)

 

마지막으로 GetDriveType Api에서 리턴값을 바꿔치기 하기

 

다음 포스팅에서 실습 예시를 정리할 것이다.

728x90