Simples Gamehacking via Memoryediting

02/08/2012 16:32 Яonix#46
SUper Tut gleich mal ausprobieren :D
02/12/2012 13:55 KennyJumpen#47
Super Tutorial ;)
Ich finds ehrlich gesagt gut, dass dort Fehler drin sind.
Ich mein.. GRUNDLAGEN SOLLTE MAN SCHON BEHERRSCHEN BEVOR MAN SICH MIT MEMORY EDITING BEFASST!

Win7 64 Bit klappt hervorragend! :)
02/12/2012 15:37 Ajax1337#48
nice tut
06/01/2012 18:45 .Scare™#49
hey @ all,

gerade für den Anfang, sry für das aufwühlen von dem Alten post!!

echt ein supi tut, nur aus irgent einem grund geht es bei mir nicht. ich bekomme keinen Fehler aber z.b. ich mache es zum testen mit Solitaire und da werden die punkte nicht angenommen.


mein fehler, ich habe nur die adresse ausgelesen, nicht den Base Pointer.

was mich aber interesieren würde, gibt es ein gutes tut dafür? den den basepointer zu finden ist nicht so leicht, da ich bei Solitär 3 pointer habe die zur gleichen addrese gehen und auch gleich oft, immer wen sich der punktestand ändert.

mfg
01/23/2013 20:32 mördan1337#50
Quote:
Originally Posted by LemoniscooL View Post
Hi!

@Shishidump mach es so:
Code:
Dim BaseAdress As Integer = &H105F1A58
Dim Offset As Integer = &HFC46C
Label2.Text = ReadLongPointer(Prozess1, BaseAdress, Offset, 255)
so funktionierts bei mir..

greetz
Hallo,

ich versuche gerade den Geldstand eines Spiels mit Mi4uric3s Tutorial zu ändern (Windows 7, 32bit).
Nachdem ich das Spiel gestartet hatte, las ich die Adresse mit Cheat Engine aus und alles funktionierte einwandfrei.

Da sich die Adresse beim Spielneustart ändert, wollte ich im nächsten Schritt Pointer verwenden.
Ich erhielt:

"RPG_RT.exe"+0009DBE8 -> 066EC900
066EC900 + 1C = 066EC91C

Dabei ist "066EC91C" meine endgültige, temporäre aber dynamische Adresse und "1C" der Offset.
Wenn ich es richtig verstanden habe, ist die Baseadress "066EC900", die jedoch auch dynamisch ist. Das liegt daran, dass die Adresse von "RPG_RT.exe" bei jedem Spielstart anders ist.

Meine Frage lautet nun im Bezug zum Tutorial:
Statt "ReadLong" benutze ich "ReadLongPointer" und statt "Writememory" "WriteLongPointer". Meine Schwierigkeit besteht nun darin, ein Argument für "BaseAdress" zu übergeben, da dieses, wie beschrieben, dynamisch ist.
Wie kann ich bei Benutzung dieses Programmes die Adresse des "RPG_RT.exe"-Prozesses auslesen, damit ich diese in Form der Baseadress korrekt übergeben kann?
01/24/2013 09:36 Mi4uric3#51
Das Tutorial ist total behindert ich muss das dringend überarbeiten.
2009 hatte ich halt noch nicht wirklich viel Verständnis davon..

€dit: So habs mal überarbeitet, bitte gebt mir mal Rückmeldung dazu.
08/14/2013 21:18 -Soni©-#52
TuT ist echt Super! Komme nach einigen malen durchlesen recht gut mit klar, doch habe ich i.wie ein Problem mit der Anwendung, bzw. werd ich nicht ganz draus schlau, was ich in die Anwendung schreiben soll.. Die NativeMethods hab ich fertig, alles so wie auf dem Screenshot, aber nett wäre vlt gewesen wenn du noch n Screen zu der Anwendung machst :/

Könnte das mal jemand übernehmen, also nen Screenshot von der(/dem) Anwendung(s-Code) machen ? :) Fänd ich sehr hilfreich :P

Sry fürs Pushen aber des würde mich sehr Interessieren :D
09/02/2013 19:17 ramijafary1#53
Nice
but can anyone make a English tutorial Q,Q"
09/08/2013 16:30 L!ghtning#54
gutes tutorial aber warum nicht einfach in C++ in ner .dll
wäre:

1. leichter
2. du kannst directx benutzen (etc.)
3. Du kannst wenn das game einen hackschutz besitzt einen hook coden der deinen hack undetected macht
4. du kannst einen bypass schreiben
5. alle funktionen sind schon vorhanden wie writeprocessmemory, openprocess (etc.)

:handsdown:
09/08/2013 16:44 davydavekk#55
Good tutorial :)

But how do we do if we have to deal with multi-level pointers ?
09/08/2013 16:57 -Soni©-#56
Quote:
Originally Posted by L!ghtning View Post
gutes tutorial aber warum nicht einfach in C++ in ner .dll
wäre:

1. leichter
2. du kannst directx benutzen (etc.)
3. Du kannst wenn das game einen hackschutz besitzt einen hook coden der deinen hack undetected macht
4. du kannst einen bypass schreiben
5. alle funktionen sind schon vorhanden wie writeprocessmemory, openprocess (etc.)

:handsdown:
Du könntest ja mal ein TuT machen, wo diese Punkte ausführlich erklärt werden :D :D :D
09/13/2013 13:43 Mi4uric3#57
Quote:
Originally Posted by L!ghtning View Post
gutes tutorial aber warum nicht einfach in C++ in ner .dll
wäre:

1. leichter
2. du kannst directx benutzen (etc.)
3. Du kannst wenn das game einen hackschutz besitzt einen hook coden der deinen hack undetected macht
4. du kannst einen bypass schreiben
5. alle funktionen sind schon vorhanden wie writeprocessmemory, openprocess (etc.)

:handsdown:
Wo ist der Sinn? Das hier ist ein VB.Net Tutorial, kein C++ Tutorial.

Quote:
Originally Posted by davydavekk View Post
Good tutorial :)

But how do we do if we have to deal with multi-level pointers ?
I made an example for that in the 1st post:
PHP Code:
Dim MyFloat As Single 0
Dim PointerValue 
As Integer 0
NativeMethods
.ReadInteger(&H401234PointerValue)
If 
PointerValue 0 Then NativeMethods.ReadInteger(PointerValue + &H1234PointerValue)
If 
PointerValue 0 Then NativeMethods.ReadSingle(PointerValueMyFloat
03/03/2014 13:49 Sergeant Wasabi#58
Huhu,

Ich weiß das Tutorial ist ein wenig älter, ich habe aber ein Problem mit dem Code.
Ich kriege bei dieser Zeile immer einen StackOverflow

PHP Code:
NativeMethods.ProcessHandle NativeMethods.OpenProcess(NativeMethods.OpenProcess(&H1F0FFFFalsepid)) 
Mein gesamter Code
PHP Code:
Imports System.Runtime.InteropServices

Public Class Form1

    
Private Sub Button1_Click(sender As ObjectAs EventArgsHandles Button1.Click
        
If NativeMethods.OpenProcess(Process.GetProcessesByName("csgo")(0).Id) = True Then ' .exe weglassen, falls der (Spiele-)Prozess auf .exe endet. ' 
            
Label2.ForeColor Color.Green
            Label2
.Text "Injected"

            
Dim MyFloat As Single 0
            Dim PointerValue 
As Integer 0
            NativeMethods
.ReadInteger(&H401234PointerValue)
            If 
PointerValue 0 Then NativeMethods.ReadInteger(PointerValue + &H1234PointerValue)
            If 
PointerValue 0 Then NativeMethods.ReadSingle(PointerValueMyFloat)

            
Label4.Text MyFloat
        
Else
            
Label2.ForeColor Color.Red
            Label2
.Text "Fail!"
        
End If
    
End Sub
End 
Class

Public Class 
NativeMethods

    
<DllImport("kernel32.dll"SetLastError:=True)> _
    
Public Shared Function OpenProcess(ByVal DesiredAccess As IntegerByVal InheritHandle As BooleanByVal ProcessID As Integer) As IntPtr
    End 
Function
    <
DllImport("kernel32.dll"SetLastError:=True)> _
    
Private Shared Function CloseHandle(ByVal Handle As IntPtr) As Boolean
    End 
Function
    <
DllImport("kernel32.dll"SetLastError:=True)> _
    
Private Shared Function ReadProcessMemory(ByVal ProcessHandle As IntPtrByVal Address As IntPtrByRef Buffer As Byte(), ByVal Size As IntegerByRef NumberOfBytesRead As Integer) As Boolean
    End 
Function
    <
DllImport("kernel32.dll"SetLastError:=True)> _
    
Private Shared Function WriteProcessMemory(ByVal ProcessHandle As IntPtrByVal Address As IntPtrByVal Buffer As Byte(), ByVal Size As IntegerByRef NumberOfBytesWritten As Integer) As Boolean
    End 
Function

    Private 
Shared ProcessHandle As IntPtr IntPtr.Zero

    Friend Shared 
Function OpenProcess(ByVal pid As Integer) As Boolean
        NativeMethods
.ProcessHandle NativeMethods.OpenProcess(NativeMethods.OpenProcess(&H1F0FFFFalsepid))
        Return 
IIf(NativeMethods.ProcessHandle IntPtr.ZeroFalseTrue)
    
End Function

    
Friend Shared Function CloseHandle()
        If 
NativeMethods.ProcessHandle IntPtr.Zero Then Return False
        
Return NativeMethods.CloseHandle(NativeMethods.ProcessHandle)
    
End Function

    
Friend Shared Function ReadArray(ByVal Address As IntPtrByRef Buffer As Byte(), ByVal Size As Integer) As Boolean ' CE: Array of Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        
Return NativeMethods.ReadProcessMemory(ProcessHandleAddressBufferSize0)
    
End Function

    
Friend Shared Function ReadByte(ByVal Address As IntPtrByRef Buffer As Byte) As Boolean ' CE: 1 Byte ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {0}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer10)
        If 
ret True Then Buffer tBuffer(0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadShort(ByVal Address As IntPtrByRef Buffer As Short) As Boolean ' CE: 2 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {00}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer20)
        If 
ret True Then Buffer BitConverter.ToInt16(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadInteger(ByVal Address As IntPtrByRef Buffer As Integer) As Boolean ' CE: 4 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {0000}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer40)
        If 
ret True Then Buffer BitConverter.ToInt32(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadLong(ByVal Address As IntPtrByRef Buffer As Long) As Boolean ' CE: 8 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {00000000}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer80)
        If 
ret True Then Buffer BitConverter.ToInt64(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadSingle(ByVal Address As IntPtrByRef Buffer As Single) As Boolean ' CE: Float ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {0000}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer80)
        If 
ret True Then Buffer BitConverter.ToSingle(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadDouble(ByVal Address As IntPtrByRef Buffer As Double) As Boolean ' CE: Double ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {00000000}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer80)
        If 
ret True Then Buffer BitConverter.ToDouble(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadString(ByVal Address As IntPtrByRef Buffer As StringByVal Length As Integer) As Boolean ' String mit bekannter Länge, schnell ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {}
        
Dim ret As Boolean NativeMethods.ReadProcessMemory(ProcessHandleAddresstBufferLength0)
        If 
ret True Then Buffer BitConverter.ToString(tBuffer0)
        Return 
ret
    End 
Function

    
Friend Shared Function ReadString(ByVal Address As IntPtrByRef Buffer As String) As Boolean ' String mit unbekannter Länge, braucht länger ' 
        
If ProcessHandle IntPtr.Zero Then Return False
        Dim tBuffer 
As Byte() = {}
        
Dim ret As Boolean False
        
Do
            
ret NativeMethods.ReadProcessMemory(ProcessHandleAddresstBuffer10)
            If 
ret True Then If tBuffer(0) <> 0 Then Buffer &= BitConverter.ToString(tBuffer0)
        
Loop While tBuffer(0) <> 0
        
Return ret
    End 
Function

    
Friend Shared Sub WriteArray(ByVal Address As IntPtrByVal Buffer As Byte()) ' CE: Array of Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        WriteProcessMemory
(ProcessHandleAddressBufferBuffer.Length0)
    
End Sub

    Friend Shared Sub WriteByte
(ByVal Address As IntPtrByVal Buffer As Byte' CE: 1 Byte ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer10)
    
End Sub

    Friend Shared Sub WriteShort
(ByVal Address As IntPtrByVal Buffer As Short' CE: 2 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer20)
    
End Sub

    Friend Shared Sub WriteInteger
(ByVal Address As IntPtrByVal Buffer As Integer' CE: 4 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer40)
    
End Sub

    Friend Shared Sub WriteLong
(ByVal Address As IntPtrByVal Buffer As Long' CE: 8 Bytes ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer80)
    
End Sub

    Friend Shared Sub WriteSingle
(ByVal Address As IntPtrByVal Buffer As Single' CE: Float ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer40)
    
End Sub

    Friend Shared Sub WriteDouble
(ByVal Address As IntPtrByVal Buffer As Double' CE: Double ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = BitConverter.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBuffer80)
    
End Sub

    Friend Shared Sub WriteString
(ByVal Address As IntPtrByVal Buffer As String' CE: String ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = System.Text.Encoding.ASCII.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBufferBuffer.Length0)
    
End Sub

    Friend Shared Sub WriteUnicodeString
(ByVal Address As IntPtrByVal Buffer As String' CE: Unicode String ' 
        
If ProcessHandle IntPtr.Zero Then Exit Sub
        Dim tBuffer 
As Byte() = System.Text.Encoding.Unicode.GetBytes(Buffer)
        
WriteProcessMemory(ProcessHandleAddresstBufferBuffer.Length 20)
    
End Sub

End 
Class 
03/03/2014 14:14 Mi4uric3#59
Quote:
Originally Posted by Sergeant Wasabi View Post
Huhu,

Ich weiß das Tutorial ist ein wenig älter, ich habe aber ein Problem mit dem Code.
Ich kriege bei dieser Zeile immer einen StackOverflow

PHP Code:
NativeMethods.ProcessHandle NativeMethods.OpenProcess(NativeMethods.OpenProcess(&H1F0FFFFalsepid)) 
Das ist ja auch völliger Unfug was du da tust.
Zuerst rufst du die Funktion
PHP Code:
Friend Shared Function OpenProcess(ByVal pid As Integer) As Boolean 
mit deinem Code:
Code:
If NativeMethods.OpenProcess(Process.GetProcessesByName("csgo")(0).Id) = True Then
auf.
Diese ruft intern sich selbst auf
PHP Code:
NativeMethods.OpenProcess(RichtigeOpenProcessFunktion(DesiredAccessInheritHandleProcessId
Da sie sich immer und immer wieder selbst aufruft kommt es dann natürlich zu einem Stack Overflow.
03/03/2014 14:15 Sergeant Wasabi#60
Na ja, so stands halt im Tutorial. Da ging ich von aus das das so stimmt. Wie mach ichs richtig?