CrackMe 문제풀이 (리버싱 기초)

Posted by 알 수 없는 사용자
2015. 6. 8. 21:30 네트워크및보안&해킹/보안&해킹

CrackMe 는 리버싱공부를 위해 만들어진 연습문제 실행파일이다.


아래에 첨부된 파일은 가장 기초적인 CrakckMe 파일중에 하나이다. 이 파일을 통하여 리버싱을 간단하게 보여주려고 한다.


01.exe


첨부된 파일을 실행시켜보자


            



HD를 CD-Rom으로 인식하도록 만들으라고 되어있고 확인을 누르면 오른쪽의 에러메시지가 나타난다.


이제 분석을 위해 OlluDbg를 이용하여 파일을 열어보자.




F7(Step into) 를 누르면 함수 호출부분에서 함수내부로 들어갈수 있고

F8(Step over)를 누르면 함수내부로 들어가지않고 다음명령어로 넘어간다.

F7을 여러번 눌러서 넘어가다보면




이런부분을 볼수있다.

창에 있는 내용을 보게되면 프로그램을 실행시켰을때 볼수 있었던 메시지들이

코멘트부분에 나타나는데 

이부분이 이프로그램의 메인함수 내부이다. 

여기서 F2키를 눌러서 BreakPoint를 설정하도록한다.


전에 봤던 메시지 두개 외에도 아래쪽에 보면

"Ok, I really ~~~~" 부분이 있는데 

먼저보았던 에러메시지를 출력하는 것 대신에 이부분이 호출되게 하는것이 목표이다.

여기서부터는 F7 을 막누르다보면 엉뚱한곳에 가서 헤맬수 있기때문에 

F8을 통하여 넘어가도록 한다


F8을 누르다보면 처음에보았던 메시지 박스가 하나 나오는데 확인 누르고 넘어가도록 하자.

F8을 계속 누르다보면 



빨간색 화상표 부분에서 에러메시지를 띄우고 프로그램이 종료되버린다.

당황하지말고 Ctrl+F2 를 눌려서 리셋하고 F9( BreakPoint를 만나기전까지 명령어 수행) 를 누른다.

 

다시 F8로 차근차근 넘어가보자



빨간 화살표 부분을 보면 

 CMP EAX,ESI  ( 레지스터의 EAX값과 ESI값을 비교하여 TRUE 혹은 FALSE값을 반환해준다. )

가 있다. 

여기서 registers 창(빨간 네모박스 부분)을 보면 ESI = 3 , EAX = 1 로 값이 다르므로 FALSE가 반환된다.


그리고 그 바로 아래 명령어를 보면

JE SHORT 01.0040103D ( 반환값이 True일경우 모듈01의 0040103D 주소로 Jump )

가 있다.

0040103D 주소( Address 부분에 동그라미) 를 찾아가보면 처음 목표로 잡았던 메시지를 출력해주는 부분이 나온다.

여기서 여러가지 방법을 생각할 수 있다.



두가지 모두 적용하는 방식은 같기때문에 2번 방법만 설명한다.

JE 명령어를 더블클릭하게되면 수정할수있다.



JE -> JMP로 바꾸고 Assemble 버튼을 누르면 바뀌는것을 볼 수 있다.


그리고 바뀐 실행파일을 저장하기위해 Disassembler창에서 우클릭 -> Copy to exexutable -> All modifications -> Copy all 을 클릭한다.



그럼 위와같이창이 하나뜨는데 그창위에 커서를 올리고 우클릭 -> save file -> 저장 

하게되면 바뀐내용의 exe파일이 저장된다.


그리고 바뀐내용의 파일을 실행시켜보면

 

    



에러메시지 대신에 오른쪽과 같은 창이 뜬다.


이것으로 가장쉬운 난이도의 CrackMe 문제를 풀어보았다.


http://codeengn.com/

위의 주소에 들어가보면 더많은 CrackMe자료들이 있으니 차근차근 풀어보면

리버싱을 공부하는데 도움이 될것이다.



'네트워크및보안&해킹 > 보안&해킹' 카테고리의 다른 글

[시스템해킹]버퍼오버플로우 실습  (329) 2015.08.28
CrackMe2 문제풀이  (6) 2015.07.17
DLL Injection  (6) 2015.06.21
리버스 엔지니어링  (3) 2015.06.08
버퍼오버플로우  (928) 2015.06.08