오랜만에 크래킹 연습을 위해 외국사이트에서 CrackMe를 하나 찾았네요..
한번도 시도 안해본 Delphi 로 짜여진 CrackMe 로 오래만에 크랙해보겠습니다.
[Description]
[파일] Volty's Delphi Crackme #1
[유형] key 찾기
[제작언어] Delphi
[난이도] 2

오늘 크랙할 프로그램입니다.
많이본 CrackMe와 같은구조로 적절한 코드를 입력하고 아니면 아예 분기를 싹 다 통과로 바꾸던가... 버튼을 누르면 통과되는 프로그램입니다.
테스트로 아무 코드나 넣고 버튼을 눌러보겠습니다.

이렇게 아무렇게나 입력을 하고... Autheenticate 버튼을 누르면...
"아무 일도 일어나지 않았다."
제작자가 틀린코드는 아무것도 뜨지 않도록 해놨네요... 보통 틀렸을때 뜨는 메세지가 있을경우 string 값을 찾아서 쉽게 코드를 찾을 수 있는데 아쉽네요.
그럼 바로 ollydbg를 꺼내들고 크랙해보겠습니다.

▲ ollydbg로 열어본 해당 파일
우선 가장 만만한... string 파일을 뒤져보겠습니다. All referenced text string 을 들어가서 찾아보죠

바.로.발.견
다행히(?) 만만한 string 값 찾기로 바로 코드 오프셋을 알 수 있었습니다.
이제 해당 오프셋에 적절하게 breakpoint를 걸고 실행하면 되겠네요.

문자열 출력을 위해 파라메터를 준비하는 부분으로 예상할 수 있습니다.
이프로그램에서는 아예 틀린 값인경우 이 부분으로 넘어오지도 않습니다.
이 부분을 찾은것만으로는 해결 불가능하니 입력값을 받아서 키 값과 대조하는 부분을 찾아보죠

ㅋㅋ 간단하게 완료..!
한 opcode 씩 실행시켜서 키 값과 입력값이 일치하면 넘겨주는 부분을 찾으면 끝이겠네요
00537388 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
해당 코드를 실행했을 경우 레지스터 결과

EAX 보시면 제가 테스트로 적은 코드값이 들어가 있네요 감이온다 감이...
0053738B 8B15 38E75400 MOV EDX,DWORD PTR DS:[54E738]
다음 라인. 54E738 ... Data Stack 을 바로 확인해보니 7DDE7C 라는 값 발견.
이걸 다시 타고 메모리 스택을 확인하니 ...

코드 중간 중간 보이던 유니코드 값들이 합쳐져있는게 보이네요. 아마도 이게 우리가 찾던... ㅎㅎ
쭉쭉 내려서 코드를 실행하다 보면
00537391 E8 CA06EDFF CALL Crack_Au.00407A60
00537396 75 23 JNZ SHORT Crack_Au.005373BB
00537398 C705 50E75400 60EA000 MOV DWORD PTR DS:[54E750],0EA60
005373A2 C705 48E75400 2515030 MOV DWORD PTR DS:[54E748],31525
005373AC C705 4CE75400 0000000 MOV DWORD PTR DS:[54E74C],0
005373B6 E8 99FEFFFF CALL Crack_Au.00537254
005373BB 33C0 XOR EAX,EAX
값의 동일을 확인한후 분기하는 부분입니다. 여기를 손봐주면 이건 끝이네요

크랙완료
그럼 이제 키 값을 제 마음대로 바꿔보겠습니다.

제 블로그로 키값 변경

잘되네요!
크래킹, CrackMe, 델파이 크랙, 크랙하는법, 리버싱, 크래킹 하는법, 해킹