CrackMe2 문제풀이

Posted by 알 수 없는 사용자
2015. 7. 17. 10:12 네트워크및보안&해킹/보안&해킹

codeengn.com에서 제공하는 CrackMe파일중 하나를 풀어보자.


05.exe


먼저 파일을 다운받고 열어보면 아래와같은 등록키를 확인하는 창이 나타난다.

아무 키나 입력하고 체크하게되면 당연히 오류메시지가 뜬다


이 등록키를 찾아내는게 이 문제의 풀이이다.

그럼 디버거로 문제파일을 열고 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