ok100fen 发表于 2012-3-25 20:09:14

关于寻找函数地址的问题,憋了我很长时间了,请教

请教一个问题,
就是我想查找一个函数的地址
如果这个函数是导出函数,直接用一个函数就能得到
但是如果这个函数不是导出函数
那就用特征码
但是有个问题,怎么找到那个里面含有这个函数的函数呢?
这么问,你可能有点不明白
比如说我要得到KiAttachProcess这个函数的地址
我就要查找KeAttachProcess这个函数
根据特征码从里面找到KiAttachProcess这个函数地址

你们是怎么知道应该从KeAttachProcess这个函数里面找呢?

如果我给你一个新函数,比如DbgkpSetProcessDebugObject这个函数
也是未导出函数,应该从哪个函数里面找呢?


谢谢大家

xmlpull 发表于 2012-3-25 20:42:25


怎么知道 KeAttachProcess 里面有 KiAttachProcess 是因为。 在WINDBG 里面 使用了那么一句 命令:

uf KeAttachProcess .

然后慢慢看 。就发现了。 KiAttachProcess




另外。 这么声明 KeAttachProcess。 你就能使用了。NTKERNELAPI
VOID
KeAttachProcess (
    IN PEPROCESS Process
);对于这个 DbgkpSetProcessDebugObject。
找到一个人家写的。根据特征码查找。ULONG GetFunctionAddress
(
IN ULONG FirstFeature,
IN ULONG SecondFeature,
IN ULONG ThirdFeature,
IN ULONG FourthFeature
)
{
NTSTATUS NtStatus=STATUS_SEVERITY_SUCCESS;
ULONG SystemInformationLength=0;
ULONG Index=0;
ULONG Loop=0;
ULONG ModuleBegin=0;
ULONG ModuleFinish=0;
PULONG SystemInformationBuffer=NULL;
PSYSTEM_MODULE_INFORMATION SystemModulePointer=NULL;
ULONG Value=0;
ZwQuerySystemInformation(SystemModuleInformation,NULL,0,&SystemInformationLength);
SystemInformationBuffer=ExAllocatePool(PagedPool,SystemInformationLength);
if (SystemInformationBuffer==NULL)
{
        return NtStatus;
}
NtStatus=ZwQuerySystemInformation
                                                                (
                                                                SystemModuleInformation,
                                                                SystemInformationBuffer,
                                                                SystemInformationLength,
                                                                NULL
                                                                );
if (!NT_SUCCESS(NtStatus))
{
        ExFreePool(SystemInformationBuffer);
        return NtStatus;
}
if (MmIsAddressValid(SystemInformationBuffer)==False)
{
        ExFreePool(SystemInformationBuffer);
        return NtStatus;
}
SystemModulePointer=(PSYSTEM_MODULE_INFORMATION)(SystemInformationBuffer+1);
for (Index=0;Index<*(ULONG*)SystemInformationBuffer;Index++)
{
        ModuleBegin=(ULONG)SystemModulePointer.Base;
        ModuleFinish=(ULONG)SystemModulePointer.Base+SystemModulePointer.Size;       
        for (Loop=ModuleBeginAddress;Loop<ModuleFinishAddress;Loop++)
        {
                if
                        (
                        *(ULONG*)(Loop+0)==FirstFeature&&
                        *(ULONG*)(Loop+4)==SecondFeature&&
                        *(ULONG*)(Loop+8)==ThirdFeature&&
                        *(ULONG*)(Loop+12)==FourthFeature
                        )
                {
                        Value=Loop;
                }
        }
}
ExFreePool(SystemInformationBuffer);
return Value;
}

ok100fen 发表于 2012-3-26 00:55:25

先谢谢兄弟了

但是这个特征码FirstFeature等是啥呀?

不太明白

ok100fen 发表于 2012-3-26 00:57:04

还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

而不是查别的函数?

Tesla.Angela 发表于 2012-3-26 01:09:02

ok100fen 发表于 2012-3-26 00:57 static/image/common/back.gif
还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

而不是查别的函数? ...

除非是比较新的函数,一般的什么函数调用什么函数,查WRK就行了。

用NOTEPAD++载入所有的C文件,然后按下CTRL + F。。。

xmlpull 发表于 2012-3-26 02:20:18

ok100fen 发表于 2012-3-26 00:57 static/image/common/back.gif
还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

而不是查别的函数? ...


我敢说 除了 微软设计内核懂之外 没人懂 。KeAttachProcess 里面有 KiAttachProcess。

好比给你个盒子。 你没打开之前你肯定不懂里面有神马。

现在大家都懂 。是因为大家 打开盒子去看了。

自己 去 u KeAttachProcess 可以看到 。或者TA说的 。去下载WRK。

WRK。是 微软 据说为了大学生好 。放出来的内核源码。 包括NTOPENPROCESS .READ .WRITE 神马的。都现成的。

xmlpull 发表于 2012-3-26 02:21:45

ok100fen 发表于 2012-3-26 00:55 static/image/common/back.gif
先谢谢兄弟了

但是这个特征码FirstFeature等是啥呀?


自己看下这个:
以PspExitThread为例介绍如何寻找未导出函数的函数地址

ok100fen 发表于 2012-3-26 22:05:24

怎么才能 “用NOTEPAD++载入所有的C文件?”

没找到NOTEPAD++有这个功能啊?

Tesla.Angela 发表于 2012-3-27 15:40:39

ok100fen 发表于 2012-3-26 22:05 static/image/common/back.gif
怎么才能 “用NOTEPAD++载入所有的C文件?”

没找到NOTEPAD++有这个功能啊?


OK大哥你真萌。。。

先搜索WRK目录下所有的C文件,然后把所有C文件拖入NOTEPAD++不就行了。。。

ywledoc 发表于 2012-3-29 15:46:15

本帖最后由 ywledoc 于 2012-3-29 15:51 编辑

先让windbg加载符号~
然后。。。
bp KiAttachProcess(下断)
kd(看堆栈) or kvn。
看调用堆栈,加载到符号后,就会有KeAttachProcess + 0x*h类的字符出来~~~
我一般都这样做。也就是所谓的栈回溯得到函数地址~

至于 怎么加载符号 。我一般是
.reload
x 模块名!*
这样相应模块的符号就进去了。当然要先对symbol所在的目录进行设置~~

ok100fen 发表于 2012-3-30 22:27:53

这是个好办法,谢谢分享,我试一下

Tesla.Angela 发表于 2012-4-1 08:00:02

ywledoc 发表于 2012-3-29 15:46 static/image/common/back.gif
先让windbg加载符号~
然后。。。
bp KiAttachProcess(下断)


恩,这个方法也不错,对于NT6系统特别有效。

ok100fen 发表于 2012-4-4 22:31:15

但是有个问题
加载符号后,没断下来
lkd> bp KiAttachProcess
      ^ Operation not supported by current debuggee error in 'bp KiAttachProcess'

ok100fen 发表于 2012-4-4 22:32:12

单独u一下可以

lkd> u KiAttachProcess
nt!KiAttachProcess:
804f9a08 8bff            mov   edi,edi
804f9a0a 55            push    ebp
804f9a0b 8bec            mov   ebp,esp
804f9a0d 53            push    ebx
804f9a0e 56            push    esi
804f9a0f 8b7508          mov   esi,dword ptr
804f9a12 57            push    edi
804f9a13 ff7514          push    dword ptr

Tesla.Angela 发表于 2012-4-5 17:13:10

ok100fen 发表于 2012-4-4 22:32 static/image/common/back.gif
单独u一下可以

lkd> u KiAttachProcess


LKD模式不行,要双机调试才行。

顺便做个广告:双机调试严重占用CPU,推荐使用INTEL Core i7四核处理器!

add3to6 发表于 2012-4-5 23:04:09

羡慕楼上的I7四核,借来用用啊

ok100fen 发表于 2012-4-5 23:42:18

用上面的办法没成功
先让windbg加载符号~
然后。。。
bp KiAttachProcess(下断)

我用dps看了一下堆栈
没找到那个KeAttachProcess之类的

找了这些东西:

> dps esp l 500
8054abd08054209d nt!KeUpdateSystemTime+0x165
8054abd400000001
8054abd8ffdff002
8054abdc000000d1
8054abe0ffdff980
8054abe4806d99ba hal!HalProcessorIdle+0x2
8054abe8badb0d00
8054abec80010031
8054abf000000000
8054abf400000000
8054abf800000000
8054abfc00000000
8054ac0000000000
8054ac0400000000
8054ac0800000000
8054ac0c00000000
8054ac1000000000
8054ac1400000000
8054ac1800000000
8054ac1c80010031
8054ac20ffdffc50
8054ac24000002c5
8054ac2800553740
8054ac2cffffffff
8054ac3080542b8d nt!KiRetireDpcList+0x46
8054ac34805539a0 nt!KiIdleProcess
8054ac3880553740 nt!KiIdleThread0
8054ac3cffdff000
8054ac40ffdff980
8054ac4400000000
8054ac48806d99ba hal!HalProcessorIdle+0x2
8054ac4c00000008
8054ac5000000287
8054ac5480542af0 nt!KiIdleLoop+0x10
8054ac5800000000
8054ac5c0000000e
8054ac6000000000
8054ac6400000000
8054ac6800000000
8054ac6c00000000
8054ac7000000000
8054ac7400000000
8054ac7800000000
8054ac7c00000000
8054ac8000000000
8054ac8400000000
8054ac8800000000
8054ac8c00000000
8054ac9000000000
8054ac9400000000
8054ac9800000000
8054ac9c00000000
8054aca000000000
8054aca400000000
8054aca800000000
8054acac00000000
8054acb000000000
8054acb400000000
8054acb800000000
8054acbc00000000
8054acc000000000
8054acc400000000
8054acc800000000
8054accc00000000
8054acd000000000
8054acd4ffffffff
8054acd800000200
8054acdc80542dbc nt!KiThreadStartup
8054ace000000000
8054ace400000000
8054ace800000000
8054acec00000000
8054acf00000027f
8054acf400000000
8054acf800000000
8054acfc00000000
8054ad0000000000
8054ad0400000000
8054ad0800001f80
8054ad0c00000000
8054ad1000000000
8054ad1400000000
8054ad1800000000
8054ad1c00000000
8054ad2000000000
8054ad2400000000
8054ad2800000000
8054ad2c00000000
8054ad3000000000
8054ad3400000000
8054ad3800000000
8054ad3c00000000
8054ad4000000000
8054ad4400000000
8054ad4800000000
8054ad4c00000000
8054ad5000000000
8054ad5400000000
8054ad5800000000
8054ad5c00000000
8054ad6000000000
8054ad6400000000
8054ad6800000000
8054ad6c00000000
8054ad7000000000
8054ad7400000000
8054ad7800000000
8054ad7c00000000
8054ad8000000000
8054ad8400000000
8054ad8800000000
8054ad8c00000000
8054ad9000000000
8054ad9400000000
8054ad9800000000
8054ad9c00000000
8054ada000000000
8054ada400000000
8054ada800000000

ok100fen 发表于 2012-4-5 23:43:01

054adac00000000
8054adb000000000
8054adb400000000
8054adb800000000
8054adbc00000000
8054adc000000000
8054adc400000000
8054adc800000000
8054adcc00000000
8054add000000000
8054add400000000
8054add800000000
8054addc00000000
8054ade000000000
8054ade400000000
8054ade800000000
8054adec00000000
8054adf000000000
8054adf400000000
8054adf800000000
8054adfc00000000
8054ae0000000000
8054ae0400000000
8054ae0800000000
8054ae0c00000000
8054ae1000000000
8054ae1400000000
8054ae1800000000
8054ae1c00000000
8054ae2000000000
8054ae2400000000
8054ae2800000000
8054ae2c00000000
8054ae3000000000
8054ae3400000000
8054ae3800000000
8054ae3c00000000
8054ae4000000000
8054ae4400000000
8054ae4800000000
8054ae4c00000000
8054ae5000000000
8054ae5400000000
8054ae5800000000
8054ae5c00000000
8054ae6000000000
8054ae6400000000
8054ae6800000000
8054ae6c00000000
8054ae7000000000
8054ae7400000000
8054ae7800000000
8054ae7c00000000
8054ae8000000000
8054ae8400000000
8054ae8800000000
8054ae8c00000000
8054ae9000000000
8054ae9400000000
8054ae9800000000
8054ae9c00000000
8054aea000000000
8054aea400000000
8054aea800000000
8054aeac00000000
8054aeb000000000
8054aeb400000000
8054aeb800000000
8054aebc00000000
8054aec000000000
8054aec400000000
8054aec800000000
8054aecc00000000
8054aed000000000
8054aed400000000
8054aed800000000
8054aedc00000000
8054aee000000000
8054aee400000000
8054aee800000000
8054aeec00000000
8054aef000000000
8054aef400000000
8054aef800000000
8054aefc00000000
8054af0000000000
8054af0480547f00 nt!KiDoubleFaultStack
8054af0800000010
8054af0c00000000
8054af1000000000
8054af1400000000
8054af1800000000
8054af1c00af8000
8054af20805404ce nt!KiTrap08
8054af2400000000
8054af2800000000
8054af2c00000000
8054af3000000000
8054af3400000000
8054af3880547f00 nt!KiDoubleFaultStack
8054af3c00000000
8054af4000000000
8054af4400000000
8054af4800000023
8054af4c00000008
8054af5000000010
8054af5400000023
8054af5800000030
8054af5c00000000
8054af6000000000
8054af6420ac0000
8054af6800000000
8054af6c80547f00 nt!KiDoubleFaultStack
8054af7000000010
8054af7400000000
8054af7800000000
8054af7c00000000
8054af8000000000
8054af8400af8000
8054af888053f3fc nt!KiTrap02
8054af8c00000000
8054af9000000000
8054af9400000000
8054af9800000000
8054af9c00000000
8054afa080547f00 nt!KiDoubleFaultStack
8054afa400000000
8054afa800000000
8054afac00000000
8054afb000000023
8054afb400000008
8054afb800000010
8054afbc00000023
8054afc000000030
8054afc400000000
8054afc800000000
8054afcc20ac0000
8054afd000000000
8054afd400000000
8054afd800000000
8054afdc00000000
8054afe00000000a
8054afe4f067f3f2
8054afe8263e2e66
8054afece4366564
8054aff06cedece5
8054aff4eee7e66d
8054aff8006f6eef
8054affc00000001
8054b00000000001
8054b00400010000
8054b00800000040
8054b00c00000001
8054b01080553e00 nt!KiNode0
8054b01400009897
8054b0180000001f
8054b01c2a2a2a0a
8054b02052534920
8054b02420746120
8054b02820786c25
8054b02c65707061
8054b03020737261
8054b03468206f74
8054b03820657661
8054b03c69206e61
8054b0407265746e
8054b04474707572
8054b0486f747320
8054b04c000a6d72
8054b05000007530
8054b05400000000
8054b05800000000
8054b05c80503150 nt!KiXMMIZeroPage
8054b06080503128 nt!KiXMMIZeroPageNoSave
8054b06400000040
8054b068003e0dd7

ok100fen 发表于 2012-4-5 23:43:32

不知道是不是我把方法弄错了

大家帮助我啊

WG102514 发表于 2012-4-19 16:40:59

顶顶

kk1025 发表于 2013-4-9 22:18:49

支持

jzy1115 发表于 2013-7-2 11:59:23

Tesla.Angela 发表于 2012-4-5 17:13 static/image/common/back.gif
LKD模式不行,要双机调试才行。

顺便做个广告:双机调试严重占用CPU,推荐使用INTEL Core i7四核处理器 ...

你给钱买,我就用
页: [1]
查看完整版本: 关于寻找函数地址的问题,憋了我很长时间了,请教