[리버싱] abex crack me 1
- 해킹/리버스 엔지니어링
- 2019. 8. 18.
[리버싱] abex crack me 1
오늘은 abex crack me 1에 대한 내용입니다.
- 간단한 설명
- abexcm1.exe파일
- 풀이
- 수정된 abexcm1.exe 파일
1. 간단한 설명
MessageBox() : 별도의 윈도우를 열어서 사용자에게 정보전달이나 질문을 하는 장치.
자세한 설명은 생략
GetDriverTypeA() : 드라이브의 종류를 정수 형태로 반환
- 3 = hdd or flash drive
- 4 = network drive
- 5 = CD-ROM
- 6 = RAM disk
INC : 뒤에 오는 레지스터의 값을 1씩 증가
DEC : 뒤에 오는 레지스터의 값을 1씩 감소
비교문 : CMP(compare) 뒤에 오는 두 레지스터에 저장된 값이 같으면 제로 플래그(zero flag) 레지스터를 1로 설정
점프문 : JE(Jump Equal) ZF가 1일 경우 점프한다.
2. abexcm1.exe
아래 제가 올려놓은 abexcm1.exe를 다운받아주세요.
실행 사진
처음 실행하면 hd를 cd-rom으로 인식하도록 만들어보라고 나옵니다.
아직 아무것도 하지 않은 상태여서 cd-rom이 아니라고 에러 메시지가 출력되네요.
3. 풀이
이제 ollydbg로 해당 파일을 열어보세요.
아래 사진처럼 복잡해 보이는 창이 나올 겁니다.(파일 여는 것은 아시죠?)
파일을 열었으면 이제 F8을 이용해서 하나씩 내려가 보겠습니다.
음 먼저 문자를 넣어주네요.
그 후 call로 MessageBoxA를 부릅니다.
방금 들어간 문자들이 들어간 메시지 박스가 실행되었습니다.
조금 더 내려가니 위에서 간단하게 설명했던 GetDriveTypeA함수가 나오네요.
제 컴퓨터는 ssd라서 3이 리턴될 겁니다.
3이 리턴되어서 eax가 3이 되었습니다.
아쉽게도 esi의 값이 00401000이네요.
(원래는 esi도 초기화되어서 0으로 되어야 하는 걸로 아는데.. 저도 공부중이라.. ㅋㅋ)
일단 esi를 0으로 초기화해놓고 계속하겠습니다.
이제 조금 더 내려와서 비교문 부분입니다.
현재 레지스터의 값은 EAX가 1 ESI가 3입니다.
당연히 CMP를 실행하면 zero flag는 0이 됩니다.
그러면 ZF가 0이니까 JE은 넘어가게 됩니다.
JE의 조건을 만족하지 않습니다.
실행하지 않고 넘어갑니다.
그 후 Error라는 문자와 Nah... this is not a CD-ROM Drive!라는 문자를 넣고 메시지 박스 함수를 불러옵니다.
그 결과 이렇게 error메시지가 출력됩니다.
그럼 이제 해결을 해보겠습니다.
방법은 여러 가지가 있습니다.
그중에서 오늘은 두 가지 방법을 해보려고 합니다.
방법 1. INC ESI를 건너뛰는 방법.
위에서 GetDriveTypeA함수에서 리턴 받은 값이 5라면 CD-ROM이라는 말을 했습니다.(설명에서)
그런데 우리는 hdd라서 3입니다.
그러니 esi의 값을 두 번 빼는데 이것만 건너뛰면 zero flag가 1이 되므로 Error를 JE로 건너뛸 수 있습니다.
일단 ctrl+f2로 재시작하고 초기 ESI가 00000000이라는 가정하에 진행하므로 레지스터를 00000000으로 설정하겠습니다.
그 후 점프를 수정해서 00401023으로 뛰겠습니다.(short는 목적지가 가깝다는 뜻으로 알고 있습니다.)
이제 이대로 프로그램을 계속 실행해보면 EAX와 ESI의 값이 같기 때문에 CMP 부분에서 ZF가 1이 됩니다.
그 후 JE는 ZF가 1이면 점프하기 때문에 error부분을 점프하게 되고 이렇게 해결이 됩니다.
방법 2. 그냥 건너뛰기.
이렇게 ESI가 다르면 JMP만 수정해서 해결할 수도 있습니다.
이렇게 수정하면 GetDriveTypeA함수건 뭐건 그냥 뛰는 거라 성공메시지를 확인할 수 있습니다.
4. 수정된 abexcm1.exe파일
프로그램을 정상적으로 수정했지만 디버거를 닫으면 원래대로 돌아갑니다.
이번에는 디버거를 닫아도 수정된 내용이 반영되도록 실행파일을 저장해보겠습니다.
마우스 우클릭을 눌러보면 아래 사진처럼 나올 겁니다. (2.01 버전입니다.)
Edit-> copy all modifications to executable을 눌러주세요.
아래 사진처럼 나올 텐데 다시 한번 우클릭-> save file... 을 눌러주세요.
이제 이렇게 수정된 파일을 저장하면 끝~