老方法;
各种门
自陷门 int 0x2E
新方法:
1.sysenter指令
a. sysenter 被执行之后 将控制权传递给特殊模块寄存器
b.跟systenter 配合的MSRs寄存器有3个
名称 | 偏移 | 说明 |
---|---|---|
SYSENTER_CS_MSR | 0x174 | 切换到ring0 之后的cs选择器 |
SYSENTER_ESP_MSR | 0x175 | 切换到ring0 之后的ESP选择器 |
SYSENTER_EIP_MSR | 0x176 | 切换到ring0 之后的EIP选择器 |
SYSENTER 被执行时,这3个寄存器会执行以下操作:
1.装载SYSENTER_CS_MSR 到CS寄存器,设置目标代码段
2.装载SYSENTER_EIP_MSR 到EIP寄存器,设置目标指令
3.装载SYSENTER_CS_MSR + 8 装载到SS寄存器,设置栈段
4.装载SYSENTER_ESP_MSR 到ESP寄存器,设置栈帧
切换RING0 ;
清除EFLAG的VM标志 ;
(注:
参考EFLAGS详解
EFLAGS主要包含:
1.状态标志(Status Flags)
2.DF标志(DF flag)
这个方向标志(位于EFLAGS寄存器的第10位)控制串指令(MOVS, CMPS, SCAS, LODS以及STOS)。设置DF标志使得串指令自动递减(从高地址向低地址方向处理字符串),清除该标志则使得串指令自动递增。STD以及CLD指令分别用于设置以及清除DF标志。
3.系统标志以及IOPL域(System Flags and IOPL Field)
EFLAGS寄存器中的这部分标志用于控制操作系统或是执行操作,它们不允许被应用程序所修改。VM就在其中:
VM(bit 17) [Virtual-8086 mode flag],置1以允许虚拟8086模式,清除则返回保护模式。
)
执行位于EIP处的RING0例程 ;
2.分析CreateFile三环到0环的调用过程
7518B5F7 FF75 F4 PUSH DWORD PTR SS : [EBP - 0xC]
7518B5FA 8B4D 1C MOV ECX, DWORD PTR SS : [EBP + 0x1C]
7518B5FD FF75 14 PUSH DWORD PTR SS : [EBP + 0x14]
7518B600 8B45 0C MOV EAX, DWORD PTR SS : [EBP + 0xC]
7518B603 FF75 08 PUSH DWORD PTR SS : [EBP + 0x8]
7518B606 8B35 B4101775 MOV ESI, DWORD PTR DS : [<&ntdll.NtCreateFile>]; ntdll_1a.ZwCreateFile
7518B60C FF75 FC PUSH DWORD PTR SS : [EBP - 0x4]
7518B60F 81E1 A77F0000 AND ECX, 0x7FA7
7518B615 FF75 10 PUSH DWORD PTR SS : [EBP + 0x10]
7518B618 894D 1C MOV DWORD PTR SS : [EBP + 0x1C], ECX
7518B61B 51 PUSH ECX
7518B61C 53 PUSH EBX
7518B61D 8D4D E0 LEA ECX, DWORD PTR SS : [EBP - 0x20]
7518B620 51 PUSH ECX
7518B621 0D 80001000 OR EAX, 0x100080
7518B626 8D4D 9C LEA ECX, DWORD PTR SS : [EBP - 0x64]
7518B629 51 PUSH ECX
7518B62A 50 PUSH EAX
7518B62B 8945 0C MOV DWORD PTR SS : [EBP + 0xC], EAX
7518B62E 8D45 F8 LEA EAX, DWORD PTR SS : [EBP - 0x8]
7518B631 50 PUSH EAX
7518B632 FFD6 CALL ESI
call ESI ,跳进去看看
771900A4 > B8 52000000 MOV EAX, 0x52
771900A9 33C9 XOR ECX, ECX
771900AB 8D5424 04 LEA EDX, DWORD PTR SS : [ESP + 0x4]
771900AF 64 : FF15 C0000000 CALL DWORD PTR FS : [0xC0] //注意这条指令
771900B6 83C4 04 ADD ESP, 0x4
771900B9 C2 2C00 RETN 0x2C
跳往0环:
738A2320 EA 1E278A73 3300 JMP FAR 0033:738A271E
738A2327 0000 ADD BYTE PTR DS:[EAX],AL