Code Injection 기법 (3)

study 2010/06/24 10:43

Code Injection 기법에 의해서 인젝션된 코드를 디버깅 하는 방법에 대해서 알아보도록 하겠습니다. 

이전 강좌의 내용은 아래 링크를 참조하시기 바랍니다.




Code Injection 디버깅 실습
1. notepad.exe 디버깅

OllyDbg 를 이용하여 notepad.exe 파일의 디버깅을 시작합니다. 아래 그림과 같이 실행[F9] 버튼을 선택해서 notepad.exe 를 "Running" 상태로 만들어주세요.


<Fig. 1>

2. OllyDbg 옵션 변경

Code Injection 은 상대방 프로세스에 새로운 스레드를 생성하는 기법이므로 아래와 같이 OllyDbg 의 옵션을 변경하면 인젝션된 스레드 코드 시작부터 디버깅이 가능합니다.


<Fig. 2>

이제부터 notepad.exe 프로세스에서 스레드가 생성된다면 해당 스레드 함수 시작코드에서 멈추게 됩니다.

3. CodeInjection.exe 실행

Process Explorer 를 이용하여 notepad.exe 프로세스의 PID 를 구합니다.


<Fig. 3>

PID 값을 실행 파라미터로 하여 CodeInjection.exe 를 실행합니다.

 
<Fig. 4>

4. 스레드 시작 코드

CodeInjection.exe 프로세스가 실행되어 코드 인젝션이 성공하면 아래 그림과 같이 인젝션된 스레드 코드 시작 위치에서 디버깅이 멈추게 됩니다.


<Fig. 5>

주의 하실점은 디버깅이 멈춘 것이지 EIP 가 이곳으로 세팅된 것이 아닙니다.

위 그림의 150000 주소에 BP 를 설치한 후 실행[F9] 시켜 주세요. 실행 제어가 정확히 BP 설치 주소(150000)에 멈추게 되고 이제부터 펀안하게 디버깅을 진행하시면 됩니다.

* 참고!
실행 환경에 따라서 위 주소는 다르게 표시될 수 있습니다.

OllyDbg 의 편리한 기능을 이용하여 인젝션된 코드를 디버깅 하는 방법에 대해서 살펴보았습니다.

다음 강좌에는 C 언어가 아닌 Assembly 언어를 이용해서 인젝션 코드를 만들어 보도록 하겠습니다. 많이 기대해 주세요~

☞ 어셈블리 언어를 이용한 Code Injection (1)

ReverseCore

위 글이 도움이 되셨다면 추천(VIEW ON) 부탁 드려요~

Trackback Address :: http://www.reversecore.com/trackback/83 관련글 쓰기

  1. Acid 2010/06/24 11:18 댓글주소 | 수정 | 삭제 | 댓글

    1등 ^^
    며칠전에 우연히 이 사이트에 들어왔다가 지금까지 궁금했던 것들 한꺼번에 배우고 있습니다.
    앞으로도 좋은글 부탁드려요~

  2. 궁금 2011/06/02 15:44 댓글주소 | 수정 | 삭제 | 댓글

    windows 7에서는 "The token dows not have the specified privilege" 에러가 납니다
    특별한 이유가 있을까요?

    그래서 cmd.exe를 관리자로 실행하고 codeInjectio.exe 실행했더니 잘 됩니다
    관리자로 실행하지 않으면 코드인젝션은 되지 않는건가요?

    • reversecore 2011/06/03 21:08 댓글주소 | 수정 | 삭제

      안녕하세요.

      네, 말씀하신대로 Vista, 7 에서는 그러한 에러가 자주 발생합니다. XP 보다 보안성이 강화되었기 때문입니다.

      시스템 프로세스가 아닌 같은 유저 환경에서 실행한 프로세스에는 인젝션이 가능합니다.

      감사합니다.

  3. Andi 2011/08/09 10:00 댓글주소 | 수정 | 삭제 | 댓글

    좋은 정보 감사합니다.

  4. 디버거 2011/10/12 19:26 댓글주소 | 수정 | 삭제 | 댓글

    어느덧 Code Injection까지 무작정 따라 왔는데요.

    실습용 CodeInjection.exe로는 잘 되는데
    컴파일 해서 실행하면 에러가 나면서 notepad가 꺼집니다.

    환경은 Winxp SP3, VS6.0입니다.

    cpp파일을 그대로 컴파일 하고 좀 따라가보다 나니
    dwSize = (DWORD)InjectCode - (DWORD)ThreadProc;
    에서 dwSize가 5가 되는데 이것이 맞는건지 가르쳐주세요.

    • reversecore 2011/10/28 01:17 댓글주소 | 수정 | 삭제

      안녕하세요.

      dwSize 는 최소 ThreadProc() 함수 크기 이상으로 나와야 합니다. 아마 Debug 모드로 빌드 하신 것 같습니다. Release 모드로 빌드 해보시기 바랍니다.

      감사합니다.


◀ PREV : [1] : ... [9] : [10] : [11] : [12] : [13] : [14] : [15] : [16] : [17] : ... [91] : NEXT ▶