Всем здрасте
.
В общем я не силен в программировании, но думаю что осилить можно всё. В общем я пишу на довольно-таки прикольной оболочке: AutoItX3. Это Basic+Visual Basic. Ну, бэйсик он и есть бейсик.
Ситуация: наткнулся я на своеобразный "плагин", который может работать с памятью. Там несколько функций. Выгрядят так:
Func _MemRead($i_hProcess, $i_lpBaseAddress, $i_nSize, $v_lpNumberOfBytesRead = '')
Local $v_Struct = DllStructCreate ('byte[' & $i_nSize & ']')
DllCall('kernel32.dll', 'int', 'ReadProcessMemory', 'int', $i_hProcess, 'int', $i_lpBaseAddress, 'int', DllStructGetPtr ($v_Struct, 1), 'int', $i_nSize, 'int', $v_lpNumberOfBytesRead)
Local $v_Return = DllStructGetData ($v_Struct, 1)
$v_Struct=0
Return $v_Return
EndFunc
Func _MemWrite($i_hProcess, $i_lpBaseAddress, $v_Inject, $i_nSize, $v_lpNumberOfBytesRead = '')
Local $v_Struct = DllStructCreate ('byte[' & $i_nSize & ']')
DllStructSetData ($v_Struct, 1, $v_Inject)
$i_Call = DllCall('kernel32.dll', 'int', 'WriteProcessMemory', 'int', $i_hProcess, 'int', $i_lpBaseAddress, 'int', DllStructGetPtr ($v_Struct, 1), 'int', $i_nSize, 'int', $v_lpNumberOfBytesRead)
$v_Struct=0
Return $i_Call[0]
EndFunc
Func _MemOpen($i_dwDesiredAccess, $i_bInheritHandle, $i_dwProcessId)
$ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', $i_dwDesiredAccess, 'int', $i_bInheritHandle, 'int', $i_dwProcessId)
If @error Then
SetError(1)
Return 0
EndIf
Return $ai_Handle[0]
EndFunc
Func _MemClose($i_hProcess)
$av_CloseHandle = DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $i_hProcess)
Return $av_CloseHandle[0]
EndFunc
А вот маленькая функция по его использованию:
$Process = 'winmine.exe' ;-> Target process
$PID = ProcessExists($Process) ;-> Get Process ID
$Address = 0x1005330 ;-> Read/write address
$Value = 12 ;-> Value to write
$OpenProcess = _MemOpen(0x38, False, $PID) ;-> Enable reading/writing to the process and get the handle
$v_Read = _MemRead($OpenProcess, $Address, 1) ;-> Read a 1 byte value from the defined address
MsgBox(0,"Info", "The value of address "&HEX($Address, 8)&" is now: "&$v_Read)
$v_Read = _MemWrite($OpenProcess, $Address, $Value, 1);-> Write a new 1 byte value to the defined address
MsgBox(0,"Info", "Writing the value "&$Value&" to address "&HEX($Address, 8))
$v_Read = _MemRead($OpenProcess, $Address, 1) ;-> Read the new value from the defined address
MsgBox(0,"Info", "The value of address "&HEX($Address, 8)&" is now: "&$v_Read)
_MemClose($OpenProcess) ;-> Disable reading/writing to the process
- Собсна, сначала мы должны открыть процесс функцией MemOpen, с какими-то параметрами(не понял первые два параметра: 0x38 и False).
- Потом используя хэндл, полученный после вызова функции MemOpen, мы можем читать память, с указанием адреса(я не понял как искать адрес, и как влияет цифра 1)
А дальше всё по аналогии. Прошу помощи в разъяснении мне что такое _memopen(
0x38,
False... и _memwrite($openprocess,
$Address,$Value,
1)
Спасибо за помощь!