DLL 인젝션이란
특정 프로세스가 실행 상태에서 특정 DLL을 로드시키는 것을 말한다. 기존의 프로그램이 DLL을 불러오는 것이 아닌 타 프로그램에 의해서 불러오게 되는 것을 말한다. DLL을 로드하게 되면 main문이 자동으로 실행이 되게 된다.
이러한 원리를 이용하여 API 후킹 등을 할 수 있다.
원리
1. 타 프로세스를 open 한다.
OpenProcess
2. 타 프로세스에 dll을 추가적으로 올릴 수 있는 공간을 만들어준다
VirtualAllocEx
3. 불러올 dll을 선택한다
GetModuleHandle
3. 타 프로세스에 dll을 로드하는 스레드를 생성한다
CreateRemoteThread
from ctypes import *
import sys,ctypes
def Injection(pid,dll_file):
hproc = kernel32.OpenProcess(0x1F0FFF,False,pid)
virtual_addr = kernel32.VirtualAllocEx(hproc,None,len(dll_file),0x3000,0x04)
kernel32.WriteProcessMemory(hproc,virtual_addr,dll_file,len(dll_file),None)
hmod=kernel32.GetModuleHandleA('kernel32')
load_addr=kernel32.GetProcAddress(hmod,'LoadLibraryA')
if not kernel32.CreateRemoteThread(hproc,None,0,load_addr,virtual_addr,0,None):
print "[#] Failed Injection.."
else:
print "[#] Success Injection!!"
print"[#] Kali-KM's Dll Injector v.01 Since 15.03.25"
if not sys.argv[1:]:
print"[#] Usage : Injector <pid> <dll_path>"
sys.exit(0)
kernel32 = windll.kernel32
pid=int(sys.argv[1])
dll_file=str(sys.argv[2])
Injection(pid,dll_file)
https://kali-km.tistory.com/entry/DLL-Injection-API