|
You last visited: Today at 18:05
Advertisement
Kommunikation mit injizierter DLL
Discussion on Kommunikation mit injizierter DLL within the General Coding forum part of the Coders Den category.
05/26/2010, 20:38
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 9
Received Thanks: 1
|
Kommunikation mit injizierter DLL
Hey, ich hab mal ne Frage und hoffe das das hier die richtige Section ist. Ich würde ganz gerne wissen, wie man, wenn man eine DLL in einen fremden Prozess injected hat, am besten mit dieser kommuniziert. Ich würde nämlich gerne einen kleinen Multi-Speedhack mit GetTickCount hook schreiben (die DLL ist schon fertig und läuft auch), nur weiß ich nicht wie ich mit der injizierten DLL dann kommunizieren soll um z.B. die Geschwindigkeit zu regulieren. Die Geschwindigkeit in eine Datei zu speichern erscheint mir irgendwie ziemlich unsauber. Ist es irgendwie möglich, Funktionen in der injizierten DLL aufzurufen (vom externen Interface aus)? Ich code übrigens mit VC++. Hoffe auf Hilfe, jeder der etwas nützliches antwortet bekommt ein Thanks, danke schon mal im Vorraus
|
|
|
05/26/2010, 20:43
|
#2
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
|
Quote:
Originally Posted by Ultimat3
Hey, ich hab mal ne Frage und hoffe das das hier die richtige Section ist. Ich würde ganz gerne wissen, wie man, wenn man eine DLL in einen fremden Prozess injected hat, am besten mit dieser kommuniziert. Ich würde nämlich gerne einen kleinen Multi-Speedhack mit GetTickCount hook schreiben (die DLL ist schon fertig und läuft auch), nur weiß ich nicht wie ich mit der injizierten DLL dann kommunizieren soll um z.B. die Geschwindigkeit zu regulieren. Die Geschwindigkeit in eine Datei zu speichern erscheint mir irgendwie ziemlich unsauber. Ist es irgendwie möglich, Funktionen in der injizierten DLL aufzurufen (vom externen Interface aus)? Ich code übrigens mit VC++. Hoffe auf Hilfe, jeder der etwas nützliches antwortet bekommt ein Thanks, danke schon mal im Vorraus 
|
Ich kenn mich zwar auf diesem Gebiet nicht so gut aus , aber ich würde es über eine TCP-Connection probieren , am besten an den Localhost , dann sollte es gehen
|
|
|
05/26/2010, 20:54
|
#3
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Ansich könntest du ja den Regler mit dem du die geschwindichkeit angibst mit in die dll einbauen. Ansonsten musste dich mal über interprocess comunication informieren, die wird bei windows meist einfach mit sockets realiesiert.
|
|
|
05/26/2010, 20:59
|
#4
|
elite*gold: 0
Join Date: Jan 2010
Posts: 9
Received Thanks: 1
|
Danke für eure Antworten schon mal, an eine TCP connection hatte ich auch schon gedacht. Aber wie macht es denn z.B. Cheat Engine? Diese gewaltigen Datenmengen können ja nicht einfach per TCP übertragen werden, oder? Das Beste wäre imo wirklich, wenn es eine Möglichkeit gäbe, Funktionen in der injizierten Instanz der DLL aufrufen zu können. Weiß jemand, ob sowas möglich ist?
|
|
|
05/27/2010, 04:19
|
#5
|
elite*gold: 0
Join Date: Nov 2009
Posts: 1,258
Received Thanks: 396
|
das geht ganz einfach wenn dein timer eine zeit hat
machst int a = 100; z.B a ist dann die zeitangabe für die sekunden bzw millisekunden
dann könntest du per hotkey die zeit hochsetzen
so hier z.B#
if (GetKeyState(VK_F12)<0)a++ ; zum hochsetzen
if (GetKeyState(VK_F11)<0)a--; zum runtersetzen
nachteil man sieht nicht wie hoch oder tief die zeit eingestellt wird
aber wenn du was mit DX hast kannst du die zeit ausgeben lassen
das würde dann so aussehen
DeinFunktionZumStringsZeichnen(10, 10, D3DCOLOR_ARGB(255, 255, 0, 0 ),Front,"Zeit: %d", a )
aber wie du es machst mußt du wissen gibt viele wege der einfachste find ich ist die zeit in eine ini bzw config zu schreiben
|
|
|
05/27/2010, 11:41
|
#6
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Tutorial zu Interprozesskommunikation
|
|
|
05/27/2010, 15:07
|
#7
|
elite*gold: 0
Join Date: Jan 2010
Posts: 9
Received Thanks: 1
|
Ein DX Hook würde mich wieder auf eine bestimmte DX Version festlegen und Hotkeys find ich persönlich auch nicht so toll. Die Idee mit den Pipes finde ich sehr gut, danke, hast mir sehr geholfen, xNopex  Kann closed werden ^^
|
|
|
05/27/2010, 16:41
|
#8
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Es gibt noch die Möglichkeit einer shared section

Das ist wohl die schnellste Methode für IPC
Dabei teilt jede Instanz der DLL sich die Shared Section, also ist es über diese Möglich zwischen den Instanzen der DLL Daten zu transferieren, das Prinzip ist eigentlich das Gleiche wie bei den Pipes, nämlich das ein Buffer zwischen mehreren Prozessen geteilt wird, nur kommt man mit einer Shared Section ohne Windows API calls aus und kann die Kommunikation damit günstiger Implementieren als über Pipes, allerdings ist das mit etwas mehr Aufwand verbunden als das Verwenden von Pipes.
Wenn du ein Bespiel für Shared Memory suchst, dann schau dir den Source Code von WoW!Sharp an, die DLL welche WoW!Sharp in WoW injizierte benutzt Shared Memory für die Kommunikation mit dem C# teil des bots, allerdings ist das nicht Optimal implementiert, wenn man das so macht wie WoW!Sharp ist es nur möglich eine DLL auf einmal zu Injekten.
|
|
|
05/28/2010, 18:21
|
#9
|
elite*gold: 0
Join Date: Mar 2010
Posts: 68
Received Thanks: 21
|
CreateFileMapping
MapViewOfFile
memcpy
|
|
|
05/29/2010, 07:51
|
#10
|
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
|
NamedPipes
GUIMessages
Denke mal Pipes sind da am schnellsten
|
|
|
05/29/2010, 19:39
|
#11
|
elite*gold: 0
Join Date: May 2008
Posts: 489
Received Thanks: 210
|
Wenn du sowieso hookst bietet sich ein ingame GUI an. Ist leicht zu realisieren und macht es sowohl für dich als auch den Benutzer einfacher.
|
|
|
05/30/2010, 17:39
|
#12
|
elite*gold: 0
Join Date: Jan 2010
Posts: 9
Received Thanks: 1
|
Danke für eure Antworten, hab mich jetzt für Named Pipes entschieden, reicht für mein Vorhaben vollkommen aus ^^
|
|
|
05/31/2010, 00:26
|
#13
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,909
Received Thanks: 25,409
|
Ich würd sagen Pipes, FileMappings (sind doch auch für inter process communication oder?) oder auch Messages.
Gibt ja WM_DATA oder so als Messagetyp.
Da wäre auch noch die sehr unflexible, unelegante nooblike Version mit einer gemeinsam genutzten Datei (ini, txt oder sonst was), würde ich aber nich empfehlen ;D
TCP halte ich dafür auch nicht so besonders, auch wenn es sich mit dem Localhost verbindet, meckert in dem Falle normalerweise die Firewall.
Quote:
|
Danke für eure Antworten schon mal, an eine TCP connection hatte ich auch schon gedacht. Aber wie macht es denn z.B. Cheat Engine? Diese gewaltigen Datenmengen können ja nicht einfach per TCP übertragen werden, oder? Das Beste wäre imo wirklich, wenn es eine Möglichkeit gäbe, Funktionen in der injizierten Instanz der DLL aufrufen zu können. Weiß jemand, ob sowas möglich ist?
|
CE kommuniziert glaube ich per FileMappings oder Pipes...denke mal eher Pipes, da es schneller geht.
|
|
|
Similar Threads
|
[Frage] Addon kommunikation per z.b. TCP?
10/19/2009 - World of Warcraft - 2 Replies
Ist es möglich ein Addon mit einem Server kommunizieren zu lassen, bzw. Informationen an jenen weiterzuleiten?
Wenn ja, wie würde das funktionieren?
Welche Möglichkeiten gibt es dafür?
Beispiel: DamageMeter des Raids wird nach dem Kampf automatisch auf der GildenHP aktualisiert.
|
process/thread kommunikation
06/08/2009 - General Coding - 1 Replies
hi :)
ich hab ne dll, die funktionen enthält die ich gerne aufrufen würde. problem ist, dass diese dll injeziert wird. also kann ich ja nicht diese funktionen exportieren und benutzen oO ( extern "C" void bloop(); ) ???
wie kann ich also die dll wissen lassen, wann ich diese funktion benutzen will? was gibts da für schnittstellen? klärt mich ma bischen auf ;)
danke jetzt schonmal!
|
All times are GMT +1. The time now is 18:06.
|
|