Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Hàm tương tự GetModuleHandle, GetProcAddress trong Kernel

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    61

    Mặc định Hàm tương tự GetModuleHandle, GetProcAddress trong Kernel

    Chào mọi người, cho mình hỏi trong kernel có hàm nào tương tự 2 hàm GetModuleHandle,GetProcAddress trong usermode không ? hôm bữa search thấy có mà quên không lưu lại tên giờ không biết kiếm ở đâu. Hiện tại thì mình phải dùng mấy hàm được hướng dẫn trong này http://alter.org.ua/docs/nt_kernel/procaddr

    Và mọi người có thể hướng dẫn mình cách lấy địa chỉ hàm ZwTerminateThread với được không? Cảm ơn rất nhiều

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Cách chuẩn mà nhiều người sử dụng là ZwQuerySystemInformation, cách sử dụng thì cũng như NtQuerySystemInformation

    Kevin có đoạn code này:

    Visual C++ Code:
    1. typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY {
    2.     ULONG  Unknown1;
    3.     ULONG  Unknown2;
    4. #ifdef _WIN64
    5.     ULONG Unknown3;
    6.     ULONG Unknown4;
    7. #endif
    8.     PVOID  Base;
    9.     ULONG  Size;
    10.     ULONG  Flags;
    11.     USHORT  Index;
    12.     USHORT  NameLength;
    13.     USHORT  LoadCount;
    14.     USHORT  PathLength;
    15.     CHAR  ImageName[256];
    16. } SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
    17.  
    18. typedef struct _SYSTEM_MODULE_INFORMATION {
    19.     ULONG Count;
    20.     SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
    21. } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
    22.  
    23. PVOID KernelGetModuleBase(PCHAR  pModuleName)
    24. {
    25.     PVOID pModuleBase = NULL;
    26.     PULONG pSystemInfoBuffer = NULL;
    27.  
    28.     __try
    29.     {
    30.         NTSTATUS status = STATUS_INSUFFICIENT_RESOURCES;
    31.         ULONG    SystemInfoBufferSize = 0;
    32.        
    33.         status = ZwQuerySystemInformation(SystemModuleInfo, &SystemInfoBufferSize, 0, &SystemInfoBufferSize);
    34.         if (!SystemInfoBufferSize) return NULL;
    35.  
    36.         pSystemInfoBuffer = (PULONG)ExAllocatePool(NonPagedPool, SystemInfoBufferSize*2);
    37.         if (!pSystemInfoBuffer) return NULL;
    38.  
    39.         memset(pSystemInfoBuffer, 0, SystemInfoBufferSize*2);
    40.  
    41.         status = ZwQuerySystemInformation(SystemModuleInfo, pSystemInfoBuffer, SystemInfoBufferSize*2, &SystemInfoBufferSize);
    42.  
    43.         if (NT_SUCCESS(status))
    44.         {
    45.             PSYSTEM_MODULE_ENTRY pSysModuleEntry = ((PSYSTEM_MODULE_INFORMATION)(pSystemInfoBuffer))->Module;
    46.             ULONG i;
    47.            
    48.             for (i = 0; i <((PSYSTEM_MODULE_INFORMATION)(pSystemInfoBuffer))->Count; i++)
    49.             {
    50.                 if (_stricmp(pSysModuleEntry[i].ModuleName + pSysModuleEntry[i].ModuleNameOffset, pModuleName) == 0)
    51.                 {
    52.                     pModuleBase = pSysModuleEntry[i].ModuleBaseAddress;
    53.                     break;
    54.                 }
    55.             }
    56.         }
    57.  
    58.     }
    59.     __except(EXCEPTION_EXECUTE_HANDLER)
    60.     {
    61.         pModuleBase = NULL;
    62.     }
    63.    
    64.     if(pSystemInfoBuffer) ExFreePool(pSystemInfoBuffer);
    65.    
    66.     return pModuleBase;
    67. } // end KernelGetModuleBase()
    68.  
    69. PVOID KernelGetProcAddress( PVOID ModuleBase, PCHAR pFunctionName )
    70. {
    71.     PVOID pFunctionAddress = NULL;
    72.    
    73.     __try
    74.     {
    75. #ifndef WIN9X_SUPPORT
    76.         ULONG size = 0;
    77.         PIMAGE_EXPORT_DIRECTORY exports =(PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(ModuleBase, TRUE, IMAGE_DIRECTORY_ENTRY_EXPORT, &size);
    78.         ULONG addr = (PUCHAR)((ULONG)exports-(ULONG)ModuleBase);
    79. #else
    80.         PIMAGE_DOS_HEADER dos =(PIMAGE_DOS_HEADER) ModuleBase;
    81.         PIMAGE_NT_HEADERS nt  =(PIMAGE_NT_HEADERS)((ULONG) ModuleBase + dos->e_lfanew);
    82.  
    83.         PIMAGE_DATA_DIRECTORY expdir = (PIMAGE_DATA_DIRECTORY)(nt->OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_EXPORT);
    84.         ULONG addr = expdir->VirtualAddress;
    85.         PIMAGE_EXPORT_DIRECTORY exports =(PIMAGE_EXPORT_DIRECTORY)((ULONG) ModuleBase + addr);
    86. #endif
    87.         PULONG functions = (PULONG)((ULONG) ModuleBase + exports->AddressOfFunctions);
    88.         PSHORT ordinals  = (PSHORT)((ULONG) ModuleBase + exports->AddressOfNameOrdinals);
    89.         PULONG names     = (PULONG)((ULONG) ModuleBase + exports->AddressOfNames);
    90.         ULONG  max_name  = exports->NumberOfNames;
    91.         ULONG  max_func  = exports->NumberOfFunctions;
    92.  
    93.         ULONG i;
    94.  
    95.         for (i = 0; i < max_name; i++)
    96.         {
    97.             ULONG ord = ordinals[i];
    98.             if(i >= max_name || ord >= max_func) return NULL;
    99.            
    100.             if (functions[ord] < addr || functions[ord] >= addr + size)
    101.             {
    102.                 if (strcmp((PCHAR) ModuleBase + names[i], pFunctionName)  == 0)
    103.                 {
    104.                     pFunctionAddress =(PVOID)((PCHAR) ModuleBase + functions[ord]);
    105.                     break;
    106.                 }
    107.             }
    108.         }
    109.     }
    110.     __except(EXCEPTION_EXECUTE_HANDLER)
    111.     {
    112.         pFunctionAddress = NULL;
    113.     }
    114.  
    115.     return pFunctionAddress;
    116. } // end KernelGetProcAddress()
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Máy đo đường huyết 3 trong 1 Kernel Multicheck
    Gửi bởi huongviettpol trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-09-2012, 10:58 AM
  2. Kernel máy thử tiểu đường 3 trong 1
    Gửi bởi huongviettpol trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 23-07-2012, 08:36 AM
  3. cd /dev/hdb Trong Linux Kernel
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình shell Linux
    Trả lời: 1
    Bài viết cuối: 24-11-2010, 11:37 AM
  4. Calling DLL by LoadLibrary/GetProcAddress Error in service?
    Gửi bởi trần trân trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 08-12-2009, 09:05 PM
  5. Hàm GetModuleHandle để làm gì vậy
    Gửi bởi honey trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 01-01-2009, 12:15 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn