Entwickler-Ecke
Internet / Netzwerk - Auslesen einer Variable einer anderen .exe
Blackdead - Fr 30.05.08 19:33
Titel: Auslesen einer Variable einer anderen .exe
Hallo,
ich habe eigentlich kein Problem, eher eine Frage, bei deren Beantwortung ich hilfe von erfahrenen Delphi programmierern bräuchte.
Ich habe mir einen kleinen Chat gebastelt, welcher mir mit Hilfe zweier Internetseiten die Server IP des akktuelle Battlefield 2 Server des Clienten ausgibt.
Funktioniert so auch wunderbar, jedoch hätte ich gerne eine elegantere Lösung, da die Seiten:
erstens ein zugriffs Limit haben(sprich maximal x anfragen pro Minute),
zweitens nicht ganz akktuell sind(akktualisierung ca. alle 40 sekunden) und
drittens möchte ich die Seiten nicht überstrapazieren und die Daten akktueller halten...
Nun bin ich verzeifelt am überlegen wie andere Programme z.B Xfire(
http://www.xfire.com) an die Server IP kommen. Das Programm braucht ja auch keine andere Webseite um die Server IP rauszubekommen.
Jetzt zu meiner Frage: Wie kann ich die Server IP noch rausbekommen, ausser durch den zugriff auf andere Webseiten...
Gibt es von dem Programm(in meinem Fall Battlefield 2) irgendwelche einträge, variablen oder sonstiges welche ich auslesen könnte oder gar eine .dll? Wie kann ich diese Variablen auslesen und woher weiss man das es solche Variablen gibt?
Für konstruktive Lösungsvorschläge bedanke ich mich schoneinmal im vorraus.
Moderiert von
AXMD: Topic aus Dateizugriff verschoben am Fr 30.05.2008 um 19:51
AXMD - Fr 30.05.08 19:50
Wenn der aktuelle Server bekannt ist, wo liegt dann Schwierigkeit, dessen IP-Adresse herauszubekommen? :gruebel:
AXMD
Blackdead - Fr 30.05.08 20:05
Der aktuelle Server ist ja der BF2.exe bekannt, jedoch nicht meinem Programm...
Desshalb würde ich gern wissen wie ich den akktuellen wert der BF2.exe entlocken kann, sodass ich ihn auch in meinem Programm benutzen kann.
Ich kann die IP zwar über die anfrage einer Website herrausfinden, will jedoch lieber einen anderen weg, den über das programm(bf2), nehmen, da dieser einfach sicherer ist und mein Programm "unabhängiger" macht.
uall@ogc - Fr 30.05.08 20:13
normalerweise kann manden client per UDP abfragen (ich mein bei CS wars so)
ansonsten musst du die Adresse im Speicher finden wo die IP steht und dann mit OpenProcess / ReadProcesssMemory usw auslesen. dazu findest hier im forum was. TSearch hilft dir denk ich zum finden der Adresse.
Blackdead - Fr 30.05.08 21:03
uall@ogc hat folgendes geschrieben: |
normalerweise kann manden client per UDP abfragen (ich mein bei CS wars so)
ansonsten musst du die Adresse im Speicher finden wo die IP steht und dann mit OpenProcess / ReadProcesssMemory usw auslesen. dazu findest hier im forum was. TSearch hilft dir denk ich zum finden der Adresse. |
Könntest du mir für die Abfrage mit UDP vielleicht ein Beispiel geben?
Mit TSearch habe ich es mal ausprobiert, mir ist jedoch nicht klar nach was ich wirklich suchen soll... ich suche ja den String: "abc.def.ghi.jkl" und was das für ein wert ist, ist mir grad unklar :S
uall@ogc - Fr 30.05.08 21:10
geh aufn server und such nach dem 4bytewert (bei 255.255.0.0 z.b. $0000FFFF)
UDP geradekeine ahnugn google hilft
Blackdead - Fr 30.05.08 22:19
Nicht das hier was falsch verstanden wurde: Ich habe einen Chat-Clienten auf einem pc, auf dem grade Battlefield 2 Online gespielt wird und suche die ip des servers auf dem sich der client befindet. Ich bin also nicht der BF2 serverm das wäre ja leicht... Ich suche die IP des Servers wo sich der Client drauf befindet, bis jetzt habe ich das mit einer Online abfrage herrausbekommen, die jedoch sehr umständlich ist. Ich will jetzt die IP dierekt am Clienten auslesen, irgendwo wird die BF2.exe das schon zwischenspeichern...
@uall@ogc: kleine frage was wäre beispielsweise 62.104.18.14 für ein byte wert?
SAiBOT - Sa 31.05.08 02:21
Ich mache sowas immer mit Socket Hooks!
Blackdead hat folgendes geschrieben: |
@uall@ogc: kleine frage was wäre beispielsweise 62.104.18.14 für ein byte wert? |
Schreibe doch mal mit WriteProcessMemory einen Integerwert in den Speicher und schau dir diese Stelle an. :wink: (Integer sind 4 Bytes groß.)
Blackdead - Sa 31.05.08 12:26
-=LordEvil=- hat folgendes geschrieben: |
Ich mache sowas immer mit Socket Hooks!
[...]
|
Ahhh genau das was ich gesucht habe!
Hättest du eventuell ein kleinen Beispiel Code für einen Socket Hook?
SAiBOT - Sa 31.05.08 16:32
Schau dir erstmal an welche Dll verwendet wird (winsock.dll,ws2_32.dll), fang' die Packete mit einem Sniffer ab und schau dir die Funktionen an die verwendet werden.
'connect' könnte des Rätsels Lösung sein!
Hookbeispiele findest du hier genug!
Diese Methode funktioniert selbstverständlich nur dann wenn die Hookdll den unmittelbaren Connect versuch mitlesen kann!
Dh. sollte der Client bereits mit dem Server verbunden sein, und du injezierst deine "send"-Hook-Dll gibt es kein Resultat.
Es gibt genügend Wege, studiere die Winsock-Funktionen und du wirst keine Probleme haben!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!