首页
社区
课程
招聘
[求助]关于如何查找系统函数地址!
发表于: 2008-10-6 02:05 6674

[求助]关于如何查找系统函数地址!

2008-10-6 02:05
6674
以下,是我看雪看到的一段代码:

PVOID GetUndocumentFunctionAdress()
{
        ULONG size,index;
        PULONG buf;
        ULONG i;
        PSYSTEM_MODULE_INFORMATION module;
        PVOID driverAddress=0;
        ULONG ntosknlBase;
        ULONG ntosknlEndAddr;
        ULONG curAddr;
        NTSTATUS status;
        PVOID retAddr;
        ULONG code1_sp2=0x8b55ff8b,code2_sp2=0x0cec83ec,code3_sp2=0xfff84d83,code4_sp2=0x7d8b5756;
       
        ZwQuerySystemInformation(SystemModuleInformation,&size, 0, &size);
        if(NULL==(buf = (PULONG)ExAllocatePool(PagedPool, size)))
        {
                return 0;
        }
        status=ZwQuerySystemInformation(SystemModuleInformation,buf, size , 0);
        if(!NT_SUCCESS( status ))
        {
                return 0;
        }
        module = (PSYSTEM_MODULE_INFORMATION)(( PULONG )buf + 1);
        ntosknlEndAddr=(ULONG)module->Base+(ULONG)module->Size;
        ntosknlBase=(ULONG)module->Base;
        curAddr=ntosknlBase;
        ExFreePool(buf);
        for (i=curAddr;i<=ntosknlEndAddr;i++)
        {
                if ((*((ULONG *)i)==code1_sp2)&&(*((ULONG *)(i+4))==code2_sp2)&&(*((ULONG *)(i+8))==code3_sp2)&&(*((ULONG*)(i+12))==code4_sp2))
                {
                        retAddr=(PVOID*)i;
                        return retAddr;
                }
        }
        return 0;
}

这段代码目的是找出某函数的地址,但有一处我不知道是怎么得到的,就是:

ULONG code1_sp2=0x8b55ff8b,code2_sp2=0x0cec83ec,code3_sp2=0xfff84d83,code4_sp2=0x7d8b5756;

以这些硬编码为依据来查找地址,在win2k下是不行的(题外话就不说了);

我就想知道,或想学会,这些依据是如何得到的? 或许是使用了Windbg, 或许是使用了SoftICE,......

最终问题如下:

    如何使用工具(windbg或softice)又或者是什么方法来得到诸如此类的"依据"呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
2
汗...不要用ULONG code1_sp2=0x8b55ff8b,code2_sp2=0x0cec83ec,code3_sp2=0xfff84d83,code4_sp2=0x7d8b5756;这样的方法了//////不通用//...效率低..而且这样可能会蓝......
一般在导出里找未导出的比较好..或者直接用个PDB.....
2008-10-6 10:45
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的朋友,我也知道这个方法是不行的,这样做的后果就是可以会使系统崩溃; 我也看到过了更好的方法;

我想问的其实就是: 这些"依据"是如何得来的? 就像我在主贴里问的那样, 他是如何使用工具(windbg或softice)又或者是什么方法来得到诸如此类的"依据"呢?
2008-10-6 13:18
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯, 原来是:

lkd> dd PspTerminateThreadByPointer
8057736d  8b55ff8b 0cec83ec fff84d83 7d8b5756
8057737d  .........................

说来说去, 我其实就是想问如何用windbg啊
2008-10-6 13:37
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
恩 我也想知道怎样使用windbg查看系统函数
2009-5-10 14:02
0
游客
登录 | 注册 方可回帖
返回
//