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 인젝션
코드 인젝션
위 두가지 경우에 따라 약간 다르다.
'파이썬 스터디 과제 > 파이썬 해킹 프로그래밍' 카테고리의 다른 글
7장-DLL과 코드 인젝션-2 (코드 인젝션) (0) | 2015.01.31 |
---|---|
7장-DLL과 코드 인젝션-2 (DLL 인젝션) (0) | 2015.01.29 |
7장-DLL과 코드 인젝션 (0) | 2015.01.29 |
6장-2 Immunity 디버거를 이용한 하드 후킹 (0) | 2015.01.26 |
6장-후킹-1(PyDbg를 이용한 소프트 후킹) (0) | 2015.01.26 |
댓글