7개의 인자를 채워 넣어줘야 한다.

이중에서 제일 중요한 것은 제 생각엔~

lpStartAddress가 제일 중요한것 같다…왜냐하면, 함수가 있어야 스레드를 만들 수 있으니까!!!


다른 프로세스에 스레드를 만들기 위해서는 스레드용 함수가 있어야 한다.

그런데, CreateRemoteThread()에 전달해줘야할 스레드 함수 주소는 다른 프로세스에 있는 함수 주소이어야 한다고 한다.(이게 무슨 말인인지 이해가 가는가?)

즉, CrateRemoteThread()함수를 호출 하는 프로세스의 함수를 전달해서는 안되는 것이다.


자. 프로세스라는 녀석들은 각자 독립된 메모리 공간을 가진다.




자~ 그런데 어떻게 다른 주소공간에 있는 함수주소를 알아내어서 그 함수를 스레드로 만들 수 있는 것일까요~!


궁굼하시죠~!

자~

방법이 있습니다~!

다른 프로세스에 메모리를 할당하고 그 메모리에 함수를 복사하고 그 복사된 함수를 호출해주면 된다.

이해할 수 있겠는가?



  1. 다른 프로세스에 메모리를 할당한다.

  2. 그 메모리에 내 주소 공간에 있는 함수를 복사한다.

  3. 복사된 함수를 CreateRemoteThread()함수에 전달한다.




자~

다른 프로세스에 메모리를 할당하는 방법은 다음과 같습니다.


  1. 다른 프로세스의 PID(Process ID)값을 알아낸다.

  2. PID를 이용하여 OpenProcess()하여 핸들을 알아낸다.

  3. VirtualAllocEx()함수를 이용하여 PID의 프로세스에 메모리를 할당한다.



HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);


void* pRemoteThread = VirtualAllocEx(hTargetProcess,

0,

dwThreadSize,

MEM_COMMIT | MEM_RESERVE,

PAGE_EXECUTE_READWRITE);



오늘은 여기까지..

내일은..

함수 복사하고, 스레드 만들고 까지 해보죠~!



+ Recent posts