| Autor |
Beitrag |
D3lta
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 05.08.09 19:26
hi, ich habe folgende dll:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| #include <windows.h>
HINSTANCE hInst; DWORD PostDLLFunc, GetPixelDLLFunc, SetCursorDLLFunc; HWND hWnd;
__declspec(naked) BOOL WINAPI __stdcall myPostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { __asm { mov edi, edi push ebp mov ebp, esp jmp [PostDLLFunc] } }
__declspec(naked) BOOL WINAPI __stdcall myGetPixel(HDC ) { __asm { mov edi, edi push ebp mov ebp, esp jmp [GetPixelDLLFunc] } }
__declspec(naked) BOOL WINAPI __stdcall mySetCursorPos(int x, int y) { __asm { mov edi, edi push ebp mov ebp, esp jmp [SetCursorDLLFunc] } }
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID ) { switch (dwReason) { case DLL_PROCESS_ATTACH: { if (PostDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); PostDLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; } if (GetPixelDLLFunc == NULL) { hInst = LoadLibrary("gdi32.dll"); GetPixelDLLFunc = (DWORD)GetProcAddress(hInst, "GetPixel") + 5; } if (SetCursorDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); SetCursorDLLFunc = (DWORD)GetProcAddress(hInst, "SetCursorPos") + 5; } } break; case DLL_THREAD_ATTACH: { if (PostDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); PostDLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; } if (GetPixelDLLFunc == NULL) { hInst = LoadLibrary("gdi32.dll"); GetPixelDLLFunc = (DWORD)GetProcAddress(hInst, "GetPixel") + 5; } if (SetCursorDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); SetCursorDLLFunc = (DWORD)GetProcAddress(hInst, "SetCursorPos") + 5; } } break; case DLL_THREAD_DETACH: { if (hInst != NULL) { ::FreeLibrary(hInst); hInst = NULL; } } break; case DLL_PROCESS_DETACH: { if (hInst != NULL) { ::FreeLibrary(hInst); hInst = NULL; } } break; } return TRUE; } |
und möchte die nun in meinem delphi programm benutzen
daher mach ich folgendes:
Delphi-Quelltext 1: 2: 3:
| function mySetCursorPos( x, y:integer; external 's.dll' name 'mySetCursorPos'; |
später is das ja dann denk ich doch mal so aufrufbar:
Delphi-Quelltext
-> aber ich krieg die ganze zeit fehler, anscheinend hab ich die function hier falsch aufgebaut, kann mir wer sagen, was ich falsch gemacht habe?
danke =)
Moderiert von Narses: Delphi-Tags hinzugefügtModeriert von Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 05.08.2009 um 23:25
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 05.08.09 20:11
Delphi-Quelltext 1: 2: 3:
| function mySetCursorPos( x, y:integer; stdcall; external 's.dll' name 'mySetCursorPos'; |
Moderiert von Narses: Delphi-Tags hinzugefügt
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 05.08.09 20:55
danke, so hatte ichs aber auch schon, habs jetzt trotzdem nochmal getestet aber steht immer noch das paar parameter fehlen..
kann das daran liegen das ich über der function noch eine function habe die aus einer anderen dll liest? dann probier ichs mal einzeln aber iwie isses komisch...
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 05.08.09 20:56
das liegt dann eher am Aufruf, wie sieht der denn aus?
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 05.08.09 21:01
das is ja mein prob, ich hab das noch gar nicht aufgerufen
der gibt mir den fehler schon an der function selbst
hier ist die compilierte dll, falls du mal versuchen möchtest
www.sendspace.com/file/vqnvf6
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 05.08.09 21:06
Hab kein Delphi zum testen. Wann kommt denn der Fehler? Beim Laden der dll? Dann ist der Funktionsname nicht richtig geschrieben bzw. die dll (s.dll= wird nicht gefunden. Wenn du die Funktion aufrufen kannst und das Programm abstürzt dann hast die falsche Aufrufkonvention / flasche Parameter.
Wie sieht deine Delphi Implementation aus?
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 05.08.09 21:12
hier hab ich mal nen screenshot vom compilieren
Moderiert von Narses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 05.08.09 21:15
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Mi 05.08.09 21:18
programm läuft jetzt
jetzt müsste ich die function ja aufrufen können über mySetCursorPos(x, y)
x und y werte hab ich vorher festgelegt bzw. z.B mySetCursorPos(500, 500);
aber ich krieg damit schon beim kompilieren ne fehlermeldung
anwendung konnte nicht initialisiert werden...
kommt beim compilieren.. wird also noch compiliert aber kann dann nicht mehr gestartet werden
die function wird ja nichtmal von anfang an benutzt
lediglich wird die function deklariert <- dannach lässt sich das programm starten
sobald ich dann aber mit mysetcursorpos(x,y) compiliere crasht das programm oO
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 06.08.09 12:34
hier wird die dll in glaub "autoit" benutzt
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Func _MouseMove ($dllHandle, $hwnd, $posx, $posy) Local $result ; Get Cursor position revlativ to global screen coordinates Local $tpoint = DllStructCreate("int X;int Y") DllStructSetData($tpoint, "X", $posx) DllStructSetData($tpoint, "Y", $posy) _WinAPI_ClientToScreen($hwnd, $tpoint) ; Set Cursor $result = DllCall($dllHandle, "long", "mySetCursorPos", "int", DllStructGetData($tpoint, "X"), "int", DllStructGetData($tpoint, "Y")) Return $tpoint EndFunc |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| WinActivate($flyffHwnd) Local $pos = WinGetPos(HWnd($flyffHwnd)) Local $posx = 10 Local $posy = 10 while $posx < $pos[2] - 10 While $posy < $pos[3] -10 _MouseMove($dllHandle, $flyffHwnd, $posx, $posy) $posy += 10 Sleep(10) WEnd $posx += 10 $posy = 10 WEnd |
vll kann mir ja wer damit helfen
wie gesagt, function is drin = programm kann compiliert werden
function wird irgendwo dann ausgeführt (programm stürtzt gleich beim start ab wobei die function in nem ausgeschalteten timer drinsteckt..
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 06.08.09 15:02
Ich kann mir nicht vorstellen das dein Programm abschmiert ohne dir irgend eine Meldung anzuzeigen. Diese Meldung könntest du uns ruhig mal posten.
Zudem, bist du dir sicher das die Dll auch von deiner Exe gefunden wird? Sich also im gleichen Verzeichnis wie die Exe befindet?
Ist Dll mit Sicherheit nativ? Also keine DOT NET Dll?
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 06.08.09 15:14
tut mir leid, hier ein screenshot wenn ich compiliere
img5.imagebanana.com/img/9co1zw6/scr2.gif <- fehlermeldung und untendrunter hab ich noch die function und meinen aufruf dazu geschrieben..
zu der dll kann ich nich so wirklich viel sagen, ich hab die aus nem forum (source)
hier:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| #include <windows.h>
HINSTANCE hInst; DWORD PostDLLFunc, GetPixelDLLFunc, SetCursorDLLFunc; HWND hWnd;
__declspec(naked) BOOL WINAPI __stdcall myPostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { __asm { mov edi, edi push ebp mov ebp, esp jmp [PostDLLFunc] } }
__declspec(naked) BOOL WINAPI __stdcall myGetPixel(HDC ) { __asm { mov edi, edi push ebp mov ebp, esp jmp [GetPixelDLLFunc] } }
__declspec(naked) BOOL WINAPI __stdcall mySetCursorPos(int x, int y) { __asm { mov edi, edi push ebp mov ebp, esp jmp [SetCursorDLLFunc] } }
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReason*/) { switch (dwReason) { case DLL_PROCESS_ATTACH: { if (PostDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); PostDLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; } if (GetPixelDLLFunc == NULL) { hInst = LoadLibrary("gdi32.dll"); GetPixelDLLFunc = (DWORD)GetProcAddress(hInst, "GetPixel") + 5; } if (SetCursorDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); SetCursorDLLFunc = (DWORD)GetProcAddress(hInst, "SetCursorPos") + 5; } } break; case DLL_THREAD_ATTACH: { if (PostDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); PostDLLFunc = (DWORD)GetProcAddress(hInst, "PostMessageA") + 5; } if (GetPixelDLLFunc == NULL) { hInst = LoadLibrary("gdi32.dll"); GetPixelDLLFunc = (DWORD)GetProcAddress(hInst, "GetPixel") + 5; } if (SetCursorDLLFunc == NULL) { hInst = LoadLibrary("user32.dll"); SetCursorDLLFunc = (DWORD)GetProcAddress(hInst, "SetCursorPos") + 5; } } break; case DLL_THREAD_DETACH: { if (hInst != NULL) { // Un-Load DLL ::FreeLibrary(hInst); hInst = NULL; } } break; case DLL_PROCESS_DETACH: { if (hInst != NULL) { // Un-Load DLL ::FreeLibrary(hInst); hInst = NULL; } } break; } return TRUE; } |
und hier noch die exports.def
Quelltext 1: 2: 3: 4: 5:
| LIBRARY "BypassedDLLCalls" EXPORTS myPostMessageA myGetPixel mySetCursorPos |
(mit Visual C++2008 compilierbar)
hier habe ich die dll hier:
www.ingamers.de/flyf...rundlagen-90026.html
vll hilft das ja
die dll hab ich natürlich im selben verzeichnis..
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 06.08.09 16:05
Ich verstehe echt nicht ganz was dir die Verwendung dieser DLL bringen soll. Alle drei exportierten Funktionen sind in der User32.dll enthalten. Und wenn du sie von dort verwendest dürfte es auch ohne Probleme funktionieren.
Denn das was da beim initialisieren der Dll angestellt wird ist nichts anderes wie genau die drei Funktionen, die exportiert werden, zu laden. Wobei aus irgend einem Grund die Startadresse der Funktionen geändert wird.
myPostMessageA = PostMessageA in User32.dll
myGetPixel = GetPixel in User32.dll
mySetCursorPos = SetCursorPos in User32.dll
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 06.08.09 16:13
jo, das is der sinn davon das ich die startadressen der functionen verändere
haste eine idee wie ich die function richtig in delphi benutzen kann? =)
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 06.08.09 17:29
Ich verstehe erhlich gesagt nicht was dir das bringen soll. Denn du weist ja sicherlich nicht wie die Funktionen intern aufgebaut sind. Da einfach mal so ein (oder 5) Byte weiter hinten anzufangen halte ich da für recht gefährlich.
Ich denke das der Fehler auf ein Problem im DllMain hindeutet. Denn wenn das laden der Dll nicht klappen würde sähe die Meldung beim Start der Exe anders aus.
Bist du dir sicher das du DllMain richtig deklariert hast?
C#-Quelltext 1:
| BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID ) |
Müsste das nicht eigentlich so sein?
C#-Quelltext 1:
| BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpvReason) |
Oder den letzten Parameter ganz weg?
So wie ich das sehe produzierst du im DllMain einen Nullpointer, wo das sein könnte sehe ich aber nicht.
Das könntest du aber mit VS rausbekommen indem du die Dll mit dem Debugger startest. (Haltepunkt in DllMain stellen)
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
D3lta 
Hält's aus hier
Beiträge: 15
|
Verfasst: Do 06.08.09 17:45
so leute, danke für eure hilfe so wies aussieht is anscheinend wirklich meine dll mist..
ich hab jetzt eine andere dafür verwendet und das funktioniert reibungslos. dafür hab ich halt leider nich die dll source.
sinn und zweck davon ist es z.B. gameguard zu umgehen da dieser z.B. setcursorpos verbiegt
daher einfachw o anders einspringen lassen und es geht wieder 
|
|