[已解决] 如何修改内存中的数据?
本帖最后由 guland 于 2010-12-11 12:44 编辑如题,在论坛中翻了半天也没找到相关资料.....
其实我只是想要在一个固定的内存地址中写入一个66字节的数据 http://www.autoitx.com/thread-3735-1-1.html
我这个贴可能对你有点帮助 回复 2# my788521
这篇文章早就拜读过了,一直都是写入失败,不知道是什么原因 调用例子
$kernel32 = DllOpen('kernel32.dll')
$pid = Run(@ScriptDir & '\SRO_Client.exe 0 /4 1 0')
$mid = memopen($pid)
memwrite($mid, 0x65F33C, '8B0D5C79D3008B118B4214FFD05F83C410C3')
memclose($mid)
$kernel32 = DllOpen('kernel32.dll')
DllClose($kernel32)
相关函数
Func memopen($pid)
Local $mid = DllCall($kernel32, 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
Return $mid
EndFunc ;==>memopen
Func memread($mid, $adress, $type = 'dword')
Local $struct = DllStructCreate($type)
DllCall($kernel32, 'int', 'ReadProcessMemory', 'int', $mid, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', '')
Return DllStructGetData($struct, 1)
EndFunc ;==>memread
Func memwrite($mid, $adress, $hex)
Local $struct = DllStructCreate('byte[' & BinaryLen('0x' & $hex) & ']')
For $i = DllStructGetSize($struct) To 1 Step -1
DllStructSetData($struct, 1, BinaryMid('0x' & $hex, $i, 1), $i)
Next
Local $x = DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $mid, 'ptr', $adress, 'int', DllStructGetSize($struct), 'dword', 0x40, 'dword*', 0)
DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $mid, 'int', $adress, 'ptr', DllStructGetPtr($struct), 'int', DllStructGetSize($struct), 'int', 0)
DllCall($kernel32, 'int', 'VirtualProtectEx', 'int', $mid, 'ptr', $adress, 'int', DllStructGetSize($struct), 'dword', $x, 'dword*', 0)
EndFunc ;==>memwrite
Func memclose($mid)
DllCall($kernel32, 'int', 'CloseHandle', 'int', $mid)
EndFunc ;==>memclose 不太懂,先收藏,慢慢读 挺麻烦,论坛里好像有个红色警戒修改器,就这个 测试过,对于我来说,lanfeng的不能用,这个可以用。
页:
[1]