找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 16804|回复: 21

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

 火... [复制链接]

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2012-3-25 20:09:14 | 显示全部楼层 |阅读模式
请教一个问题,
就是我想查找一个函数的地址
如果这个函数是导出函数,直接用一个函数就能得到
但是如果这个函数不是导出函数
那就用特征码
但是有个问题,怎么找到那个里面含有这个函数的函数呢?
这么问,你可能有点不明白
比如说我要得到KiAttachProcess这个函数的地址
我就要查找KeAttachProcess这个函数
根据特征码从里面找到KiAttachProcess这个函数地址

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

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


谢谢大家

9

主题

117

回帖

0

精华

银牌会员

积分
422
发表于 2012-3-25 20:42:25 | 显示全部楼层

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

uf KeAttachProcess .

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

QQ截图20120325203747.png



另外。 这么声明 KeAttachProcess。 你就能使用了。
  1. NTKERNELAPI
  2. VOID
  3. KeAttachProcess (
  4.     IN PEPROCESS Process
  5. );
复制代码
对于这个 DbgkpSetProcessDebugObject。
找到一个人家写的。根据特征码查找。
  1. ULONG GetFunctionAddress
  2. (
  3. IN ULONG FirstFeature,
  4. IN ULONG SecondFeature,
  5. IN ULONG ThirdFeature,
  6. IN ULONG FourthFeature
  7. )
  8. {
  9. NTSTATUS NtStatus=STATUS_SEVERITY_SUCCESS;
  10. ULONG SystemInformationLength=0;
  11. ULONG Index=0;
  12. ULONG Loop=0;
  13. ULONG ModuleBegin=0;
  14. ULONG ModuleFinish=0;
  15. PULONG SystemInformationBuffer=NULL;
  16. PSYSTEM_MODULE_INFORMATION SystemModulePointer=NULL;
  17. ULONG Value=0;
  18. ZwQuerySystemInformation(SystemModuleInformation,NULL,0,&SystemInformationLength);
  19. SystemInformationBuffer=ExAllocatePool(PagedPool,SystemInformationLength);
  20. if (SystemInformationBuffer==NULL)
  21. {
  22.         return NtStatus;
  23. }
  24. NtStatus=ZwQuerySystemInformation
  25.                                                                 (
  26.                                                                 SystemModuleInformation,
  27.                                                                 SystemInformationBuffer,
  28.                                                                 SystemInformationLength,
  29.                                                                 NULL
  30.                                                                 );
  31. if (!NT_SUCCESS(NtStatus))
  32. {
  33.         ExFreePool(SystemInformationBuffer);
  34.         return NtStatus;
  35. }
  36. if (MmIsAddressValid(SystemInformationBuffer)==False)
  37. {
  38.         ExFreePool(SystemInformationBuffer);
  39.         return NtStatus;
  40. }
  41. SystemModulePointer=(PSYSTEM_MODULE_INFORMATION)(SystemInformationBuffer+1);
  42. for (Index=0;Index<*(ULONG*)SystemInformationBuffer;Index++)
  43. {
  44.         ModuleBegin=(ULONG)SystemModulePointer[Index].Base;
  45.         ModuleFinish=(ULONG)SystemModulePointer[Index].Base+SystemModulePointer[Index].Size;       
  46.         for (Loop=ModuleBeginAddress;Loop<ModuleFinishAddress;Loop++)
  47.         {
  48.                 if
  49.                         (
  50.                         *(ULONG*)(Loop+0)==FirstFeature&&
  51.                         *(ULONG*)(Loop+4)==SecondFeature&&
  52.                         *(ULONG*)(Loop+8)==ThirdFeature&&
  53.                         *(ULONG*)(Loop+12)==FourthFeature
  54.                         )
  55.                 {
  56.                         Value=Loop;
  57.                 }
  58.         }
  59. }
  60. ExFreePool(SystemInformationBuffer);
  61. return Value;
  62. }
复制代码

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-3-26 00:55:25 | 显示全部楼层
先谢谢兄弟了

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

不太明白

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-3-26 00:57:04 | 显示全部楼层
还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

而不是查别的函数?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-3-26 01:09:02 | 显示全部楼层
ok100fen 发表于 2012-3-26 00:57
还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

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

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

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

9

主题

117

回帖

0

精华

银牌会员

积分
422
发表于 2012-3-26 02:20:18 | 显示全部楼层
ok100fen 发表于 2012-3-26 00:57
还有,你怎么知道要知道KiAttachProcess的地址,必须查KeAttachProcess?

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


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

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

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

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

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

  

9

主题

117

回帖

0

精华

银牌会员

积分
422
发表于 2012-3-26 02:21:45 | 显示全部楼层
ok100fen 发表于 2012-3-26 00:55
先谢谢兄弟了

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

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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-3-26 22:05:24 | 显示全部楼层
怎么才能 “用NOTEPAD++载入所有的C文件?”

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

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-3-27 15:40:39 | 显示全部楼层
ok100fen 发表于 2012-3-26 22:05
怎么才能 “用NOTEPAD++载入所有的C文件?”

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

OK大哥你真萌。。。

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

点评

呵呵,这方法有道理,我试一下啊  发表于 2012-3-28 21:56

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2012-3-29 15:46:15 | 显示全部楼层
本帖最后由 ywledoc 于 2012-3-29 15:51 编辑

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

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

点评

这是个好办法,谢谢分享,我试一下  发表于 2012-3-30 22:27

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-3-30 22:27:53 | 显示全部楼层
这是个好办法,谢谢分享,我试一下

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-4-1 08:00:02 | 显示全部楼层
ywledoc 发表于 2012-3-29 15:46
先让windbg加载符号~
然后。。。
bp KiAttachProcess(下断)

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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-4-4 22:31:15 | 显示全部楼层
但是有个问题
加载符号后,没断下来
lkd> bp KiAttachProcess
      ^ Operation not supported by current debuggee error in 'bp KiAttachProcess'

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 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 [ebp+8]
804f9a12 57              push    edi
804f9a13 ff7514          push    dword ptr [ebp+14h]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-4-5 17:13:10 | 显示全部楼层
ok100fen 发表于 2012-4-4 22:32
单独u一下可以

lkd> u KiAttachProcess


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

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

2

主题

20

回帖

0

精华

铜牌会员

积分
133
发表于 2012-4-5 23:04:09 | 显示全部楼层
羡慕楼上的I7四核,借来用用啊

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-4-5 23:42:18 | 显示全部楼层
用上面的办法没成功
先让windbg加载符号~
然后。。。
bp KiAttachProcess(下断)


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

找了这些东西:

> dps esp l 500
8054abd0  8054209d nt!KeUpdateSystemTime+0x165
8054abd4  00000001
8054abd8  ffdff002
8054abdc  000000d1
8054abe0  ffdff980
8054abe4  806d99ba hal!HalProcessorIdle+0x2
8054abe8  badb0d00
8054abec  80010031
8054abf0  00000000
8054abf4  00000000
8054abf8  00000000
8054abfc  00000000
8054ac00  00000000
8054ac04  00000000
8054ac08  00000000
8054ac0c  00000000
8054ac10  00000000
8054ac14  00000000
8054ac18  00000000
8054ac1c  80010031
8054ac20  ffdffc50
8054ac24  000002c5
8054ac28  00553740
8054ac2c  ffffffff
8054ac30  80542b8d nt!KiRetireDpcList+0x46
8054ac34  805539a0 nt!KiIdleProcess
8054ac38  80553740 nt!KiIdleThread0
8054ac3c  ffdff000
8054ac40  ffdff980
8054ac44  00000000
8054ac48  806d99ba hal!HalProcessorIdle+0x2
8054ac4c  00000008
8054ac50  00000287
8054ac54  80542af0 nt!KiIdleLoop+0x10
8054ac58  00000000
8054ac5c  0000000e
8054ac60  00000000
8054ac64  00000000
8054ac68  00000000
8054ac6c  00000000
8054ac70  00000000
8054ac74  00000000
8054ac78  00000000
8054ac7c  00000000
8054ac80  00000000
8054ac84  00000000
8054ac88  00000000
8054ac8c  00000000
8054ac90  00000000
8054ac94  00000000
8054ac98  00000000
8054ac9c  00000000
8054aca0  00000000
8054aca4  00000000
8054aca8  00000000
8054acac  00000000
8054acb0  00000000
8054acb4  00000000
8054acb8  00000000
8054acbc  00000000
8054acc0  00000000
8054acc4  00000000
8054acc8  00000000
8054accc  00000000
8054acd0  00000000
8054acd4  ffffffff
8054acd8  00000200
8054acdc  80542dbc nt!KiThreadStartup
8054ace0  00000000
8054ace4  00000000
8054ace8  00000000
8054acec  00000000
8054acf0  0000027f
8054acf4  00000000
8054acf8  00000000
8054acfc  00000000
8054ad00  00000000
8054ad04  00000000
8054ad08  00001f80
8054ad0c  00000000
8054ad10  00000000
8054ad14  00000000
8054ad18  00000000
8054ad1c  00000000
8054ad20  00000000
8054ad24  00000000
8054ad28  00000000
8054ad2c  00000000
8054ad30  00000000
8054ad34  00000000
8054ad38  00000000
8054ad3c  00000000
8054ad40  00000000
8054ad44  00000000
8054ad48  00000000
8054ad4c  00000000
8054ad50  00000000
8054ad54  00000000
8054ad58  00000000
8054ad5c  00000000
8054ad60  00000000
8054ad64  00000000
8054ad68  00000000
8054ad6c  00000000
8054ad70  00000000
8054ad74  00000000
8054ad78  00000000
8054ad7c  00000000
8054ad80  00000000
8054ad84  00000000
8054ad88  00000000
8054ad8c  00000000
8054ad90  00000000
8054ad94  00000000
8054ad98  00000000
8054ad9c  00000000
8054ada0  00000000
8054ada4  00000000
8054ada8  00000000

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-4-5 23:43:01 | 显示全部楼层
054adac  00000000
8054adb0  00000000
8054adb4  00000000
8054adb8  00000000
8054adbc  00000000
8054adc0  00000000
8054adc4  00000000
8054adc8  00000000
8054adcc  00000000
8054add0  00000000
8054add4  00000000
8054add8  00000000
8054addc  00000000
8054ade0  00000000
8054ade4  00000000
8054ade8  00000000
8054adec  00000000
8054adf0  00000000
8054adf4  00000000
8054adf8  00000000
8054adfc  00000000
8054ae00  00000000
8054ae04  00000000
8054ae08  00000000
8054ae0c  00000000
8054ae10  00000000
8054ae14  00000000
8054ae18  00000000
8054ae1c  00000000
8054ae20  00000000
8054ae24  00000000
8054ae28  00000000
8054ae2c  00000000
8054ae30  00000000
8054ae34  00000000
8054ae38  00000000
8054ae3c  00000000
8054ae40  00000000
8054ae44  00000000
8054ae48  00000000
8054ae4c  00000000
8054ae50  00000000
8054ae54  00000000
8054ae58  00000000
8054ae5c  00000000
8054ae60  00000000
8054ae64  00000000
8054ae68  00000000
8054ae6c  00000000
8054ae70  00000000
8054ae74  00000000
8054ae78  00000000
8054ae7c  00000000
8054ae80  00000000
8054ae84  00000000
8054ae88  00000000
8054ae8c  00000000
8054ae90  00000000
8054ae94  00000000
8054ae98  00000000
8054ae9c  00000000
8054aea0  00000000
8054aea4  00000000
8054aea8  00000000
8054aeac  00000000
8054aeb0  00000000
8054aeb4  00000000
8054aeb8  00000000
8054aebc  00000000
8054aec0  00000000
8054aec4  00000000
8054aec8  00000000
8054aecc  00000000
8054aed0  00000000
8054aed4  00000000
8054aed8  00000000
8054aedc  00000000
8054aee0  00000000
8054aee4  00000000
8054aee8  00000000
8054aeec  00000000
8054aef0  00000000
8054aef4  00000000
8054aef8  00000000
8054aefc  00000000
8054af00  00000000
8054af04  80547f00 nt!KiDoubleFaultStack
8054af08  00000010
8054af0c  00000000
8054af10  00000000
8054af14  00000000
8054af18  00000000
8054af1c  00af8000
8054af20  805404ce nt!KiTrap08
8054af24  00000000
8054af28  00000000
8054af2c  00000000
8054af30  00000000
8054af34  00000000
8054af38  80547f00 nt!KiDoubleFaultStack
8054af3c  00000000
8054af40  00000000
8054af44  00000000
8054af48  00000023
8054af4c  00000008
8054af50  00000010
8054af54  00000023
8054af58  00000030
8054af5c  00000000
8054af60  00000000
8054af64  20ac0000
8054af68  00000000
8054af6c  80547f00 nt!KiDoubleFaultStack
8054af70  00000010
8054af74  00000000
8054af78  00000000
8054af7c  00000000
8054af80  00000000
8054af84  00af8000
8054af88  8053f3fc nt!KiTrap02
8054af8c  00000000
8054af90  00000000
8054af94  00000000
8054af98  00000000
8054af9c  00000000
8054afa0  80547f00 nt!KiDoubleFaultStack
8054afa4  00000000
8054afa8  00000000
8054afac  00000000
8054afb0  00000023
8054afb4  00000008
8054afb8  00000010
8054afbc  00000023
8054afc0  00000030
8054afc4  00000000
8054afc8  00000000
8054afcc  20ac0000
8054afd0  00000000
8054afd4  00000000
8054afd8  00000000
8054afdc  00000000
8054afe0  0000000a
8054afe4  f067f3f2
8054afe8  263e2e66
8054afec  e4366564
8054aff0  6cedece5
8054aff4  eee7e66d
8054aff8  006f6eef
8054affc  00000001
8054b000  00000001
8054b004  00010000
8054b008  00000040
8054b00c  00000001
8054b010  80553e00 nt!KiNode0
8054b014  00009897
8054b018  0000001f
8054b01c  2a2a2a0a
8054b020  52534920
8054b024  20746120
8054b028  20786c25
8054b02c  65707061
8054b030  20737261
8054b034  68206f74
8054b038  20657661
8054b03c  69206e61
8054b040  7265746e
8054b044  74707572
8054b048  6f747320
8054b04c  000a6d72
8054b050  00007530
8054b054  00000000
8054b058  00000000
8054b05c  80503150 nt!KiXMMIZeroPage
8054b060  80503128 nt!KiXMMIZeroPageNoSave
8054b064  00000040
8054b068  003e0dd7

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2012-4-5 23:43:32 | 显示全部楼层
不知道是不是我把方法弄错了

大家帮助我啊

0

主题

19

回帖

0

精华

初来乍到

积分
8
发表于 2012-4-19 16:40:59 | 显示全部楼层
顶顶

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-9 22:18:49 | 显示全部楼层
支持

0

主题

117

回帖

0

精华

铜牌会员

积分
258
发表于 2013-7-2 11:59:23 | 显示全部楼层
Tesla.Angela 发表于 2012-4-5 17:13
LKD模式不行,要双机调试才行。

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

你给钱买,我就用
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表