Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

memorycheat (sehr langsam).

Uploader:MitgliedMichael
Datum/Zeit:27.09.2007 13:50:22

#include "windows.bi"

#macro vergleiche(hproc, anz, mem1, mem2, act)
        Scope
                Dim As Integer dummy, counter
                Dim As Integer tmp

                For i As Integer = 0 To anz-1
                        If i mod 100 = 0 Then Locate 1, 10: Print (i / anz) * 100; "%";

                        ReadProcessMemory( _
                            hproc, _
                            Cast(any ptr, mem2(i)), _
                            @tmp, _
                            4, _
                            @dummy _
                        )

                        #if TypeOf(act) = Integer
                                If (tmp = act) Then
                                        mem1(counter) = tmp
                                        mem2(counter) = mem2(i)
                                        counter += 1
                                End If
                        #else
                                'neuer wert - alter wert  = (1), <> (2), < (3), <= (4), >= (5), > (6) wert (7)

                                #if act = "="
                                        If (tmp = mem1(i)) Then
                                #elseif act = "<>"
                                        If (tmp <> mem1(i)) Then
                                #elseif act = "<"
                                        If (tmp < mem1(i)) Then
                                #elseif act = "<="
                                        If (tmp <= mem1(i)) Then
                                #elseif act = ">="
                                        If (tmp >= mem1(i)) Then
                                #elseif act = ">"
                                        If (tmp > mem1(i)) Then
                                #endif
                                        mem1(counter) = tmp
                                        mem2(counter) = mem2(i)
                                        counter += 1
                                End If
                        #endif
                Next i

                Redim Preserve mem1(counter-1)
                Redim Preserve mem2(counter-1)
                anz = counter
        End Scope
#endmacro

Declare Function dumpmem(hproc As handle, daten() As Double, offset() As Integer) As Integer

ReDim memwerte(0) As Integer
ReDim memoffset(0) As Integer

Dim hwnd As hwnd, ProcessID As dword, processhandle As handle, anzahl As Integer
Dim As String fenstername
Dim As Integer auswahl, adresse, wert, dummy
Dim As Integer tmp

Screen 12, 24

Input "Fenstertitel: ", fenstername
hwnd = FindWindow(0, fenstername)

If (hwnd = 0) Then
    Print "Konnte das Fenster nicht finden."
    Sleep
    End
End If

GetWindowThreadProcessId hwnd, @ProcessID

processhandle = OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID)
If processhandle = 0 Then
    Print  "Prozesshandle konnte nicht ermittelt werden."
    Sleep
    End
End If

Do
        Cls
        Locate 1,1: Print anzahl; "      "

        Input "dumpen(1), wert aendern(2), vergleichen(3) oder speichern (4) ", auswahl

        Select Case As Const auswahl
                Case 1
                        anzahl = dumpmem(processhandle, memwerte(), memoffset())
                Case 2
                        Input "Adresse: ", adresse
                        Input "Wert: ", wert

                        WriteProcessMemory( _
                            processhandle, _
                            Cast(any ptr, adresse), _
                             @wert, _
                            4, _
                            @dummy _
                        )
                Case 3
                        Input "neuer wert - alter wert  = (1), <> (2), < (3), <= (4), >= (5), > (6) wert (7) ", auswahl
                        Select Case auswahl
                                Case 1
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, "=" )
                                Case 2
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, "<>" )
                                Case 3
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, "<" )
                                Case 4
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, "<=" )
                                Case 5
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, ">=" )
                                Case 6
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, ">" )
                                Case 7
                                        Input "Wert: ", tmp
                                        vergleiche(processhandle, anzahl, memwerte, memoffset, tmp)
                        End Select
                Case 4
                        Dim As String dateiname

                        Input "dateiname: ", dateiname

                        Open dateiname For Output As #1

                        For i As Integer = 0 To anzahl-1
                                Print #1, memoffset(i) & ": " & memwerte(i)
                        Next i

                        Close #1
                Case 0
                        Exit Do
        End Select
        Print "fertig"
        GetKey
Loop

CloseHandle processhandle


Function dumpmem(hproc As handle, daten() As Double, offset() As Integer) As Integer
    Dim As MEMORY_BASIC_INFORMATION mbi
    Dim As unsigned integer adress = &h000000
    Dim As Integer start, ende, anz, dummy

    Do
        VirtualQueryEx( _
                        hproc, _
                        cast(any ptr,adress), _
                        @mbi,  _
                        sizeof(MEMORY_BASIC_INFORMATION) _
                    )

        If ((mbi.State = MEM_COMMIT) And  (mbi.Protect = PAGE_READWRITE) And _
                                (mbi.Type = MEM_PRIVATE)) Then

            start = Cast(uinteger, mbi.BaseAddress)
            ende = Cast(uinteger, mbi.BaseAddress + mbi.RegionSize)

                        Locate 10, 1 : Print Using "#########.#####";mbi.RegionSize/8

                        Redim Preserve daten(anz + mbi.RegionSize/4)
                        Redim Preserve offset(anz + mbi.RegionSize/4)

                        For i As Integer = anz To anz + mbi.RegionSize/4
                                offset(i) = start + (i - anz)*4
                        Next i


            ReadProcessMemory( _
                            hproc, _
                            Cast(any ptr, start), _
                            @daten(anz), _
                            mbi.RegionSize, _
                            @dummy _
                        )
            Print "Bereich: " , hex(start), " - ", hex(ende)
            anz += mbi.RegionSize/4
        End If

        adress += mbi.RegionSize
    Loop While (adress < &h80000000)

    Return anz
End Function