[DLL] Memory Hacking

01/08/2010 16:57 *GuideMan*#1
Ich hab für euch mal ein Class Library gemacht, mit dem ihr in VB, C# und in C++ Memorys lesen und verändern könnt.
Download:
[Only registered and activated users can see links. Click Here To Register...]

VT: [Only registered and activated users can see links. Click Here To Register...]

Wichtigste Subs:
Code:
Memory.Write(Process, Adress, Value, Bytes)
Schreibt in die angegebene Memory Adresse.

Code:
Memory.Read(Process, Adress)
Liest den Wert der Angegebenen Adresse aus.

THX wäre sehr nett, da es viel Arbeit war in den Windows APIs rumzukrempeln.

Liebe Grüße, Michael.
01/08/2010 18:24 ^darkwing#2
Total unnützlich und wo ist der VT Scan?
01/08/2010 19:54 #FaiL'#3
Bestimmt ganz nützlich :> Aber wie füg die die Funktionen ein? o.o

Thanks
01/08/2010 21:05 *GuideMan*#4
Ähm das ist nicht Total unnütz.
1. Die DLL ist komprimiert. So ersparst du dir Programm-Größe.
2. Komfortabler.

In Visual Studio über Projekt > Verweis hinzufügen

Sorry hab VT vergessen:
VT: [Only registered and activated users can see links. Click Here To Register...]
01/08/2010 22:40 Ende!#5
Sorry, aber warum sollte ich das hier verwenden und nicht einfach WriteProcessMemory(...) und ReadProcessMemory(...)? Hat das hier Vorteile oder hab ich einfach nicht verstanden wofür das gut ist?
01/08/2010 23:49 MrSm!th#6
geht mir auch so.
klar, kann sein, dass deine lib einem die arbeit abnimmt, einen handle zu holen und das selbst mit dem namen macht......sooo der bringer ist das auch nicht, kann ich mir auch selbst in ne kleine klasse einfügen
01/08/2010 23:54 *GuideMan*#7
Ja, ich sagte nur, dass das die wichtigsten Subs sind.
Weil ich nett bin gebe ich euch mal den Source code meiner DLL:

Außerdem ist die DLL komprimiert was die Programmgröße verkleinert.
01/09/2010 00:27 Cholik#8
Ich versteh den Sinn deines Codes nicht.

Code:
    Public Function Write(ByVal ProcessName As Process, ByVal Address As Integer, ByVal Value As Long, ByVal Bytes As Integer)
        Dim GameLookUp As Process() = Process.GetProcessesByName(ProcessName.ProcessName)

        If GameLookUp.Length = 0 Then



        End If
        Dim processHandle As IntPtr = OpenProcess(&H1F0FFF, 0, GameLookUp(0).Id)

        WriteProcessMemory(processHandle, Address, Value, Bytes, Nothing)

        CloseHandle(processHandle)
Wofür ist die If-Bedingung dort ? Die ist eigentlich total fehl am Platz. Du prüfst ob die Länge von GameLookUp gleich Null ist und wenn das zutrifft tust du nichts. Und dann machst du einfach weiter o_O ?


Quote:
Außerdem ist die DLL komprimiert was die Programmgröße verkleinert.
Selbst "unkomprimiert" wäre die .NET DLL immer noch klein genug um sie mehr als 100 mal auf eine Diskette kopieren zu können.
01/09/2010 00:46 *GuideMan*#9
Da war zuerst eine End Anweisung drin.
Habe wohl vergessen es zu entfernen.

Liebe Grüße, Michael.
01/09/2010 00:49 ^darkwing#10
Alles läuft darauf hinaus, dass die Funktionen aus der Kernel32.dll geladen werden.
Mit deiner DLL geschiet dies auf einem Umweg. Ich muss erst deine DLL laden die wiederrum die Kernel32.dll lädt, die ich aber bereits geladen haben muss um deine DLL zu laden (LoadLibrary).
Die Performanz würde also niedriger sein.

Die größe wird mit deiner DLL nicht kleiner, sondern größer. Ich muss die DLL ja bei dem Programm liegen haben.

Hinzu kommt auch noch das man nicht weiß, was die DLL wirklich beinhaltet.

Der einzige "Vorteil" ist, dass es komfortabeler ist die Funktionen zu benutzen.
Wenn man den Code sieht, sieht man auch das ständig OpenProcess aufgerufen wird, was nicht so performant ist.


Ich weiß nicht warum dies ein Tutorial sein sollte.
01/09/2010 00:53 Cholik#11
Ach sorry hab nit gesehn das es im Tutorial Bereich lag. Ich verschiebs ma in den normalen epvp*coders Bereich.
#moved
01/09/2010 09:15 HardCore.1337#12
Ich hätte mal die Frage ob die DLL auch mit anderen Programmiersprachen geladen und benutzt werden kann.

Mich würde die aufrufkonvention interessieren.
- gar keine? (Scheint mir so, also nur für C nutzbar)
- stdcall?
...
01/09/2010 11:21 Shadowz75#13
Quote:
Originally Posted by General Desert View Post
Ich hätte mal die Frage ob die DLL auch mit anderen Programmiersprachen geladen und benutzt werden kann.

Mich würde die aufrufkonvention interessieren.
- gar keine? (Scheint mir so, also nur für C nutzbar)
- stdcall?
...
nur .net , da es managed code ist

b2t: naja , deine methode ist nicht grade ressourcen sparend. bei jedem write suchst du nach dem process, benutzt openprocess und schreibst dann. schau dir mal die c# library blackmagic an. diese besitzt auch memory editing funktionen,asm funktionen in .net,pattern search,....
01/10/2010 00:47 *GuideMan*#14
Man kanns in VB.Net, C#.Net und in VC++ benutzen.
01/10/2010 15:04 Elite*Ruler#15
Das finde ich echt super. Aber was ich bräuchte ist ein proggi,
besser gesagt eine funktion, mit der ich in einem bestimmten
prozess nach einem string ( z.b. ' huhu' ) suchen könnte