Dizzy13 Posted December 27, 2016 Report Posted December 27, 2016 (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 December 27, 2016 by Dizzy13 Quote
Active Members MrGrj Posted December 27, 2016 Active Members Report Posted December 27, 2016 (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 December 27, 2016 by MrGrj Quote
Dizzy13 Posted December 27, 2016 Author Report Posted December 27, 2016 Mersi mult, am mai incercat asta o data ieri, si imi da eroare cand apas pe buton.. Uite: http://imgur.com/a/gY6fZ Am incercat cam toate variantele.. Quote
Byte-ul Posted December 27, 2016 Report Posted December 27, 2016 (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 December 27, 2016 by Byte-ul Quote
Dizzy13 Posted December 27, 2016 Author Report Posted December 27, 2016 (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 December 27, 2016 by Dizzy13 Quote
Byte-ul Posted December 27, 2016 Report Posted December 27, 2016 (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 December 27, 2016 by Byte-ul 1 Quote
giv Posted December 28, 2016 Report Posted December 28, 2016 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. Quote