출처: http://vallista.tistory.com/entry/Syntax-Highlighter-티스토리에서-코드-이쁘게-넣기 [VallistA]>

'reversing/abex crackme'에 해당되는 글 3건

  1. 2018.12.25 abex crackme #3
  2. 2018.12.25 abex crackme #2
  3. 2018.12.24 abex crackme#1
posted by ddanss 2018. 12. 25. 01:24
728x90

abex crackme3 파일을 일단 실행해보자. 어떤 게 나올까?

일단 첫 실행은 이거고 확인을 누르면

 

이 창이 나온다. Error가 나왔다?? 그러면 Error 말고 다른 창이 있을거라고 추측할 수 있다.

이제 디버거를 키고 F9를 누르자.

 

그럼 바로 우리가 실행파일을 눌렀을때 나온 창을 뜨게하는 MessageBoxA 함수가 나온다.

 

그리고 커서를 아래로 내려보면서 혹시 MessageBoxA가 혹시 금방 나오는지 찾아보자.

 

 

 

 

위에 세개의 MessageBoxA 함수가 나왔다. 우리가 처음 봤던 MessageBoxA는 세번째 함수다. 두번째 MessageBoxA 함수도 에러가 나왔다.??(좀 의아한 점이다) 그래서 우리는 Well done!인 첫번째 MessageBoxA가 나오도록 우리는 조종해야 한다.

 

CMP나 TEST 같은 비교문을 통해 JMP할 것으로 예상되니 CMP나 TEST를 찾아보도록 하자.

 

 

 

CMP가 두개나 나왔다. 음??? 일단 첫번쨰 CMP EAX, -1에 break point를 걸고 재실행 해보겠다.

레지스터 창을 보면 Z flag가 1이다.

 

고로 JE 뒤에 있는 00401075 주소로 간다는 소리다.

제일 간단한 방법은 00401075를 Well done! MessageBoxA의 처음인 0040104B로 바꾸면 바로 된다.

 

 

이렇게 Well done! 을 바로 띄울 수 있다.

 

 

하지만 우리는 좀 다르게 가 볼 것이다.

Z flag가 1인 것을 이용하기 위해 JE를 JNZ로 바꿔보자. (JNZ는 Z flag가 0일 때만 JMP한다.)

 

 

엇!? 우리가 아까 의아해 했던 두번째 MessageBoxA함수에 있는 것이 나왔다.

 

즉, 이 문제에 CMP가 두 개나 있던 이유가 있던 것이다.

JMP문을 두개나 바꿔야 Well done!으로 갈 수 있다.

 

CMP EAX,12아래에 JNZ가 있는데 CMP EAX,12에서 F8을 눌러보면 Z flag가 0이 되는 것을 볼 수 있다. 우리는 바로 아래에 Well done!을 가야하기 때문에 JNZ대신 JE로 바꿔서 JMP문을 타지 않도록 한다. JNZ를 JE로 바꾸면 Well done! 창을 볼 수 있다.

 

반응형

'reversing > abex crackme' 카테고리의 다른 글

abex crackme #2  (0) 2018.12.25
abex crackme#1  (0) 2018.12.24
posted by ddanss 2018. 12. 25. 00:40
728x90

abex crackme 2를 일단 켜보자.

 

위의 그림이 먼저 나온다.

일단 우리는 Check가 누르면 어떤 창이 뜨는지 확인하기 위해 Name과 Serial에 아무거나 쳐보자.

 

다음 창이 나온다. serial 이 옳지 않다고한다.

이제 우리는 디버거를 켜서 옳은 serial을 찾아보자.

 

디버거를 키고 F9를 눌러보자. 그러면 다음과 같은 창이 나온다.

 

함수의 시작인 PUSH EBP같은 것이 나오지 않는다. 당황하지 말고 혹시 Nope, this serial is wrong! 이라는 글자가 있는지 메뉴를 열어서 확인해보자.

메뉴는 마우스 오른쪽 버튼을 누르고 Search for - All referenced text strings를 눌러 Nope, 을 찾아보자.

 

 

Wrong serial!

Nope, this serial is wrong!이 나왔다. Wrong serial! 을 더블클릭해보자.

 

 

이 위로 살짝 올려보면 이 창이 나올 것이다.그리고 이 위에 혹시 CMP나 TEST가 있는지 찾아보자.

CMP는 abex crackme #1에서 말했듯이 비교문이고 TEST도 비교문이다.

 

 

위로 올려보니 TEST AX, AX가 있다. 그래서 TEST에 break point를 건 후 Ctrl+F2를 누른후 다시 F9로 프로그램을 실행해보자. 그 다음 Name에 abcd,  Serial엔 1234를 입력해보자.

그럼 바로 위에 창이 똑같이 뜰 것이다. 그리고 오른쪽 아래에 스택 창을 봐보자.

 

 

이런식으로 스택창이 있는데 아래로 천천히 내려보자.

 

 

1234 바로 위에 유니코드로 뭐가 나와있다.! 이것을 exe 파일을 재 실행해서 Serial 부분에 똑같이 쳐보자.

 

 

this key is right! Congratulations!라고 한다. C5C6C7C8키가 맞았다.

이렇게 우리는 2번을 풀었따.

반응형

'reversing > abex crackme' 카테고리의 다른 글

abex crackme #3  (0) 2018.12.25
abex crackme#1  (0) 2018.12.24
posted by ddanss 2018. 12. 24. 23:58
728x90

abex crackme 1을 실행해보자.

그러면 아래 두 창이 뜰 것이다.

 

 

Error 창이 떴다???음...

디버거를 키고 F9를 한번 눌러보자.

 

그럼 다음과 같은 창이 보일 것이다.

 

 

MessageBoxA함수는 우리가 보았던 앞의 두 창을 띄워주는 역할을 한다.

위에 Style, Title, Text, h0wner은 바로 함수의 인자이다.

맨 첫번째 창을 보면 Title과 Text창이 눈에 보일 것이다.

아래로 내려보면 우리는 이 MessageBoxA함수를 두개 더 볼 수 있다.

 

 

 

위에 올린 MessageBoxA는 우리가 두번째 본 창이다.

 

우리는 Error 보다는 YEAH!메세지를 출력하도록 바꿔야한다.

 

분명 두 번째 메세지박스 대신 세 번째 메세지박스를 가르는 비교문이 있을 것이다. 일단 CMP를 찾아보도록 하겠다. CMP는 어셈블리어에서 if문과 동일하게 비교문이다.

 

 

 

다행히 CMP문이 바로 나왔다. CMP문 바로 아래에 JE 0040103D가 있다. 바로 위에 그림에서 0040103D를 보니 YEAH! 창을 출력하는 MessageBoxA 함수로 가는 JMP문이다. 따라서 JE 0040103D전인 CMP EAX,ESI까지 F8로 천천히 따라가보자.

 

 

이 상태에서 레지스터 창에 flags를 봐보자.

 

Z flag가 0이다. JE는 Z flag가 1일때 뒤의 0040103D 주소로 간다. 따라서 우리는 이 창에서 Z flag를 바꿔줘본다. Z옆에 있는 숫자 0을 더블클릭하면 1로 바뀔것이다. 그리고 나서 실행해보자.

그럼 0040103D 로 JMP한 것을 볼 수 있다. 이대로 F8로 쭉 따라가거나 F9로 바로 실행하면 우리는 YEAH! 창을 볼 수 있다.

 

이렇게 뜨면 풀게 된 것이다.

반응형

'reversing > abex crackme' 카테고리의 다른 글

abex crackme #3  (0) 2018.12.25
abex crackme #2  (0) 2018.12.25