
figure 1. CreateRemoteThread Codes
핵 개발 팀에서 제작중인 핵을 분석할 결과 역시 일반적인 DLL injection 방식인 CreateRemoteThread를 통해 LoadlibraryA를 사용하여 지정된 경로의 dll을 인젝션 하는 방식을 사용하였다.

figure 2 . How DLL injection basic
출처 : https://rediculousanddirtyprogramming.wordpress.com/using-createremotethread/
이 방식은 가장 많이 사용되는 유명한 dll injection 방식이다.
OpenProcess() 함수로 실행중인 Victim 프로세스 (우리는 게임)를 연다.
VirtualAllocEx() 함수로 Victim 프로세스 에 공간을 할당한다.
WriteProcessMemory()할당된 공간에 원하는 문자열이나 바이트를 주입시킨다. ( ex . “evil.dll”의 절대 경로 )
GetModuleHandle() 로 Kernel32 모듈을 가져온다.
Kernel32.dll 이란?
Windows 운영 체제의 핵심 구성 요소 중 하나인 동적 링크 라이브러리(DLL) 파일이다.
즉, 메모리 관리 프로세스 및 스레드 관리 , 파일 입출력 등등 응용프로그램이 정상적으로 작동하기 위해 반드시 필요함
실제로 간단한 hello world\n 을 출력하는 코드를 작성해도 Windbg로 모듈을 보면

figure 3 . Windbg example
Kernel32가 있는 것을 확인 할 수 있다.
GetProcAddress() 로 Kernel32 안에 존재하는 LoadLibraryA 함수의 주소를 가져온다.
LoadLibraryA 함수란?
Windows API 함수 중 하나로, 특정 동적 링크 라이브러리(DLL) 파일을 로드하는 데 사용됩니다.
CreateRemoteThread() 로 타겟 프로세스의 원격스레드를 생성하고 LoadLibraryA 함수를 실행시킨다 이때 아까 프로세스 내에 주입시킨 문자열을 사용한다. ( ex . “evil.dll”의 절대 경로 )
따라서 evil.dll 을 LoadLibraryA 로 dll 을 프로세스의 올릴 수 있는 것이다.