Jump to content
Dizzy13

[VB.NET] Read Memory

Recommended Posts

Posted (edited)

Salut!

Deci am functia asta:

Private Function ReadMemoryInt(ByVal baseAddress As Integer, ByVal size As Integer) As Integer
        Try
            Dim vBuffer As Integer = Nothing
            ReadProcessMemory(HandleReturn(True), CType(baseAddress, IntPtr), vBuffer, CType(size, IntPtr), Nothing)
            Return vBuffer 
        Catch ex As Exception
            Return 0
        End Try
    End Function

si butonul asta:

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
        Dim full As Integer = 100
        Dim CPed As Integer = ReadMemoryInt(&HB6F5F0, 4)
        WriteFloat("gta_sa", (CPed + &H540), full)
     
    End Sub

Problema e ca mereu din CPed + &H540 imi rezulta 01344, 0 fiind CPed si 1344 fiind &H540. Si nu stiu cu ce am gresit la CPed..

Edited by Dizzy13
  • Active Members
Posted (edited)

Nu stiu VB, insa ai putea incerca sa nu citesti CPed ca Int pentru ca nu este.

 

Deci:

Dim CPed As Integer = ReadMemoryInt(&HB6F5F0, 4)

Ar deveni:

Dim CPed As Integer = BitConverter.ToInt32(ReadMemory(&HB6F5F0, 4), 0)

 

Apoi:

Dim Plm As String = Hex(CPed + &H540)

 

Si apoi:

Plm = "&H"+ Plm

In final, convertesti in float si aia e :)

Edited by MrGrj
Posted (edited)

Verifica daca iti citeste bine de la adresa aia de memorie.

De ce citesti mai intai de la B6F5F0h, urmand apoi sa scrii la adresa indicata de valoarea citita de acolo + 540h?

Sigur nu vrei sa scrii la B6F5F0h + 540h direct?

Edited by Byte-ul
Posted (edited)
6 hours ago, Byte-ul said:

Verifica daca iti citeste bine de la adresa aia de memorie.

De ce citesti mai intai de la B6F5F0h, urmand apoi sa scrii la adresa indicata de valoarea citita de acolo + 540h?

Sigur nu vrei sa scrii la B6F5F0h + 540h direct?

Ce incerc sa fac eu e un trainer pentru un joc care sa schimbe viata caracterului. &HB6F5F0 este adresa caracterului din joc, iar 0x540 este adresa vietii din joc.Din cate am inteles de pe niste forumuri adresa caracterului trebuie citita ca integer pentru ca e o adresa dinamica or some shit, nu am inteles prea bine.De 2 zile tot incerc sa-i dau de cap..

Am incercat si asa si primesc aceeasi eroare:

Dim val As Integer = BitConverter.ToInt32(ReadMemory(&HB6F5F0, 4), 0) 
val = val + 1344 '0x540 = 1344 decimal
Dim adresa As String = "&H" + Hex(val)
Dim health As Single = 100
WriteFloat("gta_sa", adresa, health)

 

Edited by Dizzy13
Posted (edited)
52 minutes ago, Dizzy13 said:

Ce incerc sa fac eu e un trainer pentru un joc care sa schimbe viata caracterului. &HB6F5F0 este adresa caracterului din joc, iar 0x540 este adresa vietii din joc.Din cate am inteles de pe niste forumuri adresa caracterului trebuie citita ca integer pentru ca e o adresa dinamica or some shit, nu am inteles prea bine.De 2 zile tot incerc sa-i dau de cap..

Am incercat si asa si primesc aceeasi eroare:


Dim val As Integer = BitConverter.ToInt32(ReadMemory(&HB6F5F0, 4), 0) 
val = val + 1344 '0x540 = 1344 decimal
Dim adresa As String = "&H" + Hex(val)
Dim health As Single = 100
WriteFloat("gta_sa", adresa, health)

 

Daca stii adresa caracterului deja, cum sa fie dinamica? :)) Incearca sa scrii la B6F5F0h + 540h si vezi ce se intampla. Adresa vietii din joc este relativa la adresa caracterului.

 

Incearca sa urmezi pasii astia in Cheat Engine si vezi daca functioneaza, apoi iti faci programel in vb.net

Edited by Byte-ul
  • Upvote 1
Posted

Din ce vad faci o greseala de incepator.

Prima data incapsuleaza blocul de date din buton in try/catch.

Daca iti arunca eroare vezi care este intr-un MsgBox.

try
....fa ceva aici
catch ex as exception
MsgBox(ex.ToString)
end try

Din cate vad trimiti catre functie un parametru nul.

Interfata iti spune sa initializezi o noua instanta folosind paramentrul "new".

 

Tu ai:

Private Function ReadMemoryInt(ByVal baseAddress As Integer, ByVal size As Integer) As Integer

Deci iti trebuie adresa si numarul de biti cititi. Apoi poti folosi Cint(rezultat) sa convertesti in intreg rezultatul.

 

Tie iti intoarce eroare ca si cand nu poate citi de acolo. Trebuie sa verifici prima data daca e ceva acolo sau nu.

 

http://stackoverflow.com/questions/6417902/checking-if-an-object-is-null-in-c-sharp

 

Ca idee vezi ca structura acestui API este un pic diferita.

 

Uite un exemplu aici despre cum ar trebui sa faci. Adapteaza-l.

 

http://stackoverflow.com/questions/28189255/vb-net-readprocessmemory-string

Inca un lucru.

Vad ca vrei sa faci nu stiu ce cheat pentru acel executabil.

Ia-o metodic.

Prima data citeste adresa de memorie la care are baza .

Exemplu in  C# aici:

http://stackoverflow.com/questions/19847107/using-base-pointers-with-offset-to-read-process-memory

In XP toate se incarca la 0x400000 dar in versiunile ulterioare au adresa de baza dinamica.

Apoi pune imagebase intr-o variabila.

La aceasta variabila adauga RVA si ajungi la datele care te intereseaza in orice OS.

Foloseste aceste variabile la gasirea datelor in loc de o adresa fixa.

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...