/Windows-DLL-Injector

Some DLL Injection techniques in C++ implemented for both x86 and x64 windows OS processes

Primary LanguageC++

WindowsDLLInjector

Some DLL Injection techniques written in C++ for both 32bit and 64bit windows OS

Intro

There are several ways for injecting a dll or generally a process in another target process
It has many advantages such as accessing that process memory address and extending it's functionality
In abuse cases it can be used to hide malicious activity in another process and somehow bypass antivirus detection

each one has it's pros and cons

Here we have implemented 5/7 techniques

  •       CreateRemoteThread (windows Win32 API through windows.h)
  •       NtCreateThread (windows native API through ntdll.dll)
  •       QueueUserAPC
  •       SetWindowsHookEx
  •       RtlCreateUserThread (windows native API through ntdll.dll)
  •       SetThreadContext
  •       ReflectiveDllInjection

CreateRemoteThread

Maybe it's the first google search result for dll injection
This API is mapped to NtCreateThread native API Very well documented and easy to code!

Pros.
       Easy to implement (maybe just 5 lines of code)
       well documented on internet

Cons.
       Easy to detect
       not possible on all processes (specially windows NT native processes)

NtCreateThread

Acually not as easy as CreateRemoteThread method
It needs some header definitin and function pointer casting to get the address of NtCreateThread in ntdll.dll
A little hard to implement but very effective against windows native system processes

Pros.
       Can be used for windows native NT processes (like : svchost, smss, ...)
       Harder to be detected

Cons.
       A little hard to implement and debug
       no official documentation

QueueUserAPC

This method is about hijacking and using a thread in target process
As documented in msdn, the function call QueueUserAPC() adds user-mode asychronous procedure call(APC) object to the APC queue of specified thread
Actually we don't create our own thread and just use the target process's threads for loading our dll into the process address space
Notice that to make this method work, The remote target thread should be in suspended state and with alertable flag (Example SleepEx() in TargetProgram.cpp)

Pros.
       No need for creating new Threads
       It adds some stealthy abilities for injection (cause no new thead would be created)

Cons.
       Not always possible on all threads (just suspended threads with alertable flag)

SetWindowsHookEx

This method actually is for setting Windows Hook for specific events like keyboard or mouse event
But since the hook procedure should be in form of exported function in a dll file in the target process,
This makes it possible to use it as a dll injection method
This one is kinda different one because neither thread nor APC is created but A hook is set in target process for a specific thread

Pros.
       No need for creating new Threads or APC call
       Easy to use spcially with thread ID equals 0 :)

Cons.
       Too suspicious for antivirus detection because of using hooks

RtlCreatUserThread

Same as NtCreateThread with some possible wrapping

Pros.
       Can be used for windows native NT processes (like : svchost, smss, ...)
       Harder to be detected

Cons.
       A little hard to implement and debug
       no official documentation



Credit

Many thanks for fdiskyou and his InjectAllTheThings (nice name) repository
His Repo : https://github.com/fdiskyou/injectAllTheThings
His website : http://deniable.org