下你所需,载你所想!
汇集开发技术源码资料

汇编进程读写模块/保护虚拟内存

:4.609KB :1 :2020-02-01 15:58:17

部分简介

.子程序 保护虚拟内存, 整数型, 公开, 强制修改虚拟保护,比VirtualProtectEx更强力,请安全使用,成功返回0,失败则返回错误代码
.参数 进程句柄, 整数型, , -1为自身
.参数 内存起始地址, 整数型
.参数 页区域大小, 整数型
.参数 新保护, 整数型
.参数 保存原保护的变量, 整数型, 参考
.局部变量 SSDT_ID, 整数型
.局部变量 WIN64, 逻辑型

SSDT_ID = SSDT_ZwProtectVirtualMemory
WIN64 = 是64位
WriteProcessMemory,失败返回假,可能是因为内存不可写,可以使用“保护虚拟内存”修改,或者尝试以管理员身份运行。

ZwQueryInformationProcess (-1, 26, 取变量指针 (是64位), 4, 0)
NTDLL = GetModuleHandleA (“ntdll.dll”)
SSDT = 指针到字节集 (GetProcAddress (NTDLL, “ZwReadVirtualMemory”), 5)
.如果真 (SSDT [1] = 184) ' mov eax,SSDT
SSDT_ZwReadVirtualMemory = 取字节集数据 (SSDT, #整数型, 2)
.如果真结束
SSDT = 指针到字节集 (GetProcAddress (NTDLL, “ZwWriteVirtualMemory”), 5)
.如果真 (SSDT [1] = 184) ' mov eax,SSDT
SSDT_ZwWriteVirtualMemory = 取字节集数据 (SSDT, #整数型, 2)
.如果真结束
SSDT = 指针到字节集 (GetProcAddress (NTDLL, “ZwProtectVirtualMemory”), 5)
.如果真 (SSDT [1] = 184) ' mov eax,SSDT
SSDT_ZwProtectVirtualMemory = 取字节集数据 (SSDT, #整数型, 2)
.如果真结束
SSDT = 指针到字节集 (GetProcAddress (NTDLL, “ZwOpenProcess”), 5)
.如果真 (SSDT [1] = 184) ' mov eax,SSDT
SSDT_ZwOpenProcess = 取字节集数据 (SSDT, #整数型, 2)
.如果真结束
SSDT = 指针到字节集 (GetProcAddress (NTDLL, “ZwClose”), 5)
.如果真 (SSDT [1] = 184) ' mov eax,SSDT
SSDT_ZwClose = 取字节集数据 (SSDT, #整数型, 2)

汇编进程读写模块/保护虚拟内存

热门推荐

相关文章