본문 바로가기
보안/리버싱

2. abex' crackme 1

by 하용권 2019. 7. 29.

파일을 실행하면 이렇게 뜹니다. 어떻게 크랙을 하는 것인지 분석해볼게요.

 

옆쪽에 보면 저희가 띄워야 되는 구문은 ok, I really thing that your HD is a CD-ROM! :p 구문을  띄워야 되는 것을 알 수 있어요.

 

옆에 주석을 보면서 어셈블리어를 분석해볼게요.

push: 스택에 값 입력

call  : 지정된 주소의 함수 호출

inc   : 값 1 증가

dec  : 1감소

jmp  : 지정된 주소로 점프

cmp : 주어진 두 개 operand 비교

je    : 조건 분기

 

 

cmp eax,esi 를 비교합니다.

JE SHORT 0040103D 는 두 값이 같으면 40103D로 점프하고 아니면 그대로 진행합니다.

 

 

 

저희가 원하는 값으로 나오게 할려면 JE ~~~ 구문을 JMP 0040103D로 바꿔주면 됩니다. 그러면 바로 저희가 원하는 쪽으로 점프 하겠죠?

 

 

저희가 원하는 값이 잘 나오네요~

 

 

아 그리고 알아야 될 것이 있습니다. 함수 호출 시 스택에 파라미터를 전달하는 방법에 대해 살펴볼게요.

MeesageBoxA() 함수를 호출하기 전에 필요한 파라미터를 거꾸로 입력하고 있습니다.

 

MessageBoxA(NULL, "Make me think your HD is a CD_Rom.", "abex' 1st crack me", MB_OK|ME_APPLMODAL);

 

파라미터의 순서가 역순으로 입력되는 이유는 스택 메모리 구조이기 때문입니다.

파라미터를 거꾸로 넘겨주면 함수에서는 올바른 순서로 꺼낼 수 있습니다.

반응형

'보안 > 리버싱' 카테고리의 다른 글

스택 프레임  (0) 2019.08.02
1. 문자열 패치  (0) 2019.07.19