能力值:
( LV2,RANK:10 )
|
-
-
2 楼
汗死……64位下,tmd ssdt表就没有导出……
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
刚吃饭回来 查了一下 的确是个悲剧 找方法拙计ing
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
1.内核SSDT没有导出 只能用ZW函数找特征
2.有PG在...你能干嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
PG可以日掉的
还有inline hook 在64位下比 ssdt hook稳定
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
干掉PG会导致严重的安全问题..
所以是无法商业化的.  .自己用就随便了
为啥64位下inline反而稳定呢?
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
PG已经干掉了 就是找下SSDT而已~
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
你要这样想哦,自己的电脑,关了PG,  自己想怎么搞自己的系统,就怎么搞,但是,其他软件因为不知道
有没有关PG,所以不敢乱搞
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
兄弟给指点下 SSDT有啥比较方便快捷的获取方式 我考虑了一下还是觉得 比INLINE舒服点。
反正我也是自己电脑折腾
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
你真懒啊,下次得百度一下啊~
我搜索了2篇文章,可以看看
645K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3@1#2K9r3!0E0k6g2)9J5k6h3y4G2L8g2)9J5c8X3u0T1M7#2)9J5c8Y4c8Z5M7X3g2S2k6q4)9J5k6o6j5J5z5o6W2Q4x3X3b7I4i4K6u0V1x3g2)9J5k6h3S2@1L8h3H3`.
dd5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3E0S2L8X3I4A6N6i4S2A6L8X3N6Q4x3X3g2U0L8$3#2Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7I4x3e0t1^5i4K6u0V1x3g2)9J5k6o6q4Q4x3X3g2Z5N6r3#2D9
貌似PDB文件解析KeServiceDescriptorTable这个符号,x64下就能获取地址~
 或者搜索特征码,
|
能力值:
( LV5,RANK:60 )
|
-
-
11 楼
f9eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3L8s2A6A6L8$3N6Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0j5H3y4e0V1@1x3o6V1`.
这篇文章也不错~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
这篇文章挺好,,  哇咔咔,小K...大雄可是和我们同一个时代的人呐..
 你们都比我积极多了。
|
能力值:
( LV9,RANK:380 )
|
-
-
13 楼
//true:ssdt
//false:shadowssdt
PSERVICE_DESCRIPTOR_TABLE GetSsdtExTable(unsigned char *ZwCloseProcBase,BOOLEAN SsdtType)
{
UNICODE_STRING FunctionName;
LDE Ldex64=NULL;
int nIndex;
DWORD64 OpcodeLength;
BOOLEAN IsFound;
LONG ImmTemp;
DWORD_PTR UsignedImmTemp;
unsigned char * KiServiceInternal;
DWORD_PTR KeServiceDescriptorTableShadow;
if (ZwCloseProcBase == NULL)
{
return NULL;
}
Ldex64=(LDE)ExAllocatePool(NonPagedPool,sizeof(LdeCode));
if (Ldex64==NULL)
{
return FALSE;
}
RtlCopyMemory(Ldex64,LdeCode,sizeof(LdeCode));
IsFound=FALSE;
for (nIndex=0;nIndex<30;nIndex++)
{
if(MmIsAddressValid(ZwCloseProcBase))
{
OpcodeLength=Ldex64((DWORD64)ZwCloseProcBase,64);
if (OpcodeLength==5)
{
if(ZwCloseProcBase[0]==0xe9)
{
IsFound=TRUE;
break;
}
}
ZwCloseProcBase+=OpcodeLength;
}
}
if (!IsFound)
{
LogDebug("get ZwCloseProcBase call failed\n");
return NULL;
}
ImmTemp=*(LONG*)(&ZwCloseProcBase[1]);
UsignedImmTemp=(DWORD_PTR)ImmTemp;
KiServiceInternal=(unsigned char *)((DWORD_PTR)ZwCloseProcBase+5+UsignedImmTemp);
LogDebug("KiServiceInternal:%p\n",KiServiceInternal);
/*
fffff800`03c8ffea 83e720 and edi,20h
fffff800`03c8ffed 25ff0f0000 and eax,0FFFh
nt!KiSystemServiceRepeat:
fffff800`03c8fff2 4c8d1547782300 lea r10,[nt!KeServiceDescriptorTable (fffff800`03ec7840)]
fffff800`03c8fff9 4c8d1d80782300 lea r11,[nt!KeServiceDescriptorTableShadow (fffff800`03ec7880)]
*/
IsFound=FALSE;
for (nIndex=0;nIndex<150;nIndex++)
{
if(MmIsAddressValid(KiServiceInternal))
{
OpcodeLength=Ldex64((DWORD64)KiServiceInternal,64);
if (OpcodeLength==5)
{
if (KiServiceInternal[0]==0x25&&
KiServiceInternal[1]==0xff&&
KiServiceInternal[2]==0x0f&&
KiServiceInternal[3]==0x00&&
KiServiceInternal[4]==0x00)
{
KiServiceInternal+=OpcodeLength;
OpcodeLength=Ldex64((DWORD64)KiServiceInternal,64);
if (OpcodeLength==7)
{
//4c 8d 15
if (KiServiceInternal[0]==0x4c&&
KiServiceInternal[1]==0x8d&&
KiServiceInternal[2]==0x15)
{
//get ssdt
if (SsdtType)
{
IsFound=TRUE;
break;
}
KiServiceInternal+=OpcodeLength;
OpcodeLength=Ldex64((DWORD64)KiServiceInternal,64);
if (OpcodeLength==7)
{
//4c 8d 1d
if (KiServiceInternal[0]==0x4c&&
KiServiceInternal[1]==0x8d&&
KiServiceInternal[2]==0x1d)
{
//__debugbreak();
IsFound=TRUE;
break;
}
}
}
}
}
}
KiServiceInternal+=OpcodeLength;
}
}
if(!IsFound)
{
return NULL;
}
ImmTemp=*(LONG*)(&KiServiceInternal[3]);
UsignedImmTemp=(DWORD_PTR)ImmTemp;
KeServiceDescriptorTableShadow=(DWORD_PTR)KiServiceInternal+7+UsignedImmTemp;
LogDebug("SSDTEx Table:%p\n",KeServiceDescriptorTableShadow);
return (PSERVICE_DESCRIPTOR_TABLE)KeServiceDescriptorTableShadow;
}
|
能力值:
( LV5,RANK:60 )
|
-
-
14 楼
好找法~,
 2级找法,
先找一个导出函数,再在里面找未导出函数,最后搜索特征码,继续找到我们的结构~
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
 就算不知道有木有关。也不能动SSDT吧。。。只能用微软建议的回调啊
|
能力值:
( LV5,RANK:60 )
|
-
-
16 楼
各种感谢 百度不给力 还是GG比较吊。
|
能力值:
( LV5,RANK:60 )
|
-
-
17 楼
吃泡面 看代码
我好好读读~ 嘿嘿
|
能力值:
( LV5,RANK:60 )
|
-
-
18 楼
难得啊 你也冒泡。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
因为不需要硬编……
|
能力值:
( LV4,RANK:50 )
|
-
-
20 楼
 64位下获取ssdt函数 通过zw同名函数可以直接得到指针存放位置.修改即可..不用非要找到ssdt基地址然后+偏移吧
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
mark
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
 好吧……这也是个办法
不过研究在64位下hook没意思
要研究的是在win8下如何修改内核不蓝屏
|
能力值:
( LV13,RANK:240 )
|
-
-
23 楼
LDE 这个结构函数 自己定义的还是在哪里,或者是某个开源库里头的?求指导 
|
能力值:
( LV13,RANK:240 )
|
-
-
24 楼
哇咔咔 找到了哟~~~
|
能力值:
( LV3,RANK:20 )
|
-
-
25 楼
求分享啊。
|
|
|