易语言实现的ring3进程保护

易语言 2020-08-15 19:28:52

易语言实现的ring3进程保护

API原地址 = GetProcAddress (GetModuleHandle (模块名), 函数名) ' 获取API函数地址
.如果真 (API原地址 = 0)
返回 (假)
.如果真结束
VirtualProtect (API原地址, 8, 64, 原保护) ' 把内存块设置为可读写
NEWAPI = { 184 } + 到字节集 (子程序地址) + { 255, 224 } ' 生成新机器码数据
BAKAPI = 指针到字节集 (API原地址, 7) ' 保存旧机器码数据
写字节集内存 (API原地址, NEWAPI)

.如果真 (到小写 (取执行文件名 ()) ≠ “explorer.exe”)
地址 = GetProcAddress (GetModuleHandle (“kernel32.dll”), “OpenProcess”)
.如果真 (指针到字节集 (地址, 8) = { 139, 255, 85, 139, 236, 131, 236, 32 })
HOOK_OpenProcess ()
.如果真结束
地址 = GetProcAddress (GetModuleHandle (“ntdll.dll”), “ZwOpenProcess”)
.如果真 (指针到字节集 (地址, 8) = { 184, 122, 0, 0, 0, 186, 0, 3 })
' HOOK_ZwOpenProcess ()

UnhookWindowsHookEx (钩子句柄)
钩子句柄 = 0
模块句柄 = GetModuleHandle (“hookapi.dll”)
函数地址 = GetProcAddress (模块句柄, “UninstallHook”)
.如果真 (函数地址 > 0)
钩子句柄 = SetWindowsHookEx (#WH_GETMESSAGE, 函数地址, 模块句柄, 0)
.如果真 (映射对象 = 0)
映射对象 = CreateFileMapping (-1, 0, #PAGE_READWRITE, 0, 4, “apihook2011”)
.如果真结束
.如果真 (内存地址 = 0)
内存地址 = MapViewOfFile (映射对象, #FILE_MAP_WRITE, 0, 0, 0)
.如果真结束
CopyMemory_Write (内存地址 + 4, 钩子句柄, 4)