본문 바로가기
파이썬 스터디 과제/파이썬 해킹 프로그래밍

7장-DLL과 코드 인젝션-1 (원격 스레드 생성)

by laoching 2015. 1. 29.
728x90
반응형

DLL 인젝션과 코드 인젝션 사이에는 몇 가지 차이가 있다.

하지만 두 가지 모두 동일한 방법으로 수행된다. 그것이 원격 스레드 생성이다.

원격 스레드를 생성하는 데 사용되는 Win32 API가 Kernel32.dll의

CreateRemoteThread()다.

CreateRemoteThread()의 프로토타입

--------------------------------------------------------------------

HANDLE WINAPI CreateRemoteThread(

HANDLE hProcess,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

SIZE_T dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParameter,

DWORD dwCreationFlags,

LPDWORD lpThreadId

);

--------------------------------------------------------------------

파라미터들의 의미를 직관적으로 판단해보자.

첫 번째 파라미터 hProcess는 스레드가 실행되는 프로세스 핸들이다.

lpThreadAttributes 파라미터는 단순히 새롭게 생성되는 스레드를 위한

security descriptor를 설정하기 위한 것으로 해당 스레드 핸들을

자식 프로세스가 상속할 수 있는지 여부를 나타낸다.

lpThreadAttributes 파라미터 값을 NULL로 설정하면 생성되는 스레드에

디폴트 security descriptor가 할당되고 그 스레드의 스택 크기를 설정한다.

값을 0으로 설정하면 프로세스가 이미 사용하고 있는 디폴트 스택 크기를 사용하게 된다.

그 다음 파라미터는 가장 중요한 파라미터로 lpStartAddress다.

lpStartAddress 파라미터는 스레드가 실행될 메모리의 주소를 나타낸다.

인젝션이 제대로 수행되기 위해서는 lpStartAddress 파라미터에 반드시 정확한 주소가 전달되야 한다.

다음은 lpParameter 파라미터로, lpStartAddress 파라미터만큼이나 중요한 파라미터다.

이 파라미터에 의해 전달되는 메모리 주소는 lpStartAddress에 전달되는 함수 파라미터의 주소다.

dwCreationFlags 파라미터는 스레드가 시작되는 방식을 설정하기 위한 것이다.

7장에서는 이 파라미터의 값을 0으로 사용할 것이다.

dwCreationFlags 파라미터의 값이 0이면 스레드는 생성되자 마자 곧바로 실행된다.

dwCreationFlags 파라미터에 설정할 수 있는 다른 값에 대해서는 MSDN을 참조하라고 한다.

MSDN은 다 영어다...

lpThreadID 파라미터로, 이 파라미터를 통해 새로 생성되는 스레드의 ID가 전돨된다.


원격 스레드를 생성하고 그것의 코드를 실행시키는 과정이

DLL 인젝션

코드 인젝션

위 두가지 경우에 따라 약간 다르다.


728x90
반응형

댓글