进击某安全卫士的一些假想 V0.1

前言

在x64系统中,从3环进0环会调用syscall,如果是32位程序就需要转换为x64模式再通过syscall进入0环。这里我的想法是32位程序在转换位x64模式的时候插入一些数据或者代码来实现一些骚操作。

分析

首先来看下x64的NtOpenProcess。

右键NtOpenProcess进入查看汇编代码。x64的程序调用了syscall。

查看32位的NtOpenProcess,发现调用了0x77378c50函数。

继续跟进可以看到Wow64Transition函数。

这段代码可以说是wow64转换的精髓了。此处切换cpu代码环境为x64,也可以说从这个时候开始汇编代码已经进入x86和x64统一状态了。

这个时候在3环已经不可以调试了。使用0环调试器来继续跟进。

在jmp far 33:772E6009下断点继续跟进。

这里使用了r8、r11、r13、r14、r15对x86环境进行了保存,之后取得ecx与R15相对寻址跳走执行。

总结

目前的想法是通过硬编码的方式将想要隐藏执行的代码地址放到没有使用的寄存器上, 最后通过jmp far指令转换为x64再去读取寄存器的值来尝试执行一些越权操作。