一个 重新加载 ntdll.dll 问题
我想加另外加载 一份 NTDLL在系统 SysWOW64 目录下重新拷贝了一份 NTDLL 改名然后分别用 LoadLibrary加载 自己拷贝的MyNtdll
用GetProAddress 获取 MyNtdll 中 'LdrLoadDll'地址
得到的ntdll 地址 和 LdrLoadDll 的地址分别为
77E80000
77E8C4DD
然后用函数 吧 LdrLoadDll 中的地址赋值给函数 指针
再HOOK 原始 NTDLL 中 LdrloadDll 地址 到我自己的函数
在跳回 MyNtdll 中 LdrloadDll 的地址 发现失败了
用ce查看 77E8C4DD 处 发现该地址全部是问号
我想问老大 重载用 重载DLL HOOK 原来的函数 跳转到新的NTDLL 的 LdrloadDll的函数
这中方法行不行
由于我是DELPHI写的代码就不发出来了,代码主要参考了看雪中一个人的 代码
#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
typedef DWORD (WINAPI *ZWQUERYSYSTEMINFORMATION)(DWORD, PVOID, DWORD, PDWORD);
typedef struct _SYSTEM_PROCESS_INFORMATION
{
DWORD NextEntryDelta;
DWORD ThreadCount;
DWORD Reserved1;
FILETIME ftCreateTime;
FILETIME ftUserTime;
FILETIME ftKernelTime;
UNICODE_STRING ProcessName;
DWORD BasePriority;
DWORD ProcessId;
DWORD InheritedFromProcessId;
DWORD HandleCount;
DWORD Reserved2;
DWORD VmCounters;
DWORD dCommitCharge;
PVOID ThreadInfos;
}SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
#define SystemProcessesAndThreadsInformation 5
void main()
{
HMODULE hNtDll = LoadLibraryA("myntdll.dll");
if(!hNtDll)
return;
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hNtDll,"ZwQuerySystemInformation");
ULONG cbBuffer = 0x10000;
LPVOID pBuffer = NULL;
pBuffer = malloc(cbBuffer);
if(pBuffer == NULL)
return;
ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,pBuffer,cbBuffer,NULL);
PSYSTEM_PROCESS_INFORMATION pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;
for(;;)
{
wprintf(L"PID: %d (%ls) ",pInfo->ProcessId,pInfo->ProcessName.Buffer);
if(pInfo->NextEntryDelta == 0)
break;
pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo) + pInfo->NextEntryDelta);
}
free(pBuffer);
getchar();
}
我得到的 新 NTDLL LdrLoadDll 函数地址感觉好像是错误,我找不到什么原因,
不知道我的这样HOOK方法正确不
没看懂你说的一大坨啥意思。。。我还是先说说R3-RELOAD-DLL的步骤吧:
1.CopyFile("c:\\windows\\syswow64\ntdll.dll","c:\\ntdll32.dll");
2.hMod=LoadLibraryA("c:\\ntdll32.dll");
3.pFun=GetProcAddress(hMod,"XXXX");
如果出错的话估计是你代码的问题吧,试试用VC写。 Tesla.Angela 发表于 2014-12-21 12:56
没看懂你说的一大坨啥意思。。。我还是先说说R3-RELOAD-DLL的步骤吧:
1.CopyFile("c:\\windows\\syswow64\ ...
是的,我的参数问题,看汇编访问到一个不能访问的地址,出错了
页:
[1]