D Dll injection problem
Kagamin
spam at here.lot
Wed Apr 11 06:40:27 PDT 2012
On Wednesday, 11 April 2012 at 13:26:23 UTC, maarten van damme
wrote:
> the code I use for injecting is
>
> /**
> * injectDLL injects a dll in a given process using the
> CreateRemoteThread
> function.
> *
> * arguments:
> * HANDLE proc = A HANDLE to the process
> * string dllName = A string containting the name of the dll
> **/
> void injectDLL(HANDLE proc,string dllName)
> {
> //first we need to get a pointer to the loadlibrary function
> LPVOID LoadLibAddy =
> cast(LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"),
> "LoadLibraryA");
> //The problem is that we need to pass an argument(string) but
> that string
> is in our memory space
> //so we have to allocate space to write our dllName to using
> writeprocessmemory
> LPVOID RemoteString =
> VirtualAllocEx(proc,null,dllName.length,MEM_COMMIT |
> MEM_RESERVE,PAGE_READWRITE);
> //write the dllName
> WriteProcessMemory(proc,RemoteString,toStringz(dllName),dllName.length,null);
> //create a thread in the remote process loading the dll
> CreateRemoteThread(proc, null, 0,
> cast(LPTHREAD_START_ROUTINE)LoadLibAddy,
> cast(LPVOID)RemoteString, 0, null);
> }
Try to run a simple C program like
---
#include <windows.h>
void main()
{
LoadLibraryA("mydll.dll");
}
---
And check whether it fails and how.
More information about the Digitalmars-d-learn
mailing list