码迷,mamicode.com
首页 > 其他好文 > 详细

ring0-遍历IAT(特例NTOS)

时间:2015-09-26 08:08:23      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

http://blog.csdn.net/hgy413/article/details/7786530

 

原NTOS的IAT只能通过IMAGE_DIRECTORY_ENTRY_IAT(12)来获得,因为NTOS加载完后,INIT方式加载,所以IMAGE_DIRECTORY_ENTRY_IMPORT对应的区域被释放了!
坑爹啊,
可以用windbg很直观的看到:
X86:

技术分享
 
x64:
技术分享
其他的IAT遍历代码如下:
[cpp] view plaincopy
 
  1. NTSTATUS EnumIATTable(ULONG_PTR pBase)  
  2. {  
  3.     PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)pBase;  
  4.     PIMAGE_NT_HEADERS pNt = NULL;  
  5.     PIMAGE_IMPORT_DESCRIPTOR pImport = NULL;  
  6.     PIMAGE_THUNK_DATA pThunk = NULL;  
  7.    
  8.     if (NULL == pDos  
  9.         || IMAGE_DOS_SIGNATURE != pDos->e_magic)  
  10.     {  
  11.         return STATUS_INVALID_IMAGE_FORMAT;  
  12.     }  
  13.    
  14.     pNt = (PIMAGE_NT_HEADERS)((PUCHAR)pBase+pDos->e_lfanew);  
  15.     if (IMAGE_NT_SIGNATURE != pNt->Signature)  
  16.     {  
  17.         return STATUS_INVALID_IMAGE_FORMAT;  
  18.     }  
  19.    
  20.     pImport = (PIMAGE_IMPORT_DESCRIPTOR)((PUCHAR)pBase+pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);  
  21.    
  22.     // 枚举打印  
  23.     while (NULL !=pImport  
  24.         && MmIsAddressValid(pImport)  
  25.         &&pImport->Name != 0)  
  26.     {  
  27.         pThunk = (PIMAGE_THUNK_DATA)((PUCHAR)pBase+pImport->FirstThunk);  
  28.         while (NULL != pThunk  
  29.             && MmIsAddressValid(pThunk)  
  30.             && pThunk->u1.Function != 0)  
  31.         {  
  32.             KdPrint(("[EnumIATTable]-Import Module:%s-function:%p\r\n", (PUCHAR)pBase+pImport->Name, pThunk->u1.Function));  
  33.             pThunk++;  
  34.         }  
  35.    
  36.         pImport++;  
  37.     }  
  38.    
  39.     return STATUS_SUCCESS;  
  40. }  

ring0-遍历IAT(特例NTOS)

标签:

原文地址:http://www.cnblogs.com/gamekk/p/4839939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!