首页
社区
课程
招聘
[求助]KiFastCallEntry计算入口处疑惑
发表于: 2013-8-10 18:59 4184

[求助]KiFastCallEntry计算入口处疑惑

2013-8-10 18:59
4184
原本是想挖掘进r0的bug,分析KiFastCallEntry到这处有些不懂了。

/* eax=Service Number
   esi=Current_KThread */

KiSystemServiceRepeat:   mov     edi,eax
804de934 c1ef08          shr     edi,8
804de937 83e730          and     edi,30h
804de93a 8bcf            mov     ecx,edi
lkd> 
nt!KiFastCallEntry+0x99:
804de93c 03bee0000000    add     edi,dword ptr [esi+0E0h]
804de942 8bd8            mov     ebx,eax
804de944 25ff0f0000      and     eax,0FFFh
804de949 3b4708          cmp     eax,dword ptr [edi+8]
804de94c 0f8330fdffff    jae     nt!KiBBTUnexpectedRange (804de682)    //jmp if cf=0
804de952 83f910          cmp     ecx,10h
804de955 751b            jne     nt!KiFastCallEntry+0xcf (804de972)
804de957 648b0d18000000  mov     ecx,dword ptr fs:[18h]

typedef struct _SYSTEM_SERVICE_TABLE 
{ 
PVOID ServiceTableBase; 
PULONG ServiceCounterTableBase; 
ULONG NumberOfService; 
ULONG ParamTableBase; 
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE; 

typedef struct _SERVICE_DESCRIPTOR_TABLE 
{ 
SYSTEM_SERVICE_TABLE ntoskrnel;  
SYSTEM_SERVICE_TABLE win32k;  
SYSTEM_SERVICE_TABLE Unknown1; 
SYSTEM_SERVICE_TABLE Unknown2; 
}SYSTEM_DESCRIPTOR_TABLE,*PSYSTEM_DESCRIPTOR_TABLE


这个函数在wrk虽是份asm,但根据它的的表述,猜想思路大概是:
1.eax/256(右移8位),位于后获得需要的SERVICE_TABLE偏移(30h限制了最大得到4)
2.edi = KThread->ServiceTable+得到的偏移 = 所需SYSTEM_SERVICE_TABLE
3.将ax最高位清除,说是分离出序号,每1000h为一个SERVICE_TABLE( 1000h / 256 / sizeof(SYSTEM_SERVICE_TABLE) )
4.cmp eax,[Service_MaxNumber],不小于或负数则尝试转为GUI线程,仍不符合就过掉。

现问题有:
1.转换到GUI线程执行除了因为ServiceTable不同,还有什么原因?貌似不存在恢复线程的代码。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 118
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
KSDT            1张表  //nt内核文件加载的时候就作为init段被初始化了.
KSDTshadow 2张表  //在nt内核的初始化程序里调用 keaddxxxxxxtable添加

KSDT KSDTshadow 第一张表的ServiceCounterTableBase虽然相同.
但是PSYSTEM_SERVICE_TABLE 是不同的。
如果不转GUI 则无法使用所谓的"ShadowSSDT函数"

KiFastCallEntry没什么复杂的.
从ring3 sysenter单步到 算出base+idx*4. 多跟几次就明白了
2013-8-11 18:12
0
游客
登录 | 注册 方可回帖
返回
//