티스토리 뷰

Reversing

abex' crackme 1

err0rless313 2015. 3. 16. 17:23

ABEX` CRACKME 1번문제 


push    0               ; uType

push    offset Caption  ; "abex' 1st crackme"

push    offset Text     ; "Make me think your HD is a CD-Rom."

push    0               ; hWnd

call    MessageBoxA

push    offset RootPathName ; "c:\\"

call    GetDriveTypeA

inc     esi

dec     eax

jmp     short $+2


loc_401021:

inc     esi

inc     esi

dec     eax

cmp     eax, esi

jz      short loc_40103D


loc_40103D:             ; uType

push    0

push    offset aYeah    ; "YEAH!"

push    offset aOkIReallyThink ; "Ok, I really think that your HD is a CD"...

push    0               ; hWnd

call    MessageBoxA


우리가 해야할 일을 OK, I really think that your HD is a CD 문자열을 띄우는 것이다.


그 부분은 loc_40103D로 JMP해야 되는데, loc_401021 마지막 부분에 eax와 esi가 같아야 한다.


그 전 연산을 보면 GetDriveTypeA 함수를 호출하고 

esi를 한번 더함, eax 한번 뺌, esi 한번 더함, esi 한번 더함, eax한번 뺌, eax와 esi를 비교 한 후

같으면 문자열 출력


즉 3 = eax - 2 가 되어야 한다. 그러면 eax가 5가 되어야 한다. 직접 띄워 보도록 하자.


그런데 OLLYDBG로 들어가보면 EAX를 5로 설정 해도 성공이 되지 않는다.

그건 기본적으로 ESI에 0x401000이 들어가기 때문에 EAX는 최종적으로 3 ESI는 최종적으로 0x4010003이 들어가게 된다.


ESI가 처음 0이었다면 성공 했을 것이다. 어셈블리를 바꿔서 강제적으로 loc_40103D에 가게 하도록 하자.


JE  SHORT 0040103D 를 

JMP SHORT 0040103D 로 바꾸면 JMP는 무조건 분기 이기 때문에 EAX나 ESI에 무엇이 들어가더라도

무조건 성공하게 될 것이다.


YEAH!


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함