1. crackme5.exe를 실행하였습니다.
2. 입력 값 없이 바로 Ckeck를 실행하였습니다.
3. 입력 값이 없거나 틀릴 시 다음과 같은 문자열이 출력되는 것을 확인하였습니다.
4. 아이다 툴에 해당 문자열을 검색하였습니다.
5. 검색 후 그래프로 바꾸어서 오답과 정답이 나뉘는 분기 부분을 확인하였습니다.
6. 동적 분석을 위해 "11111111111111" 테스트 값을 입력하였습니다.
7. ZF 값이 0일때 오답 쪽으로 가는 것을 확인하였습니다.
8. ZF 값을 1로 변조 시 정답 쪽으로 가는 것을 확인하였습니다.
9. 이제 ZF값을 변조하는 부분을 찾아봅시다. 바로 윗부분에 두 값을 비교하는 명령어인 cmp을 확인하였으며, 0 값과 eax 값을 비교하는 것을 확인하였습니다.
이때 eax의 값은 1이므로 1 =/= 0 이므로 ZF값이 변하지 않는 것을 확인하였습니다.
10. eax를 0으로 바꾸기 위해 윗부분에 call하는 lstrcmpiA함수를 확인하였습니다.
11. 함수 내에서 lpString1과 lpString2를 인자로 받는 부분을 확인하였습니다.
예상으로 lpString1문자열과 lpString2문자열을 비교하는 함수로 추측되었습니다.
12. 윗부분에서 lpString1이라고 주석이 달린 부분을 확인하였으며, 그 부분의 값을 확인하였습니다.
13. lpString2라는 주석이 달린 부분의 값 확인 시 "11111111111111" 테스트 값과 유사한 값이 확인되었습니다.
14. 테스트 값으로 추정되는 부분을 확인하기 위해서 이번엔 "22222222222222222" 테스트값을 입력하였습니다.
15. 확인 시 1 -> 31h, 2 -> 32h로 변환된 것을 확인 할 수 있었습니다.
16. 키보드에 있는 문자들을 입력하여 다음과 같이 표를 작성하여 표를 이용하여 lpString2문자열을 변환하였습니다.
17. 변환된 값을 crackme5.exe에 입력하였습니다.
18. 정답이라는 것을 확인하였습니다.
'공부 > 리버싱문제' 카테고리의 다른 글
[abex' crackme] crackme10 문제 (0) | 2023.08.23 |
---|---|
[abex' crackme] crackeme3 문제 (0) | 2023.08.11 |