Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Chat messages aus dem speicher eines programms auslesen? (https://www.delphipraxis.net/63074-chat-messages-aus-dem-speicher-eines-programms-auslesen.html)

rhodan 13. Feb 2006 18:41


Chat messages aus dem speicher eines programms auslesen?
 
Hallo :)

ich hab schon die "spiele trainer" topics durchgesehen, aber was ich möchte ist nicht wirklich dabei.

Zu meinem Projekt/Problem :

Dem Spiel "Freelancer" liegt eine "FLserver.exe" bei mit der jeder seinen eigenen server betreiben kann. Dieser wird dann von meinem PC aus gehosted.
Ich möchte nun ein programm schreiben welches alle Chatnachrichten loggt (und in eine txt speichert), daher alles was auf meinem server von spielern geschrieben wird.

Ich hab mir schon Tsearch, MemHack und Co. angesehen, was mich aber nicht viel weiterbringt da ich dort nur den speicher den der Freelancer server benutzt nach bestimmten werten durchsehen kann.

Ein solches programm (zum Chat logging) existiert bereits, ich möchte allerdings mein eigenes schreiben bzw. wissen wie die es gemacht haben, des lern effekts wegen :)

was ich bis jetzt weiss ist der memory start: $00400000, und das ende: $02968000

Hab den speicher schon mal in the txt gespeichert, dann ingame auf dem server was geschrieben und wieder den speicher des Servers gespeichert, die beiden files verglichen, aber es hat sich nix geändert :|

Im prinzip soll also aus dem Speicher des Servers nur die nachrichten gelesen werden und gespeichert werden in einer txt, es soll ja nix verändert werden.

Wie kann ich rausbekommen wo die nachrichten im speicher sind/erscheinen und diese stelle ständig überwachen/loggen ?

Dies ist das erste mal das ich mit dem speicher eines programms arbeite, sorry für (eventuelle) nooby fragen, hab mich wirklich schon umgesehen, konnte aber nix finden was mir hilft.

ach und...chats loggen könnte ich natürlich nur auf meinem server, in meinem speicher, nicht auf anderen Servern :wink:

Für eventuelle Hilfe bin ich im voraus dankbar,

Grüße aus Hamburg,

Rhodan

rhodan 14. Feb 2006 19:10

Re: Chat messages aus dem speicher eines programms auslesen?
 
hmm, ich hab jetzt soweit die addressen der nachrichten im speicher gefunden wie es aussieht.

Wüsste vielleicht jemand wie ich die in ein memo z.B bekomme so das ich sie dann als txt speichern kann?

ich bin schon über
Delphi-Quellcode:
ReadProcessMemory
und
Delphi-Quellcode:
TMemoryStream.Create
gestolpert wo ich mir dachte das die vielleicht nützlich sein können. aber wie ich die adressen (nachrichten) in einem stream bekomme, bzw. diesen dann ins memo ist mir ein rätsel :oops:

hat jemand einen tip?

thx

Christian Seehase 14. Feb 2006 19:18

Re: Chat messages aus dem speicher eines programms auslesen?
 
Moin Rhodan,

mit ReadProcessMemory wird es schon gehen.
Wie hast Du denn die Adresse ermittel?

rhodan 15. Feb 2006 00:06

Re: Chat messages aus dem speicher eines programms auslesen?
 
naja.....

wenn ich ganz ehrlich bin hab ich das andere programm mit dem chat logging auch möglich ist disassembliert. :oops: die adressen sind immer gleich. zumindest HOFFE ich das die stimmen, bzw das ich damit arbeiten kann...hier ein bsp:

Delphi-Quellcode:
br.s   loc_0_148D4
loc_0_14888:
ldarg.0
ldfld  class [mscorlib]System.IO.StreamWriter FLAntiCheat.MainForm::chatStream
call   value class [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
stloc.s 0x27
ldloca.s 0x27
call   class System.String [mscorlib]System.DateTime::ToString()
ldstr  ":pri"
call   class System.String [mscorlib]System.String::Concat(class System.String, class System.String)
callvirt void [mscorlib]System.IO.TextWriter::Write(class System.String)
br.s   loc_0_148D4
loc_0_148AD:
ldarg.0
ldfld  class [mscorlib]System.IO.StreamWriter FLAntiCheat.MainForm::chatStream
call   value class [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
stloc.s 0x27
ldloca.s 0x27
call   class System.String [mscorlib]System.DateTime::ToString()
ldstr  ":grp"
call   class System.String [mscorlib]System.String::Concat(class System.String, class System.String)
callvirt void [mscorlib]System.IO.TextWriter::Write(class System.String)
br.s   loc_0_148D4
loc_0_148D2:
ldc.i4.0
stloc.2
loc_0_148D4:
ldloc.2
brfalse unk_0_15392
ldarg.2
naja, das ist das was vom code bzw. der adresse noch übrig ist :-/ das ist ein beispiel für den Privat (pri) und Group (grp) Chanel in dem man in Freelancer messages schicken kann.

sieht für mich nach assembler oder ähnlichem hier aus.
"loc_0_148D4" könnte ne position darstellen oder? :) zumindest dachte ich mir das.

gruß

rhodan

PS: sry, als delphi code habe ich das nur der übersichtlichkeit halber dargestellt. :wink:

rhodan 16. Feb 2006 17:01

Re: Chat messages aus dem speicher eines programms auslesen?
 
hmm, ok die addressen haben sich als falsch herausgestellt. ich hab die nachrichten jetzt selbst gefunden.
ich hab im spiel etwas geschrieben, dies mit dem UTF converter ( http://www.macchiato.com/unicode/convert.html ) convertiert und mit TSearch in dem server memory gesucht...nun ja..gefunden hab ich sie zwar, nur erscheint der chatstring immer an anderen stellen. ReadProcessmemory hab ich mir angeguckt und ich denke auch soweit verstanden.

Aber wie kann ich sicherstellen das mein programm die richtigen addressen finded um sie auszulesen? :)

Christian Seehase 16. Feb 2006 19:19

Re: Chat messages aus dem speicher eines programms auslesen?
 
Moin Rhodan,

das Problem wird sein, dass Du die Stelle herausbekommen musst, an der die Adresse des jeweiligen Strings gespeichert wird.
Im Gegensatz, z.B., zu einem Integerwert der, aller Voraussicht nach, wohl immer an der gleichen Stelle zu finden sein dürfte, wird bei einem String der Speicher, u.U., immer wieder neu zugewiesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 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