首页
社区
课程
招聘
[旧帖] XP下如何Hook PspCreateThread 0.00雪花
发表于: 2014-1-23 17:23 5583

[旧帖] XP下如何Hook PspCreateThread 0.00雪花

2014-1-23 17:23
5583
[QUOTE][/QUOTE]我先SSDT Hook得到NtCreateThread,NtCreateThreadAddr = KeServiceDescriptorTable.ServiceTableBase[0x35];
然后通过
        UCHAR code1[29] = "\x52\x52\xff\x75\x24\x8d\x45\xc8\x50\xff\x75\x1c\xff\x75\x18\x52\xff\x75\x14\xff\x75\x10\xff\x75\x0c\xff\x75\x08\xe8";

for (i = 0; i < 0x1000; i ++)
        {
                if (memcmp((PVOID)(NtCreateThreadAddr + i),code1,29) == 0)
                {
                        PspCreateThreadAddr = NtCreateThreadAddr + i + 29;
                        PspCreateThreadAddr = PspCreateThreadAddr + 4 + *(PULONG)PspCreateThreadAddr ;
                        KdPrint(("PspCreateThreadAddr = 0x%.8X\r\n",PspCreateThreadAddr ));//这句话没有打印出来
                        break;
                }
        }

结果无法得到。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
试试这个
PVOID GetPspCreateThread()
{
        //xp下有效
        if(OsVersionInfo->dwMajorVersion==5 && OsVersionInfo->dwMinorVersion==1)
        {
                PUCHAR PspCreateThread = NULL;
                PUCHAR SearchBase = (PUCHAR)PsCreateSystemThread;
                ULONG i = 0;
                while(i<0x100 && *(PULONG)SearchBase!=0xCCCCCCCC && *(PSHORT)SearchBase!=0x90909090)
                {
                        if(*SearchBase!=0xE8)
                        {
                                i++;
                                continue;
                        }
                        ULONG CallOffset = *(PULONG)(SearchBase + 1);
                        PspCreateThread = (SearchBase + CallOffset + 5);
                        break;
                }
                return (PVOID)PspCreateThread;
        }
        else
        {
                return NULL;
        }
}
2014-1-23 17:46
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
while(i<0x100 && *(PULONG)SearchBase!=0xCCCCCCCC && *(PSHORT)SearchBase!=0x90909090)
    {
      if(*SearchBase!=0xE8)
      {
        i++;
        continue;
      }

上来就蓝屏啊兄弟,这个E8是什么意思
2014-1-24 08:38
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
应该不会吧。你可以自己IDA去看下PsCreateSystemThread的实现就知道了,第一个call就是PspCreateThread
2014-1-24 09:31
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
E8是PspCreateThread 相对于PsCreateSystemThread的偏移量吗
2014-1-24 09:53
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ULONG GetPspCreateThread()
{
        ULONG PspCreateThread = 0;
        PUCHAR SearchBase = (PUCHAR)PsCreateSystemThread;
        ULONG i = 0;
        ULONG CallOffset;

        if (SearchBase == NULL)
        {
                KdPrint(("[GetPspCreateThread]NULL\n"));
                return 0;
        }

        while(i < 0x100 && *(PULONG)SearchBase != 0xCCCCCCCC && *(PULONG)SearchBase != 0x90909090)
        {
                if(*SearchBase != 0xE8)
                {
                        i ++;
                        SearchBase ++;
                        continue;
                }
                CallOffset = *(PULONG)(SearchBase + 1);
                PspCreateThread = (ULONG)(SearchBase + CallOffset + 5);
                break;
        }
        return PspCreateThread;
}
改成这样就可用了。谢谢你的回复。
我还有一个问题,你知道怎么从PspCreateThread找到PspUserThreadStartup吗?
2014-1-24 10:08
0
雪    币: 40
活跃值: (274)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你们好像很牛的样子啊,我现在缺Kx,你们要Kx也没多大用啊。给我吧,楼主
2014-1-24 11:27
0
游客
登录 | 注册 方可回帖
返回
//