Hallo zusammen,
ich bin noch relativ unerfahren was VB angeht. Deswegen wollte ich euch bitten mir vlt zu helfen.
Sobald ich die WriteMemory in eine hier komplett leere Form einfüge ( habs euch schon mit fertigem coding versucht) erscheinen die fehlermeldungen:
Wo liegt der Fehler ? bzw wie könnte ich ihn beheben?
Module ReadWritingMemory Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
Private Declare Function WriteProcessMemory1 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 Declare Function WriteProcessMemory2 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single Private Declare Function WriteProcessMemory3 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
Private Declare Function ReadProcessMemory1 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 Private Declare Function ReadProcessMemory2 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single Private Declare Function ReadProcessMemory3 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
Const PROCESS_ALL_ACCESS = &H1F0FF
Public Function WriteDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Integer, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1) Next WriteInteger(Process, lvl, Value, nsize) Return True Catch ex As Exception Return False End Try End Function
Public Function ReadDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Integer Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1) Next Dim vBuffer As Integer vBuffer = ReadInteger(Process, lvl, nsize) Return vBuffer Catch ex As Exception
End Try End Function
Public Function WriteDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Single, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1) Next WriteFloat(Process, lvl, Value, nsize) Return True Catch ex As Exception Return False End Try End Function
Public Function ReadDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Single Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1) Next Dim vBuffer As Single vBuffer = ReadFloat(Process, lvl, nsize) Return vBuffer Catch ex As Exception
End Try End Function
Public Function WriteDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Long, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1) Next WriteLong(Process, lvl, Value, nsize) Return True Catch ex As Exception Return False End Try End Function
Public Function ReadDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Long Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1) Next Dim vBuffer As Long vBuffer = ReadLong(Process, lvl, nsize) Return vBuffer Catch ex As Exception
End Try End Function
Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer) Dim C As Integer Dim B As Integer If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Sub End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Sub End If
B = 0 For C = 1 To NOPNum Call WriteProcessMemory1(hProcess, Address + B, &H90, 1, 0&) B = B + 1 Next C End Sub
Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String) If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Sub End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Sub End If
Dim C As Integer Dim B As Integer Dim D As Integer Dim V As Byte
B = 0 D = 1 For C = 1 To Math.Round((Len(Value) / 2)) V = Val("&H" & Mid$(Value, D, 2)) Call WriteProcessMemory1(hProcess, Address + B, V, 1, 0&) B = B + 1 D = D + 2 Next C
End Sub
Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4) If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Sub End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Sub End If
Dim hAddress, vBuffer As Integer hAddress = Address vBuffer = Value WriteProcessMemory1(hProcess, hAddress, CInt(vBuffer), nsize, 0) End Sub
Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4) If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Sub End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Sub End If
Dim hAddress As Integer Dim vBuffer As Single
hAddress = Address vBuffer = Value WriteProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0) End Sub
Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4) If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Sub End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Sub End If
Dim hAddress As Integer Dim vBuffer As Long
hAddress = Address vBuffer = Value WriteProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0) End Sub
Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Function End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Function End If
Dim hAddress, vBuffer As Integer hAddress = Address ReadProcessMemory1(hProcess, hAddress, vBuffer, nsize, 0) Return vBuffer End Function
Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Function End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Function End If
Dim hAddress As Integer Dim vBuffer As Single
hAddress = Address ReadProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0) Return vBuffer End Function
Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long If ProcessName.EndsWith(".exe") Then ProcessName = ProcessName.Replace(".exe", "") End If Dim MyP As Process() = Process.GetProcessesByName(ProcessName) If MyP.Length = 0 Then MessageBox.Show(ProcessName & " isn't open!") Exit Function End If Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id) If hProcess = IntPtr.Zero Then MessageBox.Show("Failed to open " & ProcessName & "!") Exit Function End If
Dim hAddress As Integer Dim vBuffer As Long
hAddress = Address ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0) Return vBuffer End Function
Wo bekommt ihr eigentlich immer dieses abnormal schlampig programmierte VB File her? Ständig gibt's Probleme damit - letztens erst wegen Inkompatibilität auf 64 Bit Systemen.
Lies doch bitte nochmal die Fehlermeldung in der Konsole (ist btw. nur ne Warnung) und schau dir die Funktion ReadDMALong mal an. Siehst du nicht, dass hier im Falle einer Exception nichts zurückgegeben wird obwohl angegeben wurde dass ein Wert vom Typ long zurückgegeben wird? Ich behebe das mal mit Absicht nicht, weil du sonst morgen fragen wirst, wie man eine Variable deklarieren und definieren kann. So etwas gehört zu den Grundlagen, ich rate dir diese durchzugehen bevor du dich mit Speicherzugriffen beschäftigst.
Das könnte durchaus böse enden wenn die Exception auftritt und sich dein Code auf den Rückgabewert verlässt.
Woher bekommt ihr eigentlich immer dieses abnormal schlampig programmierte VB File her? Ständig gibt's Probleme damit - letztens erst wegen Inkompatibilität auf 64 Bit Systemen.
Lies doch bitte nochmal die Fehlermeldung in der Konsole (ist btw. nur ne Warnung) und schau dir die Funktion ReadDMALong mal an. Siehst du nicht, dass hier im Falle einer Exception nichts zurückgegeben wird obwohl angegeben wurde dass ein Wert vom Typ long zurückgegeben wird? Ich behebe das mal mit Absicht nicht, weil du sonst morgen fragen wirst, wie man eine Variable deklarieren und definieren kann. So etwas gehört zu den Grundlagen, ich rate dir diese durchzugehen bevor du dich mit Speicherzugriffen beschäftigst.
Das könnte durchaus böse enden wenn die Exception auftritt und sich dein Code auf den Rückgabewert verlässt.
Vielen dank!
Ja wie oben geschrieben ^^ bin relativ frisch in VB angekommen (gestern )
hab erst ein paar bots kleine files usw gemacht aber danke trdm! Ich schau mir ja immernoch nebenbei bischen die Grundlagen an und überarbeite das script mal. Kannst dus dir dann nochmal anschauen ?
Aber du wirst die Klasse nicht vernünftig überarbeiten können, wenn du die Grundlagen nicht kannst. Vor allem geht ein Teil davon über das was ich als Grundlagen bezeichnen würde hinaus. Zum Beispiel wird dort immer der Prozess neu gesucht und nach einem Handle gefragt (mit OpenProcess). Das ist unnötig. Wenn man den Handle einmal hat kann man diesen doch Speichern. Ich denke mal nicht, dass du in 2 Prozesse gleichzeitig schreiben möchtest. Falls doch müsstest du die Handle halt in einem Dictionary speichern. Außerdem sollte man immer CloseHandle aufrufen, nachdem man einen Handle nicht mehr benutzt ("Generally, an application should call CloseHandle once for each handle it opens." ).
Die Fehlerbehandlung könnte man auch noch verbessern. Aber wie gesagt das sind keine Sachen die man nach einem Tag kann oder können muss (denke mal, dass VB deine erste Sprache ist, die du lernst). Ich würde dir empfehlen die Sprache zu lernen und mich dann mit der WindowsAPI auseinanderzusetzen. Dann kannst du dir deine eigene Klasse schreiben, die das ändern von Werten vereinfacht.
Aber du wirst die Klasse nicht vernünftig überarbeiten können, wenn du die Grundlagen nicht kannst. Vor allem geht ein Teil davon über das was ich als Grundlagen bezeichnen würde hinaus. Zum Beispiel wird dort immer der Prozess neu gesucht und nach einem Handle gefragt (mit OpenProcess). Das ist unnötig. Wenn man den Handle einmal hat kann man diesen doch Speichern. Ich denke mal nicht, dass du in 2 Prozesse gleichzeitig schreiben möchtest. Falls doch müsstest du die Handle halt in einem Dictionary speichern. Außerdem sollte man immer CloseHandle aufrufen, nachdem man einen Handle nicht mehr benutzt ("Generally, an application should call CloseHandle once for each handle it opens." ).
Die Fehlerbehandlung könnte man auch noch verbessern. Aber wie gesagt das sind keine Sachen die man nach einem Tag kann oder können muss (denke mal, dass VB deine erste Sprache ist, die du lernst). Ich würde dir empfehlen die Sprache zu lernen und mich dann mit der WindowsAPI auseinanderzusetzen. Dann kannst du dir deine eigene Klasse schreiben, die das ändern von Werten vereinfacht.
Hmm okay danke!
Nach ein wenig überlegung bin ich auch zu dem Entschluss gekommen^^.
Jedoch sollte für den ersten Kommi
PHP Code:
Return True
vor dem EndIf reichen oder?
Könntest du vlt mal erklären oder link geben wo ich das gut beschrieben bekomme ... finde auf epvp nur so low tuts von irgendwelchen newbies
nicht hilfreich noch dazu weil ich mich ja bemühe dies zu tun wie in den oberen kommis schon zu lesen ist. aber trdm danke für die Hilfe.
Du bemühst dich leider überhaupt nicht, da liegt das Problem. Du kannst nicht einfach im Fehlerfall 1 zurückgeben wenn die aufrufende Funktion garantiert bekommt, dass hier ein long zurückgegeben wird. Das kann gut gehen wenn die Rückgabe nicht verwendet wird aber wenn doch...
Kann man auch anders sehen: Ist es dir egal wenn deine Handbremse im Auto im Falle eines Fehlers (sei mal dahingestellt welcher es ist) anstatt zu bremsen die Drehzahl erhöht und Gas gibt? Ich glaube nicht.
Wie auch immer, der Code produziert Warnungen und keine Fehler. Du hast in dem Fall eigentlich keine andere Wahl als sie zu ignorieren weil du die Grundlagen nicht drauf hast um die Fehler zu beheben. Wenn du tatsächlich bemüht bist diese Warnungen zu beheben, solltest du dir anschauen was deine Funktionen überhaupt machen, was Funktionen (mit Rückgabetyp) sind und wie man Exceptions vernünftig einsetzt/auffängt.
VB.NET WriteMemory mit Multipointern ????? 10/31/2013 - .NET Languages - 10 Replies Hallo Com,
Ich hab ne Frage: ich versuche zum testen in Solitär ein Trainer zu basteln,
ich habe mir da den Basepointer rausgesucht und versucht den so zu benutzen, hier ein Beispiel:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim p As Process() = Process.GetProcessesByName("Solitaire")
If Not p.Length = 0 Then
Memory.Writememory(p(0), &HFFD0AFA8 + &HE + &H32, CInt(TextBox1.Text), 4)
[ENG] Error: Error 1 error C2601: 'HackMain' local function definitions are illegal 08/20/2013 - C/C++ - 1 Replies So, as the title says I've been encountering an error
Error 1 error C2601: 'HackMain' local function definitions are illegal
I'm running on VC++ (Visual C++)
This is my code:
void HackMain()
{
for (;; )
{
HackThread();
}
API Error Code: 100 API Error Description: Invalid parameter Error Message: redirect_ 04/08/2012 - elite*gold Trading - 2 Replies API Error Code: 100
API Error Description: Invalid parameter
Error Message: redirect_uri URL is not properly formatted
Das bekomme ich wenn ich ne App installiere... ich habe schon 3 Apps richtig installiert, danach kam immer das bei anderen Apps die ich installiert habe..
was heisst das? redirect_uri URL is not properly formatted
Writememory? [VB08] 08/22/2010 - .NET Languages - 0 Replies Wie Schreibe ich die Adressen in VB2008?
0x004DDF77
orig bytes: 0xE8, 0x44, 0x97, 0x01, 0x00
patch: 0x90, 0x90, 0x90, 0x90, 0x90
OR
0x004F76C0
orig: 0x83, 0xEC, 0x0C
patch: 0xC3, 0x90, 0x90