|
|
#12 | |||||||||||||
![]()
|
اقتباس:
اقتباس:
;------------------------------------------------------------------------------ ; Memory functions - ;------------------------------------------------------------------------------ Func _OpenProcess($hWnd, $use_pid=0) If $use_pid = 0 Then Local $pid = DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd, "int*", 0) If IsArray($pid) Then $pid = $pid[2] Else SetError(-1) Return EndIf Else Local $pid = $hWnd EndIf ; 0x001f0fff - All Access Local $pHandle = DllCall("kernel32.dll", "long", "OpenProcess", "int", 0x001f0fff, "int", 0, "int", $pid) If IsArray($pHandle) And $pHandle[0] > 0 Then $pHandle = $pHandle[0] Else SetError(-2) Return EndIf Return $pHandle EndFunc Func _CloseHandle($pHandle) DllCall("kernel32.dll", "int", "CloseHandle", "int", $pHandle) EndFunc Func _WriteFloat($pHandle, $Address, $value) Local $float = DllStructCreate("float") DllStructSetData($float, 1, $value) ; Need to make the memory writeable first! You should really restore the page protection afterwards though, but this is to make it work $outDw = 1 DllCall("kernel32.dll", "int", "VirtualProtectEx", "int", $pHandle, "ptr", $Address, "int", 4, "dword", 0x40, "dword*", $outDw) Local $ret = DllCall("kernel32.dll", "int", "WriteProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0) If IsArray($ret) Then If $ret[0] <> 0 Then Return True Else SetError(-2) Return False EndIf Else SetError(-1) Return False EndIf EndFunc Func _ReadFloat($pHandle, $Address) Local $floatReturn = 0 Local $float = DllStructCreate("float") Local $ret = DllCall("kernel32.dll", "int", "ReadProcessMemory", "int", $pHandle, "int", $Address, "ptr", DllStructGetPtr($float), "int", 4, "int", 0) If IsArray($ret) Then If $ret[0] = 1 Then $floatReturn = DllStructGetData($float, 1) Else SetError(-1) EndIf Else SetError(-2) EndIf Return $floatReturn EndFunc ;------------------------------------------------------------------------------ ; Script code - ;------------------------------------------------------------------------------ $address = 0xD2E450 $pHandle = _OpenProcess(WinGetHandle("SRO_Client")) MsgBox(64, "TEST BYTE PTR DS:[ESI-11C],1", "Current distance in AutoSelect is: " & _ReadFloat($pHandle, $address)) MsgBox(64, "ksro D2E450", _WriteFloat($pHandle, $address, 200)) MsgBox(64, "tsro C647AC", "AutoSelect distance now: " & _ReadFloat($pHandle, $address)) _CloseHandle($pHandle) اقتباس:
|
|||||||||||||
|
| يتصفح الموضوع حالياً : 1 (0 عضو و 1 زائر) | |
|
|