找回密码
 加入
搜索
查看: 1987|回复: 5

请问如何才能锁定程序的内存值?

[复制链接]
发表于 2009-2-12 23:50:01 | 显示全部楼层 |阅读模式
在编程过程中,遇到一个问题。我想对一个运行中的程序的某一部分的内存值进行修改并锁定,有些像用金山游侠修改游戏那般,但不是数值,而是一段字串。请教高手们,autoit能不能做到,有没有这样的udf,或者还是要调用api什么的?
发表于 2009-2-13 03:21:12 | 显示全部楼层
不停的写

数据和字串是一样的  char[长度]

[ 本帖最后由 sxd 于 2009-2-13 10:39 编辑 ]
 楼主| 发表于 2009-2-13 07:46:43 | 显示全部楼层
楼上的,能不能说得详细些?有没有这样的例子啊?谢谢先。
发表于 2009-2-13 10:38:10 | 显示全部楼层
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
        If Not ProcessExists($iv_Pid) Then
                SetError(1)
                Return 0
        EndIf
        Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
        If @error Then
                SetError(2)
                Return 0
        EndIf
        Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
        If @error Then
                DllClose($ah_Handle[0])
                SetError(3)
                Return 0
        EndIf
        $ah_Handle[1] = $av_OpenProcess[0]
        Return $ah_Handle
EndFunc   ;==>_MemoryOpen
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        Local $v_Buffer = DllStructCreate($sv_Type)
        If @error Then
                SetError(@error + 1)
                Return 0
        EndIf
        DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
        If Not @error Then
                Local $v_Value = DllStructGetData($v_Buffer, 1)
                Return $v_Value
        Else
                SetError(6)
                Return 0
        EndIf
EndFunc   ;==>_MemoryRead
Func _MemoryClose($ah_Handle)
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
        If Not @error Then
                DllClose($ah_Handle[0])
                Return 1
        Else
                DllClose($ah_Handle[0])
                SetError(2)
                Return 0
        EndIf
EndFunc   ;==>_MemoryClose
Func _MemoryWrite($iv_Address, $ah_Handle, $v_Data, $sv_Type = 'dword')
        If Not IsArray($ah_Handle) Then
                SetError(1)
                Return 0
        EndIf
        Local $v_Buffer = DllStructCreate($sv_Type)
        If @error Then
                SetError(@error + 1)
                Return 0
        Else
                DllStructSetData($v_Buffer, 1, $v_Data)
                If @error Then
                        SetError(6)
                        Return 0
                EndIf
        EndIf
        DllCall($ah_Handle[0], 'int', 'WriteProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
        If Not @error Then
                Return 1
        Else
                SetError(7)
                Return 0
        EndIf
EndFunc   ;==>_MemoryWrite
发表于 2009-2-16 16:37:05 | 显示全部楼层
好东东啊????路过
 楼主| 发表于 2009-2-16 22:23:21 | 显示全部楼层
回复晚了,谢谢。正好,代码区有个红警修改器可参考。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 13:32 , Processed in 0.072913 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表