设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
查看: 6563|回复: 0

[特种技术] PEB KernelCallbackTable

[复制链接]
发表于 2012-3-5 12:58:07 | 显示全部楼层 |阅读模式
PEB 0x2C 中的 KernelCallbackTable 非常有意思,WIN是基于消息驱动的从某种迹象上来看确实是这样如CRSS的LPC通信,IRP I/O 与 设备的通信。

kernel32!OpenProcess -> ntdll!ZwOpenProcess -> ntdll!KiFastSystemCall -> sysenter -> nt!KiFastCallEntry -> nt!NtOpenProcess -> nt!KiFastCallEntry(返回后)-> nt!KiServiceExit -> sysexit -> ntdll!KiFastSystemCallRet -> kernel32!OpenProcess

这是一个普通的系统调用过程 ring3->ring0->ring3

而有些时候情况并不是这样,系统有时需要一个回调,程序使用Int 2B KiCallbackReturn 把一条消息抛给系统(如WM_CHAR、WM_PAINT),系统并不会在内核中直接处理而是给了用户hook的机会,KiCallbackReturn -> nt!KeUserModeCallback -> nt!KiCallUserMode -> nt!KiServiceExit -> ntdll!KiUserCallbackDispatcher -> 回调函数 -> int2B  循环

可以看到KiServiceExit后回到Ntdll Ring3层 调用 KiUserCallbackDispatcher 此函数是可以断下来的分析之。
  1. 77546FC0 >  64:8B0D 0000000>MOV ECX,DWORD PTR FS:[0]
  2. 77546FC7    BA A06F5477     MOV EDX,ntdll.KiUserCallbackExceptionHandler
  3. 77546FCC    8D4424 10       LEA EAX,DWORD PTR SS:[ESP+10]
  4. 77546FD0    894C24 10       MOV DWORD PTR SS:[ESP+10],ECX
  5. 77546FD4    895424 14       MOV DWORD PTR SS:[ESP+14],EDX                      ; ntdll.KiUserCallbackDispatcher
  6. 77546FD8    64:A3 00000000  MOV DWORD PTR FS:[0],EAX
  7. 77546FDE    83C4 04         ADD ESP,4
  8. 77546FE1    5A              POP EDX                                            ; ntdll.KiUserCallbackDispatcher
  9. 77546FE2    64:A1 30000000  MOV EAX,DWORD PTR FS:[30]
  10. 77546FE8    8B40 2C         MOV EAX,DWORD PTR DS:[EAX+2C]
  11. 77546FEB    FF1490          CALL DWORD PTR DS:[EAX+EDX*4]
  12. 77546FEE    50              PUSH EAX
  13. 77546FEF    6A 00           PUSH 0
  14. 77546FF1    6A 00           PUSH 0
  15. 77546FF3    E8 70E4FFFF     CALL ntdll.ZwCallbackReturn
  16. 77546FF8    8BF0            MOV ESI,EAX
  17. 77546FFA    56              PUSH ESI
  18. 77546FFB    E8 05010000     CALL ntdll.RtlRaiseStatus
  19. 77547000  ^ EB F8           JMP SHORT ntdll.77546FFA

复制代码
  1. 77546FE2    64:A1 30000000  MOV EAX,DWORD PTR FS:[30]
  2. 77546FE8    8B40 2C         MOV EAX,DWORD PTR DS:[EAX+2C]

复制代码
很果断的取  KernelCallbackTable 的地址
KernelCallbackTable 存在User32中 贴一段
  1. 76F6D568 >76F564EB  user32.__fnCOPYDATA
  2. 76F6D56C  76F9F0BC  user32.__fnCOPYGLOBALDATA
  3. 76F6D570  76F64F59  user32.__fnDWORD
  4. 76F6D574  76F5B2A1  user32.__fnNCDESTROY
  5. 76F6D578  76F801A6  user32.__fnDWORDOPTINLPMSG
  6. 76F6D57C  76F9F196  user32.__fnINOUTDRAG
  7. 76F6D580  76F86BFD  user32.__fnGETTEXTLENGTHS
  8. 76F6D584  76F9F3EA  user32.__fnINCNTOUTSTRING
  9. 76F6D588  76F5AC7A  user32.__fnPOUTLPINT
  10. 76F6D58C  76F9F2F5  user32.__fnINLPCOMPAREITEMSTRUCT
  11. 76F6D590  76F5E921  user32.__fnINLPCREATESTRUCT
  12. 76F6D594  76F6F057  user32.__fnINLPDELETEITEMSTRUCT
  13. 76F6D598  76F8629A  user32.__fnINLPDRAWITEMSTRUCT
  14. 76F6D59C  76F9F333  user32.__fnINLPHLPSTRUCT
  15. 76F6D5A0  76F9F333  user32.__fnINLPHLPSTRUCT
  16. 76F6D5A4  76F9F1D6  user32.__fnINLPMDICREATESTRUCT
  17. .........
  18. .........
复制代码
您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 07:16

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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