首页
社区
课程
招聘
关于ssdt 对抗inline hook
发表于: 2010-3-20 18:35 5001

关于ssdt 对抗inline hook

2010-3-20 18:35
5001
拜读堕落天才大神的文章之后 因为他是对抗NtOpenProcess的 所以我想改下 改成NtReadVirtualMemory。
但是不知道为什么 编译不了 说没有声明.

JmpREadd =(ULONG)NtReadVirtualMemory + 10; //这行出错的 请问需要怎么声明?我看过他NtOpenProcess并没有声明 或者是我看错了 请各位大牛指点一二 小弟出学驱动.

e:\first\first.c(88) : error C2065: 'NtReadVirtualMemory' : undeclared identifier

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
error C2065: 'NtReadVirtualMemory' : undeclared identifier
看提示是说这个函数未定义啊!
你是不是要把函数原型给定义一下呀。之后在用。不明白的话加我QQ121935930,一起看看。
2010-3-20 20:17
0
雪    币: 290
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
NTSYSAPI
NTSTATUS
NTAPI
NtReadVirtualMemory(

  IN HANDLE               ProcessHandle,
  IN PVOID                BaseAddress,
  OUT PVOID               Buffer,
  IN ULONG                NumberOfBytesToRead,
  OUT PULONG              NumberOfBytesReaded OPTIONAL );

sources 文件中加入 TARGETLIBS=$(DDK_LIB_PATH)\ntdll.lib
2010-3-21 15:43
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢指教 可以编译通过了 但我是用monitor加载之后会出现error(127) 找不到指定的程序
请问能为我解惑么
2010-3-21 17:36
0
雪    币: 290
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
要获得地址的话,给你一个zzage大牛发的函数。

DWORD GetDllFunctionAddress(char* lpFunctionName, PUNICODE_STRING pDllName)
{
  HANDLE hThread, hSection, hFile, hMod;
  SECTION_IMAGE_INFORMATION sii;
  IMAGE_DOS_HEADER* dosheader;
  IMAGE_OPTIONAL_HEADER* opthdr;
  IMAGE_EXPORT_DIRECTORY* pExportTable;
  DWORD* arrayOfFunctionAddresses;
  DWORD* arrayOfFunctionNames;
  WORD* arrayOfFunctionOrdinals;
  DWORD functionOrdinal;
  DWORD Base, x, functionAddress;
  char* functionName;
  STRING  ntFunctionName, ntFunctionNameSearch;
  PVOID BaseAddress = NULL;
  SIZE_T size=0;
  
  OBJECT_ATTRIBUTES oa = {sizeof oa, 0, pDllName, OBJ_CASE_INSENSITIVE};
  IO_STATUS_BLOCK iosb;
  
  ZwOpenFile(&hFile, FILE_EXECUTE | SYNCHRONIZE, &oa, &iosb, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT);
  
  oa.ObjectName = 0;
  
  ZwCreateSection(&hSection, SECTION_ALL_ACCESS, &oa, 0,PAGE_EXECUTE, SEC_IMAGE, hFile);
  
  ZwMapViewOfSection(hSection, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE);
  
  ZwClose(hFile);
  
  hMod = BaseAddress;
  
  dosheader = (IMAGE_DOS_HEADER *)hMod;
  
  opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24);
  
  pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT]. VirtualAddress);
  
  arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions);
  
  arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames);
  
  arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals);
  
  Base = pExportTable->Base;
  
  RtlInitString(&ntFunctionNameSearch, lpFunctionName);
  
  for(x = 0; x < pExportTable->NumberOfFunctions; x++)
  {
    functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]);
   
    RtlInitString(&ntFunctionName, functionName);
   
    functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1;
    functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses[functionOrdinal]);
    if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0)
    {
      ZwClose(hSection);
      return functionAddress;
    }
  }
  
  ZwClose(hSection);
  return 0;
}
2010-3-22 00:41
0
雪    币: 249
活跃值: (25)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
驱动没接触过~
2010-3-22 09:58
0
雪    币: 75
活跃值: (623)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
这么问,即使是神,也爱莫能助
2010-3-22 17:38
0
雪    币: 451
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
路过,支持一下
2010-7-4 17:21
0
游客
登录 | 注册 方可回帖
返回
//