[Brauche Hilfe]Visual Basic Memory Write

04/11/2010 13:32 iMölwin#1
Also wie im Titel schon erwähnt wurde brauche ich hilfe bei memory write in vb.
Die Tuts die hier bei EPvp sind bringen mir nicht den da kommen immer fehler...
Code:
Public Class Form1

    Public Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Public Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myProcesses As Process() = Process.GetProcessesByName("S4Client")
        Dim processHandle As IntPtr = myProcesses(0).Handle
        Dim Float As Single  //der Value Typ ist float ist das so richtig?

        WriteProcessMemory(processHandle, &H12345, TextBox1.Text, Float, 0)
    End Sub
End Class
könnt ihr mir sagen ob der code ansatzweise richtig ist bzw beim Write die richtige reinfolge?
Und wenn ich das debugge kommt immer ein fehler bei
Code:
Dim processHandle As IntPtr = myProcesses(0).Handle
also Index war außerhalb des Arrays

Es wäre sehr nett wenn ihr mit einen Source bzw ein ordentliches tut gibt das funtzt,auch für online games.

Killer

Ps:Das ist nicht die adresse sondern ein beispiel und vor der richtigen sind zwei 0 muss ich die weglassen?
Und das spiel heißt S4 wie man auch im code sieht.
04/11/2010 13:37 Cholik#2
#moved
04/11/2010 13:43 iMölwin#3
Wieso moved das is Gamehacking :facepalm:

Killer
04/11/2010 14:23 HardCore.1337#4
Nein, das ist Coder, weil du Programmierst ja was.

Und soweit ich weiß wird die Value als Zahl eingeben, das heißt du musst sie erst aus deiner TextBox umwandeln
04/11/2010 14:57 iMölwin#5
is kla das man die als zahl eingibt aber der valuetyp is bei mir zb float und das will ich auch wissen aber bei mir funtzt es allgemein nit...

Killer
04/11/2010 15:09 HardCore.1337#6
naja, der text in der TextBox ist ein String, egal ob du einen Buchstaben oder eine Zahl eingegeben hast.

Und du kannst keinen String übergeben. In der Delphi kannst du einen String mit der Funktion
StrToFloat umwandeln. Wie das bei VB geht weiß ich nicht.
04/11/2010 15:15 iMölwin#7
-.- bei memorywrite muss man die adresse,den prozess,die neue value die ich einfach in die textbox schreibe.und den value typ da brauch ich nichts extra machen. Standard ist ja 4 Byte also steht da ja 4 aber ich will da float hinhaben aber mit einfach float hinschreiben is es nicht getan...
04/11/2010 15:44 HardCore.1337#8
Du verstehst es nicht!
04/11/2010 16:56 iMölwin#9
Ne sag es für dumme
04/11/2010 18:09 HardCore.1337#10
Code:
WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As [COLOR=Red][B]Integer[/B][/COLOR], ByVal nSize As [COLOR=Red][B]Integer[/B][/COLOR], ByRef lpNumberOfBytesWritten As Integer
Verstehst du was ich meine. Die Funktion MemoryWrite erwartet als Parameter Integer (Ganzzahl) Typen.
Wenn du jetzt aber etwas in eine Textbox eingibst (aus einer GUI) wird der eingegebene Text als String gespeichert.

Integer <> String!!!

Also musst du den String umwandeln.

Code:
Zahl = CInt(TextBox1.Text)
Lern am besten erstmal VB bevor du mit den API Funktionen arbeitest
04/11/2010 21:33 iMölwin#11
Ich mach das gerade in Autoit und will das in vb anhand eines Code beispiel lernen aber keiner kann mir ein ordentliches geben.
Wenn du alles besser weißt kannst du mir ja ein Beispiel Code machen..

Killer
04/12/2010 15:47 HardCore.1337#12
Quote:
Wenn du alles besser weißt kannst du mir ja ein Beispiel Code machen..
Falsch, ich will es dir bloß erklären.
Ich kann dir gerne einen AutoIt Code machen, aber den in VB um zusetzen ist dabei etwas ganz anderes (ganz andere Paramter usw.).

PHP Code:
include <NomadMemory.au3>
#RequireAdmin

$Adresse 0x03438BC


$PID 
WinGetProcess ("Spider Solitär") ;Prozessrechte bekommen
$Open 
_MemoryOpen($PID)               ;Prozess öffnen
$Read 
_MemoryRead ($Adresse$Open'DWord')
MsgBox(64"Punkte"$Read
Ob dir das jetzt was hilft weiß ich nicht. Aber hier hast du halt mal eine Vorlage.
04/12/2010 16:00 iMölwin#13
in Autoit hab ich das schon längst fertig....

Killer
04/12/2010 16:02 HardCore.1337#14
Ach so ok.
Ich könnte dir zeigen wie es in Delphi geht (praktisch gleicher Syntax, da auch nur aus der API gecallt)
04/12/2010 16:45 iMölwin#15
Ne ich versuch ich selbst mal weiter ich hab sowieso erstmal probleme mit nem bug bei meiner autoit anwendung