Abex's crackme 3번 문제이다.
프로그램을 실행시키면, 키파일이 있을 경우 OK를 누르라고 한다.
그래서 그냥 OK를 눌러보면, 파일을 찾을 수가 없다고 뜨면서 프로그램이 종료된다. 프로그램 내부에서 인식되는 파일이 존재해야 넘어가는 구조인 것 같다. 디버깅을 수행해 보았다.
코드 부분이 매우 짧은 편이다. 전반적으로 시스템 콜도 간단한 것 위주로 사용되어서, 분석이 용이한 편이었다.
프로그램을 쭉 분석하면 CreateFileA라는 시스템 콜과, GetFileSize라는 시스템 콜이 눈에 띈다. 이 두 시스템 콜을 확인해 본 결과, CreateFileA라는 시스템 콜은 인자로 받은 파일의 포인터를 반환한다. 프로그램의 흐름을 확인해 보면, abex.l2c라는 이름의 파일의 포인터를 받고, 이를 GetFileSize라는 시스템 콜의 인자로 다시 넣어주는 것을 확인할 수 있다. GetFileSize라는 시스템 콜은 파일의 크기를 리턴한다. 이를 12와 비교하고, 00401049 주소 부분의 JNZ를 통해 분기를 수행한다.
따라서 해당 프로그램은 abex.l2c라는 이름의 파일이 키 파일이 된다. 이때, 비교해주는 12라는 값이 16진수 값이기 때문에 10진수 값으로는 18에 해당한다. 따라서 18바이트의 파일을 crackme #3와 같은 경로에 만들어 주면 프로그램이 정상적으로 수행된다.
반응형
'Security > ISANG' 카테고리의 다른 글
[Reversing] abex's crackme #5 (0) | 2021.03.29 |
---|---|
[Reversing] abex's crackme #4 (0) | 2021.03.29 |
[Reversing] abex's crackme #2 (0) | 2021.03.29 |
[Reversing] abex's crackme #1 (0) | 2021.03.28 |