틀린 부분이 있다면 언제든지 댓글 남겨주세요!
Abex crackme #3 문제 풀이
이 예제는 일련번호를 담은 파일을 생성하는 것을 목적으로 하는 프로그램이다.
우선 어떤 파일명으로 생성할 것인지를 알아내고 그 파일을 정해진 규칙에 맞도록 변경해야 한다.
그냥 프로그램을 실행시켰을 때에는 ‘Click OK to check for the keyfile.’ 이라는 메시지가 뜨고 확인을 누르면 ‘Hmmmmm, I can’t find the file!’ 이라는 Error 메시지가 뜬다.
디버거에서 해당 프로그램을 열면 문자열을 따로 찾을 필요도 없이 엔트리 포인트 아래로 찾아야 할 문자열들을 확인할 수 있다.
Step over(F8)을 통해 실행 과정을 보면 시작 메시지가 뜨고 확인을 누르면 CreateFileA라는 함수에서 파일이름이 ‘abex.l2c’라는 파일이 있는지 확인해 결과를 EAX에 넣는다.
EAX값이 -1(FFFFFFFF)이면 JE명령어를 통해 Error메시지를 보여주는 부분(00401075)으로 이동하고 -1이 아니면 다음 코드로 진행해 파일을 검증하는 함수인 GetFileSize으로 이동한다.
해당 함수에서 파일 크기를 확인하고 그 값이 12(0x18)와 같은 지 비교한다. 같지 않다면 JNE명령어를 통해 Error 메시지를 출력하는 부분(00401060)으로 이동해 ‘The found file is not a valid keyfile!’ 메시지를 출력하고 같다면 다음 코드로 넘어가서 ‘Yep, Keyfile found!’메시지를 출력한다.
따라서 문제를 해결하기 위해 필요한 부분은 abex.l2c 파일명을 가진 0x18크기의 파일을 생성하는 것이다.
해당 프로그램과 같은 경로에 크기가 0바이트인 abex.l2c파일을 직접 생성해본다.
그후 파일 생성 확인 함수 이후에 BP를 걸어 실행한 결과 Error메시지를 보여주는 부분(00401075)으로 가지 않고 크기 확인 코드로 넘어간 것을 볼 수 있다.
파일을 notepad로 열어 1234567898765값을 입력하고 다시 실행한 결과 현재 EAX에는 D이 들어있다. 이는 파일의 크기가 D(0x13)이라는 의미로 볼 수 있으며 파일의 속성에서도 크기가 13바이트임을 확인할 수 있다.
이는 힌트 부분에서도 확인할 수 있으며 Imm(Immediate Constant)의 값과 EAX의 값이 같게 되면 Z(zero flag)가 1이 되어 JEN명령어에 따르지 않고 다음 코드로 넘어가게 된다.
파일의 크기를 18바이트로 맞춘 후 다시 실행하면 아래와 같이 완료 메시지가 출력된다.
'Security > Reversing' 카테고리의 다른 글
Abex crackme #5 (0) | 2021.02.07 |
---|---|
Abex crackme #4 (0) | 2021.02.07 |
PEB TEB (0) | 2021.02.02 |
Abex crackme #2 / ollydbg 단축키 (0) | 2021.01.25 |
Reversing Basic Challenge #1 (0) | 2020.12.20 |
댓글