💰 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护盾,突破部分窗口内存保护。