跳到主要内容

💰 VirtualProtectEx 修改内存空间

🎯功能

修改指定的窗口所在进程的地址的读写属性,修改为可读可写可执行

📜语法

结果 = dm.VirtualProtectEx(句柄, 地址, 长度, 类型, 原访问方式)

📥参数

参数数据类型解释
句柄整型数窗口句柄或者进程ID. 默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId
地址长整型数需要修改的地址
长度整型数需要修改的地址大小
类型整型数修改的地址读写属性类型; 0:可读可写可执行,此时原访问方式参数无效; 1:修改为原访问方式指定的读写属性
原访问方式整型数指定的读写属性

📤返回

整型数, 0为失败, 1为修改之前的读写属性

💡示例

// 修改地址&H400000为可读可写可执行,并把修改之前的读写属性保存
old_protect = dm.VirtualProtectEx(hwnd,&H400000,5,0,0)
if old_protect <> 0 then
dm.AsmClear
dm.AsmAdd "lea eax,[400000]"
dm.AsmAdd "mov dword ptr[eax],0"
dm.AsmCall hwnd,1
dm.VirtualProtectEx hwnd,&H400000,5,1,old_protect
end if

📘备注

如果正常方式无法修改内存的读写属性,可以尝试配合DmGuard中的memory护盾,突破部分窗口内存保护。