CrackMe2 문제풀이
codeengn.com에서 제공하는 CrackMe파일중 하나를 풀어보자.
먼저 파일을 다운받고 열어보면 아래와같은 등록키를 확인하는 창이 나타난다.
아무 키나 입력하고 체크하게되면 당연히 오류메시지가 뜬다
이 등록키를 찾아내는게 이 문제의 풀이이다.
그럼 디버거로 문제파일을 열고 F7키를 눌러서 프로그램 내부로 찾아 들어가다 보면
이 부분에서 디버거가 압축되어있는 코드같은데 분석을 계속하겠냐고 물어본다.
확인을 위해 프로그램을 PEiD 로 열어보면 UPX로 압축된것을 확인할수있다.
UPX를 통해 압축을 풀수 있지만 수동으로 한번 풀어보겠다.
디버거의 멈춰있는 위치에 보면 PUSHAD 는 스택에 값을 저장하는 명령이다. 그리고 POPAD 가 스택에 저장된값을 빼내는 명령어이다
이제 OEP를 찾아야 하는데 UPX는 코드 마지막부분(POPAD)에 OEP로 가는 jmp문이 있어서 이 jmp문을 타고 가면 OEP가 나오고 그부분을 Dump 해주면 된다.
아래쪽으로 조금 내려보면
POPAD 아래부분에 JMP가 보인다 .
이부분에 브레이크를 걸어주고 F9를 눌러주면 JMP문을 타고 갈수있다.(브레이크 없이 F9를 누르게되면 자동으로 UnPacking 되어 실행되므로 분석이 안됨)
JMP문을 타고 가면
이런 부분을 볼수있는데 이곳이 OEP이다
이제 여기서 Dump 를 해준다.
디버거의 Plugins 메뉴의 Dump->Dump Devugged Process 로 들어가면
이런 창이 뜨는데 여기서 Rebuild Import 를 반드시 체크 해야한다 ( 안하면 실행이 안되는 상태로 저장됨 )
위에 Entry Point 를 OEP주소로 바꿔주고 덤프 한다.
디버거로 덤프시킨 문제파일을 열고 프로그램의 메인으로 찾아들어간다.
그리고 메인에서 의 텍스트를 검색한다.
마우스 우클릭후 All referenced text String 버튼을 누르면 아래와같은 창이나온다.
여기서 다시 우클릭후 Search for text 를 누르고
처음에 에러메시지의 Wrong Serial을 검색해보면
성공메세지 위에 등록키가 보인다. 문제프로그램을 실행시키고 키를 입력해보자.
'네트워크및보안&해킹 > 보안&해킹' 카테고리의 다른 글
[시스템해킹]버퍼오버플로우 실습 (329) | 2015.08.28 |
---|---|
DLL Injection (6) | 2015.06.21 |
CrackMe 문제풀이 (리버싱 기초) (6) | 2015.06.08 |
리버스 엔지니어링 (3) | 2015.06.08 |
버퍼오버플로우 (928) | 2015.06.08 |