Pointer ertsellen?!

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Markus Jacobs.

    Pointer ertsellen?!

    Hi Leute, wieder mal eine komplexe Frage,

    kann ich in vb einen integer erstellen den ich z.b mit cheat engine auslesen kann > webei sich nach jedem neustart des programmes der pointer nicht verändern darf

    sollte dann ungefär so aussehen : "test.exe+123456" (mit cheat engine ausgelesen)

    das wiederum kann ich dann immer in c++ auslesen mit:

    Quellcode

    1. DWORD MeinToolModule = (DWORD)GetModuleHandleA( "Test.exe" );
    2. DWORD ValuePointer = *(DWORD*)( MeinToolModule + 0x50 );
    VB kennt keine Pointer, sondern verfolgt annere Konzepte.
    Ich wüsste auch nicht, dasses Anwendungen geben sollte, in denen Pointer immer denselben Wert haben. Weil ein Pointer pointet doch auf eine Stelle im Arbeitsspeicher, und wenn ein Prog neu geladen wird, bekommt es doch einen x-beliebigen Speicherbereich zugeordnet, und also pointen seine Pointer immer auf annere Stellen im Speicher.

    ErfinderDesRades schrieb:

    VB kennt keine Pointer, sondern verfolgt annere Konzepte.
    Ich wüsste auch nicht, dasses Anwendungen geben sollte, in denen Pointer immer denselben Wert haben. Weil ein Pointer pointet doch auf eine Stelle im Arbeitsspeicher, und wenn ein Prog neu geladen wird, bekommt es doch einen x-beliebigen Speicherbereich zugeordnet, und also pointen seine Pointer immer auf annere Stellen im Speicher.

    Aso, okay, hmm ja das stimmt soweit.
    Habe letztens in c++ ein console tool geschrieben der mir immer einen festen speicherplatz (pointer) zugewiesen hat.. evtl gibts da ne möglichkeit das in vb auch zu machen (mit asm evtl?) hab aber da zu wehning ahnung in der sache vb und tieferes zeug ;)
    wie gesagt: vb kennt keine Pointer. Und da es eine Garbage-Collector-Sprache ist, ist auch sonst der direkte Zugriff auf den Speicher außerordentlich erschwert und kompliziert.
    Weil der GarbageCollector verwaltet alle "Pointer", und wenn er den Speicher aufräumt und re-optimiert, dann modelt er auch alle "Pointer" um.

    Wie gesagt: Vb verfolgt annere KOnzepte, und wenn man wüsste, was du vorhast, könnte man höchstwahrscheinlich auch ein geeignetes benennen.
    Du must die DLL nur entsprechend deklarieren, das ist kein Problem.
    Du hast dann einen API-Like-Aufruf Deineer DLL, dewn Rest erledigt die Marshal-Klasse.
    Wie sieht denn die C / C++-Deklaeration dieser DLL-Aufrufe aus?
    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!
    ne ne, ich glaub ihr meint da gerade was anderes,.. ich hab eine dll die in ein spiel injectiert wird (cheat) und damit den nicht jeder benutzen kann hab ich mit vb einen hwid scanner & crypter gemacht der bei richtiger hwid einen wert oder string zur dll schicken kann,.. jetz hab ich mir schon einen tcp server gemacht > kann aber keinen c++ client machen (ka von netzwerk). Dann dachte ich an Read bzw Write Memory function von visual basic, da meine datei aber eine injectierte dll ist kann ich nichts an der dll verändern via Write Memory, oder doch? wenn ja, wie würde das gehn?
    entschuldigung, deswegen will ich ja nur das meine freunde den cheat benutzen und nicht weiter geben.. da steckt ja auch der sinn der sache,.. das war nur die antwort auf eure frage, was ich vor habe ;) (braucht man hier nicht gleich ausfällig werden nur weil das wort cheat fällt, danke :thumbdown: ). Wenn jemand weis, wie man Write Memory zu einer dll macht die schon injectiert wurde, bitte um antwort, dankeschön :)
    Wissen über die interne Struktur von unverwalteten Anwendungen vorausgesetzt:

    - Die zu schreibende Variable muss statisch sein. Das stellt sicher, dass die Variable an einem bekannten Offset liegt.
    - Liste alle geladenen Module des Zielprozesses auf.
    - Suche (z.B. anhand des Dateinamens) das Handle der injiziertern DLL aus der Liste.
    - Lies die Basisadresse der DLL im Speicher des Zielprozesses und addiere die RVA des .data-Segments und den Variablenoffset im Segment (den Offset hast du aus der CheatEngine, die RVA steht in der DLL in der .reloc-Sektion, wenn ich mich nicht irre).
    - Öffne den Speicherbereich des Zielprozesses zum schreiben
    - Schreibe deinen Wert / Zeiger / WasAuchImmer
    - Schließe alle Handles.

    Soweit die Kurzfassung. Die lange Fassung würde ein ganzes Buch füllen, sodass ich für die Einzelheiten leider darauf verweisen muss. Gute Anhaltspunkte sind folgende:
    - Lerne x86 Assembler. Damit kennst du die Speicherstruktur und das PE-Dateiformat.
    - Alles weitere ist P/Invoke aus VB - das kommt von ganz alleine, wenn man es häufig genug verwendet.

    Ach nochwas: Falls der Prozess ASLR verwendet, könnte dein Vorhaben ziemlich komplex werden.
    Gruß
    hal2000
    ups, na dann hab ich ja noch was vor mir :D
    ich hätte hald noch eine idee gehabt, ich könnte einen integer eine feste memory position zuweisen (von der dll aus) und sie via read memory von vb auslesen & mit write memory ändern,.. ich glaub irgendwo gesehn zu haben wie man bei ner dll write memory ausführt :D
    aber vielen dank für den tipp :thumbsup: