파일을 실행하면 이렇게 뜹니다. 어떻게 크랙을 하는 것인지 분석해볼게요.
옆쪽에 보면 저희가 띄워야 되는 구문은 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);
파라미터의 순서가 역순으로 입력되는 이유는 스택 메모리 구조이기 때문입니다.
파라미터를 거꾸로 넘겨주면 함수에서는 올바른 순서로 꺼낼 수 있습니다.
반응형