Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 18:05

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Kommunikation mit injizierter DLL

Discussion on Kommunikation mit injizierter DLL within the General Coding forum part of the Coders Den category.

Reply
 
Old   #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
Ultimat3 is offline  
Old 05/26/2010, 20:43   #2
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by Ultimat3 View Post
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
Shadow992 is offline  
Thanks
1 User
Old 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.
Akorn is offline  
Thanks
1 User
Old 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?
Ultimat3 is offline  
Old 05/27/2010, 04:19   #5
 
P-a-i-n's Avatar
 
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
P-a-i-n is offline  
Thanks
1 User
Old 05/27/2010, 11:41   #6
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471


Tutorial zu Interprozesskommunikation
xNopex is offline  
Thanks
1 User
Old 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 ^^
Ultimat3 is offline  
Old 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.
Bot_interesierter is offline  
Thanks
1 User
Old 05/28/2010, 18:21   #9
 
elite*gold: 0
Join Date: Mar 2010
Posts: 68
Received Thanks: 21
CreateFileMapping
MapViewOfFile
memcpy
ilovenoodles is offline  
Thanks
1 User
Old 05/29/2010, 07:51   #10


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
NamedPipes
GUIMessages

Denke mal Pipes sind da am schnellsten
buFFy! is offline  
Thanks
1 User
Old 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.
schlurmann is offline  
Thanks
1 User
Old 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 ^^
Ultimat3 is offline  
Old 05/31/2010, 00:26   #13


 
MrSm!th's Avatar
 
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.
MrSm!th is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.