找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6259|回复: 2

一个 重新加载 ntdll.dll 问题

[复制链接]

8

主题

51

回帖

0

精华

铜牌会员

积分
291
发表于 2014-12-20 21:22:43 | 显示全部楼层 |阅读模式
我想加另外加载 一份 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[6];
    FILETIME ftCreateTime;
    FILETIME ftUserTime;
    FILETIME ftKernelTime;
    UNICODE_STRING ProcessName;
    DWORD BasePriority;
    DWORD ProcessId;
    DWORD InheritedFromProcessId;
    DWORD HandleCount;
    DWORD Reserved2[2];
    DWORD VmCounters;
    DWORD dCommitCharge;
    PVOID ThreadInfos[1];
}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方法正确不

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2014-12-21 12:56:06 | 显示全部楼层
没看懂你说的一大坨啥意思。。。我还是先说说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写。

8

主题

51

回帖

0

精华

铜牌会员

积分
291
 楼主| 发表于 2014-12-22 00:33:11 | 显示全部楼层
Tesla.Angela 发表于 2014-12-21 12:56
没看懂你说的一大坨啥意思。。。我还是先说说R3-RELOAD-DLL的步骤吧:
1.CopyFile("c:\\windows\\syswow64\ ...

是的,我的参数问题,看汇编访问到一个不能访问的地址,出错了
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表