TSS(任务状态段)实验
本帖最后由 古月不傲 于 2020-2-27 17:57 编辑相关资料:
https://blog.csdn.net/weixin_42052102/article/details/83217867
https://blog.csdn.net/qq_38474570/article/details/104273858
https://www.bilibili.com/video/av68700135?p=21
https://blog.csdn.net/q1007729991/article/details/52654402
英特尔® 64 和 IA-32 架构软件开发人员手册合并版:第 1、2A、2B、2C、3A、3B 和 3C 卷
构造TSS描述符
eq 8003f0d8 0000e912`fee40068
0012`fee4 = dwTss地址
kd> dd KeNumberProcessors
80556a6000000001 00000006 00009e0a a0013fff
80556a70806ceec0 00000000 00000000 0000005d
80556a808003f118 00000000 00000000 00000000
80556a9000000001 00000000 00000001 00000002
80556aa000000000 00000000 00000000 00000000
80556ab000000000 00000000 00000000 00000000
80556ac000000000 00000000 00000000 00000000
80556ad000000000 00000000 00000000 00000000
kd> dd KiProcessorBlock
8055d5a0ffdff120 00000000 00000000 00000000
8055d5b000000000 00000000 00000000 00000000
8055d5c000000000 00000000 00000000 00000000
8055d5d000000000 00000000 00000000 00000000
8055d5e000000000 00000000 00000000 00000000
8055d5f000000000 00000000 00000000 00000000
8055d60000000000 00000000 00000000 00000000
8055d61000000000 00000000 00000000 00000000
kd> dt _kpcr ffdff120-120
nt!_KPCR
+0x000 NtTib : _NT_TIB
+0x01c SelfPcr : 0xffdff000 _KPCR
+0x020 Prcb : 0xffdff120 _KPRCB
+0x024 Irql : 0 ''
+0x028 IRR : 0
+0x02c IrrActive : 0
+0x030 IDR : 0xffffffff
+0x034 KdVersionBlock : 0x8054e2b8 Void
+0x038 IDT : 0x8003f400 _KIDTENTRY
+0x03c GDT : 0x8003f000 _KGDTENTRY
+0x040 TSS : 0x80042000 _KTSS
+0x044 MajorVersion : 1
+0x046 MinorVersion : 1
+0x048 SetMember : 1
+0x04c StallScaleFactor : 0x8a0
+0x050 DebugActive : 0 ''
+0x051 Number : 0 ''
+0x052 Spare0 : 0 ''
+0x053 SecondLevelCacheAssociativity : 0 ''
+0x054 VdmAlert : 0
+0x058 KernelReserved : 0
+0x090 SecondLevelCacheSize : 0
+0x094 HalReserved : 0
+0x0d4 InterruptMode : 0
+0x0d8 Spare1 : 0 ''
+0x0dc KernelReserved2: 0
+0x120 PrcbData : _KPRCB
kd> dt _KTSS 0x80042000
nt!_KTSS
+0x000 Backlink : 0x8b24
+0x002 Reserved0 : 0xc45
+0x004 Esp0 : 0x805524f0
+0x008 Ss0 : 0x10
+0x00a Reserved1 : 0x8b08
+0x00c NotUsed1 : 0x758b0855
+0x01c CR3 : 0xac7000
+0x020 Eip : 0xe1750855
+0x024 EFlags : 0x8458b5e
+0x028 Eax : 0x310e8c1
+0x02c Ecx : 0xc25d0845
+0x030 Edx : 0xff8b000c
+0x034 Ebx : 0x8bec8b55
+0x038 Esp : 0xc9330845
+0x03c Ebp : 0xf7104d39
+0x040 Esi : 0x8b1f76d0
+0x044 Edi : 0xb60f0c55
+0x048 Es : 0x1114
+0x04a Reserved2 : 0xd033
+0x04c Cs : 0xe281
+0x04e Reserved3 : 0xff
+0x050 Ss : 0
+0x052 Reserved4 : 0xe8c1
+0x054 Ds : 0x3308
+0x056 Reserved5 : 0x9504
+0x058 Fs : 0x3990
+0x05a Reserved6 : 0x43
+0x05c Gs : 0x3b41
+0x05e Reserved7 : 0x104d
+0x060 LDT : 0
+0x062 Reserved8 : 0xd0f7
+0x064 Flags : 0
+0x066 IoMapBase : 0x20ac
+0x068 IoMaps : _KiIoAccessMap
+0x208c IntDirectionMap: "???"
构造TSS
#include <iostream>
#include <windows.h>
using namespace std;
DWORD dw = 0;
void __declspec(naked) CallFunc()
{
__asm
{
pushad;
pushfd;
__asm int 3;
mov eax, 0x8003f000;
mov ebx, ;
mov dw, ebx;
popfd;
popad;
iretd
}
}
int main(void)
{
DWORD dwCr3 = 0;
scanf("%x", &dwCr3);
char uEsp = {0};
DWORD dwTss = {
0x00000000, //previous task link
0x00000000,//Esp0
0x00000000, //Ss0
0x00000000, //Esp1
0x00000000, //Ss1
0x00000000, //Esp2
0x00000000, //Ss2
dwCr3,//CR3
0x00401000, //Eip
0x00000000, //EFlags
0x00000001, //Eax
0x00000002, //Ecx
0x00000003, //Edx
0x00000004, //Ebx
(DWORD)uEsp,//Esp
0x00000000, //Ebp
0x00000000, //Esi
0x00000000, //Edi
0x00000023, //Es
0x00000008, //Cs
0x00000000, //Ss
0x00000023, //Ds
0x00000030, //Fs
0x00000000, //Gs
0x00000000, //LDT
0x20ac0000 //IoMaps
};
UCHAR uCall = {0};
*(PDWORD)(&uCall) = 0x12345678;
*(PWORD)(&uCall) = 0xDB;
__asm
{
call fword ptr ds:;
}
printf("%x\n", dw);
system("pause");
return 0;
} 本帖最后由 xxpl123 于 2020-5-29 11:12 编辑
请问一下,你确定你发的这个不修改一下能过?不崩溃?还是说需要修改什么?谢谢
还是我两台电脑都有问题? xxpl123 发表于 2020-5-29 11:01
请问一下,你确定你发的这个不修改一下能过?不崩溃?还是说需要修改什么?谢谢
还是我两台电脑都有问题?
肯定要改的 你用intel手册看下TSS的属性构造一下 然后数组的地址要给对dwTss 本帖最后由 xxpl123 于 2020-5-29 12:02 编辑
古月不傲 发表于 2020-5-29 11:43
肯定要改的 你用intel手册看下TSS的属性构造一下 然后数组的地址要给对dwTss
eq 8003f0d8 0000e912`fee40068 这些全改了,包括地址都改了,(这些内容如果没改是不会崩溃的,最多只是找不到内容导致程序出错)。
我问的是你当前的代码就这样能在运行的时候不崩溃吗?
因为按照上面这类代码只要运行必然崩溃。 xxpl123 发表于 2020-5-29 11:59
eq 8003f0d8 0000e912`fee40068 这些全改了,包括地址都改了,(这些内容如果没改是不会崩溃的,最多只是 ...
你还是看视频吧 别问我了好吧 自己去尝试 图都给你了 古月不傲 发表于 2020-5-29 12:33
你还是看视频吧 别问我了好吧 自己去尝试 图都给你了
好吧,我只是在网上看了好几个帖子发的都是你这种代码的,就很想知道难道你们都能通过?(我已经在不同的电脑上都做过测试无法通过)所以很好奇而已,纯属当成一种新的方法的技术讨论而已。
其实只要声明一下就能通过
页:
[1]