Re: D Dll injection problem

2012-05-16 Thread Kagamin
Hmm... It's probably confused by multiple threads. You can try to 
copy the source for dll_process_attach and insert debugging code 
there.


Re: D Dll injection problem

2012-05-15 Thread Gyron

On Monday, 14 May 2012 at 09:53:55 UTC, Kagamin wrote:

Try to make C dll, which loads D dll, and inject the C dll :)


I made a bootstrapper (a c DLL which loads the D Dll) and it 
works fine (the D entrypoint get called (a made a msgbox test) 
but then the Process freezes after it displayed the MsgBox.


C Dll:

#include windows.h

bool _stdcall DllMain(_In_ void * _HDllHandle, _In_ unsigned 
_Reason, _In_opt_ void * _Reserved)

{
if(_Reason == DLL_PROCESS_ATTACH)
{
MessageBox(NULL,Ltest,Ltest,MB_OK);
LPTHREAD_START_ROUTINE LoadLibAddy =

(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(Lkernel32.dll),

LoadLibraryA);

CreateThread(NULL,0,LoadLibAddy,C:\\Users\\Moritz\\Documents\\Visual 
Studio 
11\\Projects\\D_Projects\\D_BootStrapper\\Debug\\DAstral.dll,0,NULL);

}

return true;
}

D Dll:
import std.c.windows.windows;
import core.sys.windows.dll;

__gshared HINSTANCE g_hInst;

extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID
pvReserved)
{
final switch (ulReason)
{
case DLL_PROCESS_ATTACH:
g_hInst = hInstance;
MessageBoxA(null,test2,test2,MB_OK);
dll_process_attach( hInstance, true );
break;

case DLL_PROCESS_DETACH:
dll_process_detach( hInstance, true );
break;

case DLL_THREAD_ATTACH:
MessageBoxA(null,test,test,MB_OK);
dll_thread_attach( true, true );
break;

case DLL_THREAD_DETACH:
dll_thread_detach( true, true );
break;
}
return true;
}

Any help ?


Re: D Dll injection problem

2012-05-14 Thread Kagamin

Try to make C dll, which loads D dll, and inject the C dll :)


Re: D Dll injection problem

2012-05-13 Thread maarten van damme
I found a couple of errors in my code but couldn't get it to work.


Re: D Dll injection problem

2012-05-12 Thread Gyron

On Thursday, 12 April 2012 at 14:43:01 UTC, maarten van damme
wrote:

works and GetLastError() returns 0 in both cases.

Op 12 april 2012 16:13 schreef Kagamin s...@here.lot het 
volgende:



#include windows.h
void main()
{
 LPTHREAD_START_ROUTINE LoadLibAddy = 
(LPTHREAD_START_ROUTINE)**
GetProcAddress(**GetModuleHandle(kernel32.dll**), 
LoadLibraryA);

 CreateThread(NULL,0,**LoadLibAddy,mydll.dll,0,**NULL);
}

?


Any news about the Problem with D ?

I really would like to use D for that.


Re: D Dll injection problem

2012-04-12 Thread maarten van damme
I tried again with a few other random C dll's stolen around my system and
they all work perfectly. it's only the D dll that gives me trouble.


Re: D Dll injection problem

2012-04-12 Thread Kagamin

#include windows.h
void main()
{
  LPTHREAD_START_ROUTINE LoadLibAddy = 
(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(kernel32.dll), 
LoadLibraryA);

  CreateThread(NULL,0,LoadLibAddy,mydll.dll,0,NULL);
}

?


Re: D Dll injection problem

2012-04-12 Thread maarten van damme
works and GetLastError() returns 0 in both cases.

Op 12 april 2012 16:13 schreef Kagamin s...@here.lot het volgende:

 #include windows.h
 void main()
 {
  LPTHREAD_START_ROUTINE LoadLibAddy = (LPTHREAD_START_ROUTINE)**
 GetProcAddress(**GetModuleHandle(kernel32.dll**), LoadLibraryA);
  CreateThread(NULL,0,**LoadLibAddy,mydll.dll,0,**NULL);
 }

 ?



Re: D Dll injection problem

2012-04-11 Thread maarten van damme
I went ahead and went back to as far as 2.045 and I still couldn't get a
working dll. This would suggest something is wrong with my dll injection
code but I've tested with a few other random dll's and that appears to
work. according to my debugger the problem is an access violation while
executing the main function of the D dll.
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);
}

Op 28 maart 2012 13:13 schreef Trass3r u...@known.com het volgende:

 this works on every dll I try to inject apart from dll's written in D
 (starting with dmd version 2,054 or something like that).


 If this is a regression, please narrow it down to the exact version.



Re: D Dll injection problem

2012-04-11 Thread Kagamin
On Wednesday, 11 April 2012 at 13:26:23 UTC, maarten van damme 
wrote:
I went ahead and went back to as far as 2.045 and I still 
couldn't get a
working dll. This would suggest something is wrong with my dll 
injection
code but I've tested with a few other random dll's and that 
appears to
work. according to my debugger the problem is an access 
violation while

executing the main function of the D dll.


How do you initialize runtime and GC?


Re: D Dll injection problem

2012-04-11 Thread Kagamin
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.


Re: D Dll injection problem

2012-03-28 Thread maarten van damme
I wrote my own injector and this makes the target exe call loadlibrary.
this works on every dll I try to inject apart from dll's written in D
(starting with dmd version 2,054 or something like that).
I'll try with D calling loadlibrary on D dll's this evening.


D Dll injection problem

2012-03-27 Thread Gyron
Hey there, I want to inject a dll which was created in D into a c 
Program.


Informations:
DMD vs. 2.058
IDE: MonoDevelop with Mono-D
System: Windows 7 64bit

Program Informations:
32-bit
written in c

The Injector is working for sure, so thats not the Problem.

the Source of the DLL:
import std.c.windows.windows;
import core.sys.windows.dll;

__gshared HINSTANCE g_hInst;

extern (Windows)
BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID 
pvReserved)

{
final switch (ulReason)
{
case DLL_PROCESS_ATTACH:
g_hInst = hInstance;
dll_process_attach( hInstance, true );
break;

case DLL_PROCESS_DETACH:
dll_process_detach( hInstance, true );
break;

case DLL_THREAD_ATTACH:
dll_thread_attach( true, true );
break;

case DLL_THREAD_DETACH:
dll_thread_detach( true, true );
break;
}
return true;
}

It builds fine, but If I inject it, the program (where the dll is 
injected) says that the dll is not a valid image.

screenshot: http://imagr.eu/up/4f72240329a846_Unbenannt.png

Maybe it's because I have no def file.
But i dont know how to link it with Mono-D.



Re: D Dll injection problem

2012-03-27 Thread maarten van damme
when I tried the previous dmd compiler (have yet to try the curent one on
this problem) I got the same problems while trying to compile a dll and use
it. I have no clue as to why this is happening. worked in 2.54 I thought


Re: D Dll injection problem

2012-03-27 Thread Gyron
On Tuesday, 27 March 2012 at 20:45:52 UTC, maarten van damme 
wrote:
when I tried the previous dmd compiler (have yet to try the 
curent one on
this problem) I got the same problems while trying to compile a 
dll and use
it. I have no clue as to why this is happening. worked in 2.54 
I thought


I thought D would be a good alternative for c++, but as it seems 
I need to stay with c++ :/

Thats really bad, a minus point on my Why choose D list.


Re: D Dll injection problem

2012-03-27 Thread Trass3r

Maybe it's because I have no def file.


Very possible.
Just pass it to dmd like the other files.
Or try the new -shared flag.


Re: D Dll injection problem

2012-03-27 Thread Gyron

On Tuesday, 27 March 2012 at 21:12:59 UTC, Trass3r wrote:

Maybe it's because I have no def file.


Very possible.
Just pass it to dmd like the other files.
Or try the new -shared flag.


I have tried both now (shared and def file linking), but know 
it's crashing my App, lol.


I inject it but it returns nothing and the App(where the dll is 
injected) is hanging( not responding).


Could you try it maybe?
I would like to know whether it's a Problem with D or with me.


Re: D Dll injection problem

2012-03-27 Thread Trass3r
I inject it but it returns nothing and the App(where the dll is  
injected) is hanging( not responding).


Could you try it maybe?
I would like to know whether it's a Problem with D or with me.


Are dlls without injection working?


Re: D Dll injection problem

2012-03-27 Thread Gyron

On Tuesday, 27 March 2012 at 21:46:23 UTC, Trass3r wrote:
I inject it but it returns nothing and the App(where the dll 
is injected) is hanging( not responding).


Could you try it maybe?
I would like to know whether it's a Problem with D or with me.


Are dlls without injection working?


I don't know, haven't tested it.
Will test it when I'm back home, but I think they work( not sure).