본문 바로가기

공부/리버싱

리버싱 공부 06

<리버싱 핵심 원리>로 공부하였다.

 

06 abex' crackme #1 분석

관련 이전 게시물 : https://pepperhaneul.tistory.com/84?category=890252

 

abex' crackme #1 실행

일단 처음에 한 번 실행해보았다. 그럼 위와 같은 대화상자가 뜬다. OK를 눌러보았다.

OK 누른 후

위와 같이 Error 메시지 박스가 떴다. 여기서 OK를 누르면 종료된다. 이제 디버거에서 디스어셈 코드를 확인해보자.

위 코드를 한 줄 한 줄 분석해보자.

401000~40100E : MessageBoxA() 호출

401013~401018 : GetDriveTypeA() 호출

ESI = 1 (환경에 따라 첫 시작 값이 다르다면 다른 값이 나올 수도 있다. 아래도 마찬가지)

EAX = 2

의미 없는 JMP 명령

ESI = 2

ESI = 3

EAX = 1

401024 : CMP문 -> EAX와 ESI 비교

401026 : JE문 -> 비교한 두 값이 같으면 40103D 주소로 점프하고 다르면 그냥 밑으로 진행

 

다를 때

401028로 이동

401028~401036 : Error MessageBoxA() 호출

40103B : 401050으로 이동

 

같을 때

40103D로 이동

40103D~40104B : YEAH MessageBoxA() 호출

401050 : 프로그램 종료

 

그럼 이제 분석을 끝냈으니 크랙을 해보자.

분석한 내용대로라면 비교하고 결과에 따라 이동되는 주소가 달라진다. 그러므로 같을 때 점프하는게 아니라 다를 때 점프를 하게 한다면 우리는 같을 때 뜨는 메시지 박스를 볼 수 있을 것이다. 이는 JE 명령어를 JMP 명령어로 바꾸면 된다.

그럼 크랙에 성공한 화면을 볼 수 있다.

 

※ 코드에서 파라미터 순서의 반대로 호출한다. 스택의 FILO 구조 때문이다. 

 

'공부 > 리버싱' 카테고리의 다른 글

리버싱 공부 08  (0) 2022.01.09
리버싱 공부 07  (0) 2022.01.09
리버싱 공부 05  (0) 2022.01.09
리버싱 공부 04  (0) 2022.01.09
리버싱 공부 03  (0) 2022.01.09