__asm //去掉内核页面保护
{
cli
mov eax, cr0
and eax, not 10000h
mov cr0, eax
}
pNow_Data...//恢复内核页面保护
// 恢复代码汇编版本,替换到上方完整代码指定字段即可,此处不做演示。
__asm{........}...{
cli
mov eax, cr0
and eax, not 10000h
mov cr0, eax
}
// 拷贝内存,在NtOpen的地址基础上加3,填充为 jmp 指令填充4...字节
RtlCopyMemory(NtOpen+3, Jmp_OEP, 5);
__asm //恢复内核页面保护
{
mov eax, cr0
or eax, 10000h
mov.../ 获取到函数的返回地址,相加后得到,0x6h就是指令的间隔
mov RetAddr, eax // 获取返回的地址
pop eax
}
// Jmp_Addr