Values der Pointer auslesen

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Markus_G.

    Values der Pointer auslesen

    Hallo Leute,
    Ich wollte die Values der Pointer, die ich mir mit Cheat engine gesucht habe auslesen und mit den paar sachen errechnen und halt anzeigen.

    Nur mein problem ich weis nicht wie ich die Values auslesen kann.

    Würde mich freunen wenn mir einer erklären könnte wie es geht.

    :3
    Das ist etwas zu wenig Information Deinerseits.
    Sieh Dir aber mal das hier an:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("Deine_DLL.dll")> _
    4. Friend Shared Function DLL_Aufruf(ByVal value17 As IntPtr, ByVal anyHandle As IntPtr) As Integer
    5. End Function
    6. Private Sub xxx()
    7. Dim value As Integer = 17 ' Wert in die DLL rein
    8. Dim anyHandle As IntPtr = IntPtr.Zero
    9. Dim ptr1 As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(value))
    10. Dim ptr2 As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(IntPtr.Zero))
    11. Marshal.WriteInt32(ptr1, value)
    12. DLL_Aufruf(ptr1, ptr2)
    13. anyHandle = Marshal.ReadIntPtr(ptr2) ' Wert aus der DLL raus
    14. Marshal.FreeHGlobal(ptr1)
    15. Marshal.FreeHGlobal(ptr2)
    16. End Sub
    17. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mirko schrieb:

    den value vom pointer auslesen aus einer .exe datei.

    Wie kommst Du denn an den ran?
    Such mal im Forum unter Speicher auslesen. Ist es das, was Du meinst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn es nur um das Auslesen geht, mach Dir doch fix ein C++-Programm oder eine C++-DLL für Dein Programm.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie willst du es bitte sonst machen? Das diese eine Funktion. Reg' dich nicht so auf. ;)

    Natürlich könntest du auch eine externe C#-DLL schreiben, die in den Prozess injecten, in der C#-DLL dann mit Unsafe-Pointern arbeiten und irgendwie über IPC die Daten an dein eigentliches Programm schicken.
    Da brauchst du aber bestimmt auch WinAPI. ;)
    Von meinem iPhone gesendet
    Was willst Du denn überhaupt dort auslesen?
    Normalerweise passt das System auf, dass Du nicht auf "fremden" Speicher zugreifen kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Normalerweise passt das System auf, dass Du nicht auf "fremden" Speicher zugreifen kannst.
    Bitte definiere "normalerweise".

    Man kann in VB(6/.NET) problemlos einen ultrahaxx0r-write/read-processmemory-kiddyhack schreiben. Ich glaube da gibt es nicht mal bei einem 64-Bit-Win7 probleme. Vielleicht kommt einem die UAC noch in die Quere, aber sobald man es als Administrator startet, sollte es spätestens dann problemlos funktionieren.
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    nikeee13 schrieb:

    Bitte definiere "normalerweise".

    Wenn ich ganz ein normales Programm schreibe und keinerlei "kriminelle Energie" entwickle. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    da ich meine den Threadersteller zu kennen, und ich mit ihm zusammenarbeite :P , möchte ich seine Frage etwas genauer ausführen.

    Wir haben es uns zur Aufgabe gemacht, den Wert (4Byte), der sich unter einer bestimmten Addresse in eines *.exe Programms befindet auszulesen.
    Dabei war uns Cheat Engine schonmal eine große Hilfe. Als wir dann die Pointer, welche auf einen bestimmten Wert zeigen gefunden hatten, wollten wir diese in einem selbstständigem Programm auslesen.

    Die Pointer sind so aufgebaut, dass wir nicht wissen, wie wir anfangen sollen.
    Ich zeige mal eben wie ich das meine:

    Wir haben zunächst einen Einstiegspunkt, der in Cheat Engine mit dem Prozessnamen angegeben wird und dannach einige Offsets, welche uns zum Endwert bringen sollen.
    Das ganze klappt auch in unserem Programm ganz gut, aber wir wissen nicht, wie wir mit dem Einstiegswert bei CE umgehen sollen... ("Prozessname.exe"+Offset).

    Wie können wir mit der "Prozessname.exe" in VB rechnen ? Wir wissen, dass sich hinter diesem Prozessnamen ein Hex-Wert befindet, allerdings kommen wir in unserem Programm nicht auf die "nächste Addresse", die CE ausgibt, wenn man das erste Offset hinzugerechnet hat.

    Ich hoffe das war einigermaßen verständlich ausgedrückt.

    Mit freundlichen Grüßen

    Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Markus_G“ ()

    @Markus_G: Hast Du Ahnung von C++?
    Lies mal da rein, um ein Gefühl für einen Pointer zu bekommen.
    Was soll bitte

    Markus_G schrieb:

    "Prozessname.exe"+Offset
    sein?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Samus Aran schrieb:

    Wo ist das Problem, Wert1 plus Wert2 zu rechnen?
    Das ist kein Problem das können wir ja...

    RodFromGermany schrieb:

    @Markus_G: Hast Du Ahnung von C++?
    Lies mal da rein, um ein Gefühl für einen Pointer zu bekommen.
    Was soll bitte

    Markus_G schrieb:

    "Prozessname.exe"+Offset
    sein?
    Genau das ist unser Problem, ich hab mich jetzt schon sehr stark mit Pointern beschäftigt, aber wir wissen auch nicht genau, was hinter dem
    "Prozessname.exe"+Offset steckt, ich zeige hierzu einfach mal ein Bild, vielleicht hilft das ja weiter :
    Also wir haben jetzt eine einfache .exe, die "Programm" heißt und dabei kommt dann bei dem Pointer dieser Ablauf zustande (in Cheat Engine):


    Hier zeigt uns Cheat Engine wie es auf den Wert kommt, auf den der Pointer zeigt...
    Es fängt dabei bei >"Programm.exe"+004D25C4< an und kommt dann auf die Addresse 0E060A08 (nur als Beispiel, weil die Addresse ja nach jedem Neustart der Programm.exe anders ist)
    Wir verstehen hier nicht ganz wie das gehen soll, wir haben es versucht über das Handle des Prozesses auszurechnen um dann auf 0E060A08 zu kommen, aber wir sind nie auf die Addresse 0E060A08 gekommen. Der Ablauf nach der Addresse (0E060A08) funktioniert einwandfrei und auch in VB haben wir den schon umgesetzt ohne Probleme, aber wir wissen eben nicht wie wir in VB 2008 auf die "erste Addresse" kommen sollen und ohne die kommen wir eben nicht weiter.

    Mit freundlichen Grüßen

    Markus
    Sehr merkwürden. Keine Ahnung.
    Was ist denn das für ein Tool?
    Gibt es dazu eine Beschreibung?
    Frau Google gefragt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!