Autoit Addressen überschreiben

06/01/2009 16:51 ms​#16
Geht das so einfach? Muss man nicht zuerst die Value in 0x01007170 mit ReadProcessMemory() in lol reinschreiben?
06/01/2009 16:52 __wadim#17
lol = *(DWORD*)0x01007170;
06/01/2009 16:55 ms​#18
Aber in lol steht dann ja die Value in der Adresse 0x01007170 vom eigenen Prozess und nicht vom Zielprozess, oder?
06/01/2009 17:00 .0.-..0-000#19
Genau jetzt habe ich alles verstanden:confused:
XD
06/01/2009 17:14 ms​#20
Habe es eben selbst probiert. Dieser leicht veränderte Code von schlurmann bringt bei mir das gewünschte Ergebnis:
Code:
	[b]DWORD lol     = 0;[/b]
	DWORD buffer  = 150;
	DWORD procId  = 0;
	DWORD written = 0;

	HWND soltwnd = FindWindowA(NULL, "Solitär");
	GetWindowThreadProcessId(soltwnd, &procId);
	HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procId);

	[b]ReadProcessMemory(hProc, (void*)0x01007170, &lol, 4, &written);[/b]
	WriteProcessMemory(hProc, (void*)(lol + 0x30), &buffer, 4, &written);
	return 0;
06/01/2009 17:15 .0.-..0-000#21
Das liegt eindeutig an NomadMemory:
nicht mal das klappt und die Addresse ist 100% richtig:
Code:
#include <NomadMemory.au3>

If not WinExists("Solitär") Then
	MsgBox(0,"Error","Starte zuerst Solitär und dann den Hack!")
	Exit
EndIf

$address = 0x0022D870 ; adresse des Zeigers
$process = WinGetProcess("Solitär")
$OpenProccess = _MemoryOpen($Process)

If @error Then
    MsgBox(0,"error","error opening process.")
    Exit
EndIf

MsgBox(0,"Punkte", "Du hast " & _MemoryRead($OpenProccess, $address) & " Punkte") ; Sollte die Punkte ausgeben die man hat
_MemoryWrite(hex($address2), $OpenProccess, 150,"int"); Trägt 150 in die Punkteaddresse ein. Danach sollte man 150 Punkte haben.
06/01/2009 17:34 schlurmann#22
Ja Disconnect, du hast Recht. Habe ich gepennt. :P
06/01/2009 17:34 kknb#23
wenne es so machst funzt es tadellos, musst dir nur deine adresse eintragen.

Code:
#include <NomadMemory.au3>

If not WinExists("Solitaire") Then
	MsgBox(0,"Error","Starte zuerst Solitär und dann den Hack!")
	Exit
EndIf

$address = 0x03044d70 ; adresse des Zeigers
$process = WinGetProcess("Solitaire")
$OpenProccess = _MemoryOpen($Process)

If @error Then
    MsgBox(0,"error","error opening process.")
    Exit
EndIf

MsgBox(0,"Punkte", "Du hast " & _MemoryRead($address, $OpenProccess) & " Punkte") ; Sollte die Punkte ausgeben die man hat
_MemoryWrite($address, $OpenProccess, 150,"int"); Trägt 150 in die Punkteaddresse ein. Danach sollte man 150 Punkte haben.
06/01/2009 17:38 schlurmann#24
Quote:
Originally Posted by kknb View Post
wenne es so machst funzt es tadellos, musst dir nur deine adresse eintragen.

Code:
#include <NomadMemory.au3>

If not WinExists("Solitaire") Then
	MsgBox(0,"Error","Starte zuerst Solitär und dann den Hack!")
	Exit
EndIf

$address = 0x03044d70 ; adresse des Zeigers
$process = WinGetProcess("Solitaire")
$OpenProccess = _MemoryOpen($Process)

If @error Then
    MsgBox(0,"error","error opening process.")
    Exit
EndIf

MsgBox(0,"Punkte", "Du hast " & _MemoryRead($address, $OpenProccess) & " Punkte") ; Sollte die Punkte ausgeben die man hat
_MemoryWrite($address, $OpenProccess, 150,"int"); Trägt 150 in die Punkteaddresse ein. Danach sollte man 150 Punkte haben.
Nach der Bezeichnung stimmt da aber etwas nicht.

Man muss nämlich differenzieren zwischen "Adresse des Zeigers" und "Adresse auf die der Zeiger zeigt". Zwei völlig unterschiedliche Dinge.
06/01/2009 17:52 kknb#25
die kommentare kannst du bei dem scriptbeispiel ausser acht lassen, die habe ich so übernommen.

btw eigentlich gehört das ja in den autoit bereich.
06/01/2009 18:01 .0.-..0-000#26
So klappts:
#include <NomadMemory.au3>


_MemoryWrite("0x0021D870",_MemoryOpen(ProcessExist s("sol.exe")),"999998")
06/01/2009 18:06 kknb#27
ja und das ist ja nix anders, ausser das du nicht mit variablen arbeitest.
06/01/2009 18:10 .0.-..0-000#28
Habe den Hack vervollstängigt: (warn Problem mit strings)
Code:
#include <NomadMemory.au3>

If not WinExists("Solitär") Then
    MsgBox(0,"Error","Starte zuerst Solitär und dann den Hack!")
    Exit
EndIf

$address1 = "0x01007170" ; adresse des Zeigers
$offset = 0x30

$esp = _MemoryRead(($address1), _MemoryOpen(ProcessExists("sol.exe")))
$address2 = String(int($esp) + $offset)
$punkte = _MemoryRead(($address2), _MemoryOpen(ProcessExists("sol.exe")))
MsgBox(0,"[DEBUG]", "Du hast " & $punkte & " Punkte")

_MemoryWrite($address2,_MemoryOpen(ProcessExists("sol.exe")),"9999999999")
06/01/2009 18:19 Adroxxx#29
Habs mal in's AutoIt Forum verschoben.