crack 2를 풀다가 해결이 안돼서 3번을 풀어보려고 한다.
이번주 안에 풀어서 올려야겠다고 나자신이랑 약속했다.
이 파일을 열면
그러면 키파일을 체크하기 위해서 OK를 누르라고 한다.
키파일이 있는지는 모르겠지만? 일단 확인을 눌러본다.
찾을 수 없다고 한다. Hmmmmm,
또 다시 OLLEDBG를 열어서 확인해보면 방금 본 두개의 메시지박스를 포함해서 4개의 메시지박스가 보인다. 우리의 목표는 당연히 Yep, keyfile found!
그리고 아까 보지 못한 다른 실패 메시지박스가 있다. 찾은 파일이 유효한 열쇠파일이 아니라는 의미다. 아까 나왔던 실패 화면은 열쇠파일을 안찾으면 나오는 화면이고 지금 설명한 메시지박스는 열쇠파일이 잘못되면 나오는 화면인 듯 하다. 그리고 여기 나와있는 createfileA 와 getfilesize 함수들에 대해서 MSDN에서 알아보면
createfileA는 파일 또는 입출력장치를 열거나 생성하는 함수이다. 값에 따라서 의미가 달라지는데 3인 경우에는 만약 파일 또는 장치가 존재한다면 파일 또는 파일장치를 열게 된다는 것이다. 우리는 파일 자체가 없으니까 에러가 나왔던 것이다.
그래서 어떤 파일을 만들어야 하나 보니 abex.l2c라는 파일이 만들어져야 한다고 한다.
그래서 abex.l2c를 만들어본다.
메모장을 이용하여 이름을 설정하고 저장하면 아래의 abex.l2c도 자동으로 생성된다.
그리고 push 3의 값을 2로 바꾸어준 뒤 디버깅을 해야하는데, mode 2번이 파일을 생성하는 값이기 때문이다.
그리고 실행이 되면 아까와는 다른 에러가 나오게 된다. 적절한 키 파일이 아니라는 에러.
그러면 다음 함수인 getfilesize 함수에 대해서도 MSDN에 검색을 통해서 알아보면 이 함수는 특정한 파일의 크기를 검색하는 함수라고 한다. 00401046의 내용을 보면
cmp eax 12 (eax와 12를 비교)
JNZ SHORT ~~~
그니까 eax랑 12랑 다르면 방금 본 실패 화면으로 넘어가라는 소리다.
그래서 파일의 바이트를 같게 해주기 위해서 파일의 바이트를 늘려야 한다. 여기에서는 16진수로 작성되어 있기 때문에 10진수인 18바이트를 메모장에 주어야 한다.
이렇게! 영문자 한개가 1바이트니까 18개를 주고 저장해준다.
그러고 실행하면!
성공해야 하는데 왜 실패하는지 모르겠다.. 같은 파일 안에 존재하는데//ㅠㅠ
'HACKING > 해피용리버싱' 카테고리의 다른 글
해피용 리버싱 abex' crackme 5번 문제 풀이 (0) | 2021.03.29 |
---|---|
해피용 리버싱 abex' crackme 4번 문제 풀이 (0) | 2021.03.29 |
해피용 리버싱 abex' crackme 1번 문제 풀이 (0) | 2021.03.29 |