DLL Injection
DLL Injection은 프로그램이 실행되는데 DLL 파일이 함께 사용되는데, 이 프로그램에 DLL 파일을 삽입하여 사용하는 것을 말한다.
* DLL (Dynamic Linked Library)
DLL은 동적 라이브러리라고 불리며, DLL이 로딩되면 DllMain()이 실행된다.
DLL Injection이 활용되는 곳은 후킹, 기능 개선, 버그 패치 등등 여러 일을 할 수 있다.
CreateRemoteThread()
CreateRemoteThread()는 Jeffrey Ritcher에 의해서 공개되었다고 합니다.
hProcess : Thread가 생성될 타겟 프로세스, Thread 생성에 성공하기 위해서는 이 Handle에 대해 PROCESS_VM_OPERATION, PROCESS_VM_WRITE, PROCESS_VM_READ 권한이 있어야 한다.
lpThreadAttributes : 보안 속성을 지정한다. NULL이면 Default 값을 가져오게 된다.
dwStackSize : 스택의 사이즈를 나타낸다. 0으로 설정하면 Deault size를 할당한다.
lpStartAddress : 생성할 Thread 함수의 주소. 이 함수는 반드시 타겟 프로세스 내에 존재하는 함수여야 한다.
lpParameter: 함수에 전달되는 변수
dwCreationFlags : suspend와 같은 Thread 속성을 지정한다. 0으로 설정하면 Thread는 즉시 시작하게 된다.
lpThreadId : Trhead ID 값을 받을 변수, NULL 지정 시 Thread ID 값이 반환되지 않는다.
Injector.exe와 k3y6reak.dll 파일을 만듭니다.
notepad.exe를 실행시킬 때 k3y6reak.dll이 들어가게 되고 k3y6reak.dll에 의해서 저의 블로그를 저장시킬겁니다.
아래 소스코드는 리버싱 핵심원리의 소스코드를 일부 수정한 것입니다.
32bit의 경우 그냥 컴파일 하시면 됩니다. 64bit의 경우 컴파일 방식을 64bit로 변경해주세요.
실행시키면 위와 같이 k3y6reak.dll이 인젝션이 된 것을 확인할 수 있습니다.
※ windows 10 64bit 환경에서 실행되었음을 알려드립니다.
또한, 실제로 Dll은 Injection이 되었지만 dll 내의 소스코드는 실행되지 않았습니다. 세션의 문제인거 같지만.. 좀 더 알아봐야겠습니다.
그리고 Injection을 할때 dll의 경로를 모두 적어줘야 합니다. 같은 폴더내에 있다고 경로를 적지 않으면 안됩니다. <- 이것 때문에 이틀날려먹었네요 왜 안되나....
AppInit_DLLS
실행 - regedit 을 입력하여 레지스트리 편집기를 실행시킵니다.
컴퓨터 - HKEY_LOCAL_MACHINE - SOFTWARE - Microsoft - Windows NT - CurrentVersion - Windows 경로를 들어가면 아래와 같이 레지스트리 정보가 나타납니다.
AppInit_DLLs에는 Injection을 원하는 DLL 경로를 넣어주고 LoadAppInit_DLLs 항목의 값을 1로 바꿔주면 됩니다.
위와 같이 바꿔주면 user32.dll이 프로세스에 로딩될 때 AppInit_DLLs 항목을 읽어서 값이 존재하면 LoadLibrary() API를 이용해서 사용자 DLL을 로딩하는 것입니다.
XP에서는 LoadAppInit_DLLs 항목이 무시됩니다.
위와 같이 설정을 하게되면 모든 프로세스에 DLL을 로딩하게 됩니다. 정확히 말하자면 user32.dll이 로딩된 프로세스 입니다.
이렇게 설정을 한 후에 재부팅을 합니다.
아 윈도우 뻑나서 다시... 쥬륵
k3y6reak.dll이 Injection이 된 것을 알 수 있습니다.
SetWindowsHookEx()
SetWindowsHookEx()는 Windows Massage Hooking을 확인하시면 됩니다.
http://kblab.tistory.com/107
'High Level Technique > Reversing' 카테고리의 다른 글
DLL Load Using PE Patch (0) | 2016.07.14 |
---|---|
DLL Ejection (0) | 2016.07.08 |
Windows Massage Hooking (0) | 2015.12.29 |
.reloc section 제거 (1) | 2015.12.21 |
PE 재배치 (PE Relocation) (0) | 2015.12.21 |