Simples Crackme 18
- Question
· 실행 후 확인해보면 숫자가 하나씩 올라가는 MessageBox를 확인할 수 있다.
· 여기서 마지막 MessageBox의 숫자를 확인해 MD5 Hash 값으로 변환해야하는 문제이다.
- Solve
· Solve Sequence
◦ MessageBox의 숫자에 따라 종료가 결정되므로 MessageBox에 PUSH 명령어로 추가되는 영역의 주소를 찾는다.
◦ 숫자 값과 비교(CMP)하는 영역을 찾는다.
◦ 찾은 값이 맞는 값인지 PUSH 명령어로 추가되는 값을 비교대상 숫자와 일치시켜 확인해본다.
· Solve Process
◦ OllyDbg를 통해 실행해보면 Packing되어 있다는 것을 확인할 수 있다.
◦ UPX를 통해 Packing을 해제시킨다.
◦ Packing을 해제하고 실행시켜보면 'IsDebuggerPresent'를 이용해 Debugging을 할 수 없게 만들었다는 것을 확인할 수 있다.
◦ 'Search for → All referenced text strings'를 통해 'IsDebuggerPresent'가 존재하는 구간을 찾아 JE 명령어를 JMP 명령어로 수정해 'IsDebuggerPresent'가 실행되지 않도록 해준다.
◦ MessageBox가 실행되는 구간을 찾기 위해 'Search for → Name (lable) in current module'를 이용해 모두 BP를 설정한다.
◦ MessageBox가 실행되기 전을 확인해보면 숫자 값이 PUSH 명령어로 넣어지는 것을 확인할 수 있으며 'ESP(89F738)+20'에 있다는 것도 확인할 수 있다.
◦ 이후에 진행되는 Code의 CMP 영역을 모두 살펴보면 '0041365B'의 CMP 명령어가 MessageBox에 넣어지는 값과 비교 값을 비교하는 것을 확인할 수 있다.
※ 주의 : 쉽게 찾을 수 없으며 꾸준히 찾아야한다.(필자는 CMP 명령어를 일일이 확인해봤다.)
◦ CMP 명령어가 실행되기 전 EAX Register 값을 비교 값인 EDI 값(00063B8E)과 일치 시켜준다.
◦ 하지만 이 상태에서 MessageBox를 다시 실행시켜준다고 해서 Process가 종료되지 않는다는 것을 확인할 수 있다.
◦ CMP 명령어 실행 전 EAX 값을 수정(00063B8E)해주고 SETL 명령 실행 직후에도 EAX 값을 수정(00063B8E)해주면 'ExitProcess' 명령어를 만나 Process가 정상적으로 종료되는 것을 확인할 수 있다.
- Answer
· 16진수 : 63B8E → 10진수 : 408462
· 408462의 MD5 Hash 변환 값 : 6903eef5902839b661840d64a04dd81d
'Reversing > Simples Creckme' 카테고리의 다른 글
Simples Crackme 17 (0) | 2015.08.16 |
---|---|
Simples Crackme 16 (0) | 2015.08.16 |
Simples Crackme 15 (0) | 2015.08.16 |
Simples Crackme 14 (0) | 2015.08.16 |
Simples Crackme 13 (0) | 2015.08.16 |