본문 바로가기
리버싱(Reversing)/리버싱 개념

리버싱 핵심원리 6장(abex’ crackme #1 분석 )

by LIZ0904 2020. 10. 2.
반응형

 

abexcm1-voiees.exe
0.01MB

 

 

 

 

 

 

프로그램 실행

이 프로그램을 실행시켜보면 'Make me think your HD is a CD-Rom' 이라는 문구가 나온다. 확인을 누르면 'Nah... This is not a CD-ROM Drive!' 라는 Error 메세지가 뜨게 된다.

 

 

 

 

OllyDbg로 파일열기

올리디버거로 이 파일을 열어보았다.  EP에 메인함수가 바로 나타난다는 점을 보면 이 프로그램은 어셈블리 언어로 작성되었다는 것을 유추할 수 있다. 어셈블리 언어로 만들어진 실행파일이기 때문에 개발툴을 사용해 만들어진 프로그램보다 EP 코드가 짧다. 이는 개발툴을 사용하면 컴파일러가 Stub Code를 추가시키기 때문에 디스어셈시, 내용이 더 길어지기 때문이다.

 

 

 

 

코드에서 전체적인 내용을 보면, GetDriveTypeA를 이용해 C 드라이브의 타입을 얻어오는데, 이를 CD-Rom으로 인식하게 만들어야 될 것 같다. 그럼 아까 우리가 봤던  'Nah... This is not a CD-ROM Drive!' 에러 메세지가 아닌, 'OK, I really think that your HD is ...' 성공 메세지를 확인할 수 있을 것이다.

 

 

 

 

 

한줄 한줄 해석해봐도 좋겠지만, 이건 간단한 코드이기 때문에 직접 명령어의 의미를 파악해가면서 분석 해보는 걸 추천한다. 명령어들의 내용은 아래와 같다.

명령어

내용

PUSH

스택에 값을 입력

CALL

지정된 주소의 함수 호출

INC

값을 +1

DEC

값을 -1

JMP

지정된 주소로 점프

CMP

주어진 두 개의 값(Operand) 비교

(두 값이 동일하다면 결과는 SUB 결과는 0, ZF=1로 세팅)

JE

조건 분기 (Jump if Equal)

ZF=1 이면 점프

 

 

 

 

00401024  |. 3BC6           CMP EAX,ESI
00401026  |. 74 15          JE SHORT abexcm1-.0040103D

 

 

코드를 패치하기 위해 이제 핵심적인 명령어 부분들을 살펴보고자 한다. CMP 명령어를 통해 EAX와 ESI 값이 동일한지 판단을 하고, JE 명령어를 통해 동일하면 0040103D 주소로 점프하고, 동일하지 않으면 계속 아래로 명령어를 실행하도록 되어 있다. 그리고 동일할 때 점프하게 되는 0040103D 주소에는, 성공 메세지를 출력하게 하는 내용들이 있다. (계속 아래로 가면 그대로 에러 메세지가 뜸)

 

 

 

 

JE 명령어는 CMP 결과에 따라서 성공 메세지 주소로 점프하게 되지만, 만약 JMP 명령어를 사용한다면 CMP의 결과에 상관없이 무조건 점프를 하게 된다. 그래서 우리는 Assemble 기능을 이용해 JMP 명령어로 바꿔줄 것이다.

 

 

 

 

Assemble

JE 명령어가 쓰인 위치(00401026) 부분을 더블클릭 또는 스페이스바(Space)를 누르면 위와 같은 화면이 나온다. JE SHORT 0040103D를 JMP SHOT 0040103D로 변경해준 뒤, X 표시를 누르고 나오면 된다.

 

 

 

 

Assemble 결과

그럼 위와 같이 명령어가 바뀐 것을 확인할 수 있다. 이제 CMP 결과에 상관없이 무조건 0040103D(성공 메세지 주소)로 넘어가게 된다.

 

 

 

 

이제 다시 실행시켜보자! BP(Break Point)를 무시하고 전체 실행하는 것은 F9 를 누르면 된다.

 

 

 

 

 

결과 화면

그럼 이전과는 다르게 성공 메세지를 확인할 수 있다. 성공!!

 

 

 

 

 

 

 

 

반응형

댓글