Reversing

abex' crackme #1 풀이

whh1323 2019. 4. 14. 21:12

 

 

abex 1번 디스어셈블 결과 (Feat.OllyDbgl)

아주 간단한 코드입니다.

일단 0x00401000부터 코드를 읽어들이겠군요.

저희가 원하는 목적은 0x0040103F을 실행시키는게 문제인거 같습니다.

일단 들어가기 전에 저는 두가지 방법으로 크랙해보겠습니다.

1. 0x004013F로 바로 점프해서 크랙하는 방법

2. 코드 값을 변경시켜서 크랙하는 방법

 

1. 바로 점프해서 크랙하는 방법

 

아주 간단합니다. 프로그램이 완료되기 전에 0x0040103F로 이동하면 되죠

F8을 계속 누르다 보면 0x0040100E에서 멈춰집니다

그리고 메세지박스가 나타나게 되죠. 그냥 넘어가고 F8을 계속 누르다보면

 

 

이렇게 뜬 후에 0x00401050 으로 넘어갈겁니다.

일단 프로그램이 어떻게 돌아가는지 확인은 했고

첫번째 방법으로 push 0에 JMP SHORT 0x0040103F를 입력하면 0x0040103F로 바로 점프하겠죠??

그러면 0x00401028에 있는 push 0을 JMP SHORT 0x0040103F로 변경한 후 실행을 해보겠습니다. 

이제 2번으로 넘어가겠습니다.

일단 2번으로 넘어가기 전에 몇가지의 어셈블리 명령어를 알아야 하는데요

INC와 DEC,CMP,JE입니다.

명령어 해석
INC 값을 1 증가
DEC 값을 1 감소
CMP 두개의 값 비교
JE

조건분기 ,값이 같으면 점프

그러면 CMP 명령어가 있는 0x00401024에서 EAX와 ESI의 값을 비교하니 두 값을 분석해보겠습니다.

자 그러면 0x40101D부터 해석을 해봅시다.

0040101D |. 46 INC ESI    에서 일단 ESI의 값을 보겠습니다.

INC ESI 전의 ESI 값

오른쪽 레지스터의 값을 보면 00401000인것을 확인할 수 있습니다. 여기서 INC ESI를 하면 값이 00401001로 변하겠죠?

확인해보겠습니다.

INC ESI 후의 ESI 값

네 변하네요 ㅎㅎ..

 

 

그리고 쭉 F8을 해본 결과 EAX는 00000001이고 ESI는 00401003이 되는군요.

그러면 00401026을 실행하기 전에 EAX의 값을 ESI와 같게 맞추면 저희가 원하는 0x0040103F으로 점프가 되겠죠?

한번 확인해 보겠습니다.

다음에는 abex' crackme #2를 크랙해보겠습니다.

감사합니다.