Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Daten verbindung von einem Programm abhöhren? (https://www.delphipraxis.net/37161-daten-verbindung-von-einem-programm-abhoehren.html)

Kedariodakon 1. Jan 2005 16:38


Daten verbindung von einem Programm abhöhren?
 
Also ich hab nen Client der ist verbunden mit einem Server...

Nun möchte ich den Datenverkehr vom Server und vom Client sehen, is das irgendwie möglich?
Ich will nur wissen was das Programm sendet und empfängt, um es noch extra wo visuell darzustellen :zwinker:


Wo fang ich da am besten an?
Hat jemand sowas vielleicht schon gemacht?
Kann man sowas mit Delphi überhaupt realisieren, oder muss ich da auf c/c++ umsteigen fuer, oder besser auch benutzen :gruebel:


Wer nett wen wer einen Rat hätte...

Bye

PierreB 1. Jan 2005 16:41

Re: Daten verbindung von einem Programm abhöhren?
 
Das was du brauchst ist wohl ein Sniffer.
Dieser fängt alle Daten ab die die Netzwerkkarte sendet oder empfängt.

Im Netz findest z.b. bei chip.de solltest du einige gute finden,
ob man das (oder besser wie man das) programmiert weiß ich allerdings nicht.

Kedariodakon 1. Jan 2005 16:44

Re: Daten verbindung von einem Programm abhöhren?
 
sowas will ich ja net, ich brauch nur die eine verbindung und net alle Packete ^^
Außerdem will ich das in einem eigenem Programm realisieren, da genau besteht das Prob :angel2:

Bye

supermuckl 1. Jan 2005 16:45

Re: Daten verbindung von einem Programm abhöhren?
 
Hier im Forum suchensnoop
Hier im Forum suchenpcab

Kedariodakon 1. Jan 2005 17:11

Re: Daten verbindung von einem Programm abhöhren?
 
Hmm das sollte wenn möglich keine Extra Treiber benötigen =/
Vielleicht sollte ich direkt am Client ansetzen?


Bye

supermuckl 1. Jan 2005 17:19

Re: Daten verbindung von einem Programm abhöhren?
 
ohne extra treiber kannst du keine lückenlose sniffing aktion durchführen

PierreB 1. Jan 2005 17:23

Re: Daten verbindung von einem Programm abhöhren?
 
Wenn du einfach nur die Daten die zwischen Client & Server gesendet werden haben willst,
dann mach das doch einfach !

Mach einfach ein neues Memo-Feld, und sobald dein Client etwas sendet oder empfängt, packst du es in das Memo ! (Wenn ich das so richtig verstanden habe was du machen willst).

Mit den Statistiken müsstest du dann ma gucken.....

HERMES 1. Jan 2005 22:35

Re: Daten verbindung von einem Programm abhöhren?
 
Also wenn man das nicht auf packetabene machen will geht das soweit ich weis ohne treiber. Man muss bestimmte interfaces implementieren und registrieren, sowie eine personal firewall. Das ganze ist ist im SDK dokumentiert.

supermuckl 1. Jan 2005 23:48

Re: Daten verbindung von einem Programm abhöhren?
 
und was meinste was die personal firewall macht ?
die installiert ebenso einen treiber oder macht sonst was mit dem system, was kein normalsterblicher, der sein selbstgebauten internetverkehr abhören möchte, coden wird

und ausserdem blick ich net ganz für was man eine personal firewall braucht, um seinen selbst gesendeten traffic aus dem eigenen programm zu sehen o_O

ich würde einfach die indys nehmen und noch ein wenig im source rumfummeln, damit da evtl auf applicationlayer eine schnittstelle kriegst.

auf tcp, ip, ethernetlayer kannst ohne sniffen nicht rankommen
und da ist bisweilen nur mit treiber eine lückenlose überwachung aller pakete möglich

Torpedo 2. Jan 2005 00:00

Re: Daten verbindung von einem Programm abhöhren?
 
Du könntest auch einfach die IP und den Port so umändern, dass das Programm zu einem anderen Programm (von dir geschrieben) auf deinem Computer connected.
Dieses Programm connected dann zum eigentlichen Ziel und sendet dann die Daten weiter und Antworten zurück.
Diese kannst du dir dann in Memos anzeigen lassen.

So ein Programm habe ich schon einmal geschrieben. Funktioniert auch ganz gut, so lange das Programm nur einen Port benutzt und man weiß wie die Daten gesendet werden.

supermuckl 2. Jan 2005 00:04

Re: Daten verbindung von einem Programm abhöhren?
 
das wäre aber nonsense, weil das kann er ja ultra einfach selbst in seinem programm mitloggen
aber vermutlich will er halt auch noch den tcp, ip und ethernet layer haben, den er aber auch mit deiner methode nicht ohne sniffing bekommt

Torpedo 2. Jan 2005 00:05

Re: Daten verbindung von einem Programm abhöhren?
 
Vielleicht ist es ja nicht sein Programm :)

supermuckl 2. Jan 2005 00:16

Re: Daten verbindung von einem Programm abhöhren?
 
jop
irgendwie denk ich grad zuviel nach ;)

HERMES 2. Jan 2005 01:37

Re: Daten verbindung von einem Programm abhöhren?
 
1. Weil ihr hier so einen Auf(st/w)and gemacht habt, hab das so verstanden, dass die Client/server anwendungen Fremdprogramme wären und es hier ums generelle abhören einer solchen Verbindung geht.

2. Ich weiss definitiv, dass es auf oben von mir genannte art geht ( eigene erfahrung ;-)).

3. Eine personal firewall könnte diesen ansatz nutzen oder über einen treiber gehen

4. Auch personal firewalls wurden von menschen entwickelt ( und ( andere ) treiber auch )!

supermuckl 2. Jan 2005 01:42

Re: Daten verbindung von einem Programm abhöhren?
 
OT:
Zitat:

4. Auch personal firewalls wurden von menschen entwickelt ( und ( andere ) treiber auch )!
aber nur wenn wir nicht in einer matrix leben :coder:
/OT

c113plpbr 2. Jan 2005 15:42

Re: Daten verbindung von einem Programm abhöhren?
 
ööhm, ja, so ziemlich jede funktion, die aus irgendeiner DLL exportiert wird, ist abfangbar, per API-Hooking. D.h. wenn du die richtigen funktionen abfängst, mit welchen der client die daten empfängt, bzw. sendet, kannst du da problemlos mithören ... ;)

Das ganze ist, soweit ich das weis, nicht allzu einfach, aber es gibt anscheinend leute, die das schon gemacht haben. Eine gute API-Hooking-Lib (madCodeHook) findest du unter http://www.madshi.net/ zum download.
Du wirst da warscheinlich ein paar funktionen aus Winsock hooken müssen, und das haben schon mehrere versucht, vielleicht findest du ja deshalb unter http://forum.madshi.net/ hilfe.

ciao, Philipp

fiasko 2. Jan 2005 21:13

Re: Daten verbindung von einem Programm abhöhren?
 
Hallo,

ich sehe da drei mögliche Wege:
- alles mit ethereal sniffen, sich ein Packet suchen welches zur Verbindung gehört und dann den gesamten Verbindungsablauf verfolgen lassen
- Programm schreiben welches als man-in-the-middle arbeitet
- die winsock überladen oder per API-Hook die aufrufe umlenken

Kedariodakon 4. Jan 2005 08:26

Re: Daten verbindung von einem Programm abhöhren?
 
Morgen ^^
Ok, dann werde ich mal alle Spekulationen beseitigen!

Also Das Programm was ich abhören/weiterleiten möchte ist nicht von mir!
Das Ziel des Programms ist bekannt!
Um dem Programm handelt es sich um ein Client zu einem MMORPG…

Was will ich tun?
1. Den Client auf einen anderen Server umleiten, OHNE den Client zu verändern, da das gegen die Eula verstoßen würde…
Und dies so einfach wie möglich, und mit auswählbaren Zielen…
2. Ich möchte alle gesendeten Daten Pakete dieses Clients protokollieren um bei der Programmierung eines Server-Emulators zu unterstützen und auch was dabei zu lernen…

Es gibt schon ein Programm um die Pakete zu sammeln und es wurde in Java geschrieben, also wird es sich nicht um einen Treiber handeln, aber ich bekomme dafür nicht den Source um das WIE zu begreifen…

Also ich hoffe es hat mich nun jeder verstanden und ich hoffe das jemand nun einen guten Tip hat, welchem ich nachgehen kann.

Bye

Mystic 4. Jan 2005 09:46

Re: Daten verbindung von einem Programm abhöhren?
 
Wenn du dir mal die EULA anschaust wirst du wahrscheinlich auch eine Klausel finden die das Manipulieren der Verbindung oder den Daten zwischen Client und Server verbietet... Z.B. bei Warcraft III <--> Battle.net ist das so.

endeffects 4. Jan 2005 10:43

Re: Daten verbindung von einem Programm abhöhren?
 
java solltest du eigentlich ohne weiteres decompilieren können,
gibt dazu sogar einige online-decompiler, ob dich das dann weiter
bringt ist natürlich eine andere frage

Kedariodakon 4. Jan 2005 10:50

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von Mystic
Wenn du dir mal die EULA anschaust wirst du wahrscheinlich auch eine Klausel finden die das Manipulieren der Verbindung oder den Daten zwischen Client und Server verbietet... Z.B. bei Warcraft III <--> Battle.net ist das so.

Das Problem ist ja das zugänglich machen der Verbindung für die Spieler auf dem Server!
Den Server betreiben ist nicht verboten, dass Spielen, naja ist dem Spieler seine Sache :zwinker:

Aber als Betreiber des Servers, darf ich die Inf-File nicht anbieten, den damit mach ich mich strafbar!
Mit dem Anbieten dieses Programmes nicht!

Aber das wird nun OT ^^

Bye

Kedariodakon 4. Jan 2005 18:09

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von c113plpbr
ööhm, ja, so ziemlich jede funktion, die aus irgendeiner DLL exportiert wird, ist abfangbar, per API-Hooking. D.h. wenn du die richtigen funktionen abfängst, mit welchen der client die daten empfängt, bzw. sendet, kannst du da problemlos mithören ... ;)

Das ganze ist, soweit ich das weis, nicht allzu einfach, aber es gibt anscheinend leute, die das schon gemacht haben. Eine gute API-Hooking-Lib (madCodeHook) findest du unter http://www.madshi.net/ zum download.
Du wirst da warscheinlich ein paar funktionen aus Winsock hooken müssen, und das haben schon mehrere versucht, vielleicht findest du ja deshalb unter http://forum.madshi.net/ hilfe.

ciao, Philipp

Habe mir gerade das Forum zu gemüte gezogen, ich glaub das is genau das was ich brauch ^^
Jedenfalls zum sniffen...

Ob ich damit alles umleiten kannm ist eine andere Frage...

Für weitere Tips wär ich dankbar! :)

Bye

phXql 4. Jan 2005 18:11

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von Kedariodakon
Zitat:

Zitat von Mystic
Wenn du dir mal die EULA anschaust wirst du wahrscheinlich auch eine Klausel finden die das Manipulieren der Verbindung oder den Daten zwischen Client und Server verbietet... Z.B. bei Warcraft III <--> Battle.net ist das so.

Das Problem ist ja das zugänglich machen der Verbindung für die Spieler auf dem Server!
Den Server betreiben ist nicht verboten, dass Spielen, naja ist dem Spieler seine Sache :zwinker:

Aber als Betreiber des Servers, darf ich die Inf-File nicht anbieten, den damit mach ich mich strafbar!
Mit dem Anbieten dieses Programmes nicht!

Aber das wird nun OT ^^

Bye

und wie wärs wenn du die hosts datei einfach umschreibst? dann kannst du doch auch auf nen anderen server connecten lassen..

Kamephis 4. Jan 2005 21:43

Re: Daten verbindung von einem Programm abhöhren?
 
es gibt einen sehr schönen universellen Packetsniffer, der die madCodeHookLibrary von www.madshi.net benutzt und in Delphi geschrieben wurde:

AppSniffer
http://www.blad3.ro/

da die Quellen da sind, steht kreativen Erweiterungen nicht mehr im Wege :-)

Kedariodakon 5. Jan 2005 08:18

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von phXql
und wie wärs wenn du die hosts datei einfach umschreibst? dann kannst du doch auch auf nen anderen server connecten lassen..

Tja ein ändern der InI-is ja verboten, aber eigendlich könnte das ja jeder Spieler, aber leider ist die Ini-File RSA verschlüsselt und nun kann es nicht mehr jeder...

Daraus folgt, es muß was her was nicht die Software verändert! :zwinker:


Zitat:

Zitat von Kamephis
es gibt einen sehr schönen universellen Packetsniffer, der die madCodeHookLibrary von www.madshi.net benutzt und in Delphi geschrieben wurde:

AppSniffer
http://www.blad3.ro/

da die Quellen da sind, steht kreativen Erweiterungen nicht mehr im Wege :-)

Hab ich schon :zwinker:

Wenn man packete umlenken will, hat man da irgendwas zu beachten?

Bye

endeffects 5. Jan 2005 09:54

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat:

und wie wärs wenn du die hosts datei einfach umschreibst? dann kannst du doch auch auf nen anderen server connecten lassen..
Tja ein ändern der InI-is ja verboten, aber eigendlich könnte das ja jeder Spieler, aber leider ist die Ini-File RSA verschlüsselt und nun kann es nicht mehr jeder...
bei der hosts datei handelt es sich um eine windows-eigene datei in der z.b. festgelegt
wird das der begriff localhost auf 127.0.0.1 verweist

127.0.0.1 localhost
127.0.0.1 toolbarqueries.google.com

Kamephis 5. Jan 2005 09:58

Re: Daten verbindung von einem Programm abhöhren?
 
Es wäre sicher hilfreich, wenn Du noch sagst um welches MMORPG es sich da handelt, zu jedem gibt es genug Leute die sich damit schonmal beschäftigt haben. Auch hier ;) Seinen es nun Serveremulatoren, Clienterweiterungen oder Packetbeschreibungen. Oft finden sich irgendwo noch gut versteckte Foren etc. in denen so einiges an Ideen und Informationen ausgetauscht wird :-)

Das Analysieren der Packete verstößt nicht gegen die EULA ? Seltsam *G*
Erfahrungsgemäß kommt man wohl kaum darum herum, des Client zu disassemblieren, was lt. vielen Eulas auch nicht gerade zulässig, aber auch schwer nachzuweisen ist.

Zitat:

Zitat von Kedariodakon
Also Das Programm was ich abhören/weiterleiten möchte ist nicht von mir!
Das Ziel des Programms ist bekannt!
Um dem Programm handelt es sich um ein Client zu einem MMORPG…

Was will ich tun?
1. Den Client auf einen anderen Server umleiten, OHNE den Client zu verändern, da das gegen die Eula verstoßen würde…
Und dies so einfach wie möglich, und mit auswählbaren Zielen…
2. Ich möchte alle gesendeten Daten Pakete dieses Clients protokollieren um bei der Programmierung eines Server-Emulators zu unterstützen und auch was dabei zu lernen…


Kedariodakon 5. Jan 2005 11:03

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von endeffects
bei der hosts datei handelt es sich um eine windows-eigene datei in der z.b. festgelegt
wird das der begriff localhost auf 127.0.0.1 verweist

127.0.0.1 localhost
127.0.0.1 toolbarqueries.google.com

??? Was hat das mit meinem Problem zu tun? :gruebel:

Zitat:

Zitat von Kamephis
Es wäre sicher hilfreich, wenn Du noch sagst um welches MMORPG es sich da handelt

Lineage II ^^

Aber das was ich hier tu ist eher zum lernen, und soll eher allen Emu-Entwicklern/Hostern helfen ^^


Bye

Kamephis 6. Jan 2005 01:15

Re: Daten verbindung von einem Programm abhöhren?
 
Zitat:

Zitat von Kedariodakon
Es gibt schon ein Programm um die Pakete zu sammeln und es wurde in Java geschrieben, also wird es sich nicht um einen Treiber handeln, aber ich bekomme dafür nicht den Source um das WIE zu begreifen…

LineageII, hm dann kannst Du eigentlich nur von L2J-Projekt reden :
http://sourceforge.net/projects/l2j/ , da ist auch ein Forum, aber die Bedeutungen der gesendeten Packete foindest Du auch im Sourcecode.

Natürlich kommst Du an den Source, ist ja Open-Source *g*
entweder einen CVS-Client installieren (Links und Beschreibung auf sf.net) oder das Archiv runterladen, was von jedem Projekt nächtlich erstellt wird:
http://cvs.sourceforge.net/cvstarbal...vsroot.tar.bz2

Kedariodakon 6. Jan 2005 08:31

Re: Daten verbindung von einem Programm abhöhren?
 
hehe Ich will aber net den Source vom Server, ich will eher verstehen wie ich Datenpackete Sammeln und wie ich sie manipulieren kann (Anderes Ziel)...

Leider haben sie bei L2j nur den Server os :roll:
Und dann kommt noch hinzu das meine Java Kenntnisse begrenzt sind :P

Bin gerade dabei mich in die Sache Hooks einzuarbeiten, aber zum Thema Socket Hooks kann ich keine Lektüre finden, welche das einfach beschreibt, für jemanden der davon 0 Plan hat :zwinker:

Asbarat (oder ähnlich) hat da ja son feines Tutorrial, aber Thema von dem sind Maus und Tastatur Hooks, jedenfalls der größte Teil...

Jedenfalls bin ich net sehr viel weiter gekommen...
Jedenfalls zum Thema verstehen...
Es gibt zwar edliche Komponenten zum Hooken, aber leider mal wieder ohne Source und ohne den versteh ich ja nix vom eigendlichen Hook prozess...

naja zumindest suche ich noch information, mal wieder :coder:

Bye

c113plpbr 6. Jan 2005 11:28

Re: Daten verbindung von einem Programm abhöhren?
 
API-Hooking ist eigentlich vom Prinzip her einfach zu verstehen:
Du ersetzt eine Funktion in einem (meist fremden) Prozess, durch eine andere, eigene (die in einer dll steht, welche "gezwungenermaßen" vom fremden prozess geladen wird ("DLL-Injection")). Diese eigene Funktion kann dann ggf. die Parameter verändern, die original-funktion aufrufen, und den return-value verändern (man kann natürlich auch irgendetwas anderes machen ...).

Wie das im detail funktioniert, kannst du dir anhand des Source-codes der AfxCodeHook API-Hook-Library von http://www.iamaphex.net/ zu gemüte führen. Allerdings ist dieser doch noch relativ schwer zu duchblicken ... ^^. Ich persönlich finde diese Hook-Library aber nicht so toll, da sie ettliche funktionen, die mir in der MadCodeHook-Lib zur verfügung stehen nicht bietet (z.B. IPC).

Ich beschäftige mich mit API-Hooking schon seit längerem, also, wenn ich dir irgendwie weiterhelfen soll, frag mich, und ich werde es versuchen ;) .

ciao, Philipp

richard_boderich 6. Jan 2005 11:46

Re: Daten verbindung von einem Programm abhöhren?
 
hi,

1. @ supermukl

ich denk er bezieht sich auf firewalls, weil dort im soganannten lernprozess, auch
alle programme erkannt werden, die eine verbindung zum internet ueber einen speziellen port herstellen wollen.
meines wissens, setzen alle firewalls dafür spezielle NDIS-Treiber ein. es gibt glaube ich aber auch eine winapi funktion, die so etwas
ähnliches erlaubt. aber ich glaube erst ab Win XP. dort sollst du angeblich abfragen koennen, welche Anwendung ein entsprechendes
tcp ip Paket gesendet hatt.

Kedariodakon 6. Jan 2005 13:29

Re: Daten verbindung von einem Programm abhöhren?
 
Dann müst ich ja erstmal wissen, welche dlls er benutzt :gruebel:

Wie bekomm ich das am einfachsten raus?

Bye

Kedariodakon 7. Jan 2005 08:44

Re: Daten verbindung von einem Programm abhöhren?
 
Ok habe mnich gestern Abend mal mit einem Api Hook beschäftigt... :stupid:

So wenn ich nun die Verbindung abhören will, reicht es, wenn ich im meinem Programm auf die Funktionen der wsock32.dll hooke und dann von meinem Programm aus das abzuhörende starte?
oder muß ich ne dll schreiben, zum hooken? :wall:

Für was neue dlls gut sind, hab ich noch net so ganz verstanden, aber wie hook ich nun am besten auf der Socket verbindung? Wär doch so ein API Hook nicht war? :gruebel:

Bye

c113plpbr 7. Jan 2005 13:30

Re: Daten verbindung von einem Programm abhöhren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sicher, fürs API-Hooking in fremden anwendungen brauchst du im normalfall eine DLL. Ich hab zwar schon leute gesehen, die das mit einer exe gemacht haben, aber ich hab gehört, dass dies nicht zu empfehlen sei.
Diese DLL musst du dann in dein Zielprogramm "injezieren", sprich, du musst das programm dazu bringen, die dll zu laden. Das geht bei MadCodeHook per InjectLibrary.

Nun, sobald die DLL dann im Speicher ist, wird die DLL-Main ausgeführt, sprich das, was zwischen "begin" und "end." steht. Dort musst du nun die Funktionen hooken. Das tust du ganz einfach per
Delphi-Quellcode:
HookAPI('dllname', 'funktionsname', @pointer_auf_callbackfunc, @pointer_auf_nextfunc);
Dieser aufruf ersetzt die funktion 'funktionsname' die von der 'dllname'-DLL exportiert wird durch @pointer_auf_callbackfunc, speichert aber die originalfunktion unter @pointer_auf_nextfunc .
D.h. du brauchst eine funktionen, die exakt die gleichen parameter aufweist, wie die originale (welche das sind, kannst du entweder in einer headerdatei nachschauen, oder in der PSDK), und eine variable, in der du den pointer der originalfunktion (aufrufbar) abspeicherst.
Dann musst du nurnoch in der callback funktion, die immer anstatt der originalfunktion aufgerufen wird, mitloggen, und die originalfunktion aufrufen, damit das was passieren sollte, dann auch funktioniert ... ^^.

Ich hänge mal 2 beispiele (die waren eigentlich für mein Hooking-Tut, das ich aber leider bis jetzt nicht fertiggekriegt hab :| ) an, ich hoffe die erklären sich vom quellcode her und der obigen beschreibung von allein ... das eine beispiel zeigt, wie man funktionen in einer eigenen anwendungen hooken kann, anhand eines MessageBoxA-Hooks. Das andere beispiel ist eine DLL, die man in ein anderes programm "injezieren" muss (injector liegt bei; bitte per PID in einzelne programme injezieren (PID im taskmanager nachschaun), und das uninjezieren (nach dem testen) nicht vergessen!). Diese DLL ersetzt den Text jeder MessageBoxA (des programms in welches die dll injeziert wurde) durch 'geänderter text'.

Und ich glaube, du musst nicht die wsock32.dll hooken, sondern die ws2_32.dll , was da genau der unterschied ist, weis ich nicht, aber appsniff macht das auch so. Achja, für dein vorhaben, kann dir der quellcode von AppSniff ziemlich weiter helfen, denn dieses Programm tut ja auch nichts anderes ... ^^

ok, bei fragen, fragen! ;)
ciao, Philipp

[edit]oops, anhang vergessen :oops: [/edit]

Kedariodakon 7. Jan 2005 13:43

Re: Daten verbindung von einem Programm abhöhren?
 
Ich danke dir, werde am WE reinschaun, falls ich Fragen hab, meld ich mich wieder :zwinker:

Bye


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz