首页
社区
课程
招聘
[求助]Win10 X86_64下EAT Hook以及其他堆积问题求助
发表于: 2019-6-22 16:52 4744

[求助]Win10 X86_64下EAT Hook以及其他堆积问题求助

2019-6-22 16:52
4744
大家好,我是新人, 我有几个问题。
1. EAT HOOK在32位下以及运行成功,但不知为什么64位下一直失败.... 弄了好久心态都崩了... 拜托各位大神帮我调试一下,谢谢了!

  
#include <windows.h>
#include <cstdio>
#include <tchar.h>
 
BOOL EATHook(LPCTSTR szDllName, LPCTSTR szFunName, LPVOID NewFun) {
        DWORD addr = 0;
        DWORD index = 0;
        DWORD dwProtect;
        SIZE_T dwWritten = 0;
        HMODULE hMod = LoadLibrary(szDllName);
        if (NULL == hMod)
                return(FALSE);
        PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hMod;
        PIMAGE_OPTIONAL_HEADER pOptHeader = (PIMAGE_OPTIONAL_HEADER)((PBYTE)hMod + pDosHeader->e_lfanew + 24);
        PIMAGE_EXPORT_DIRECTORY pExpDes = (PIMAGE_EXPORT_DIRECTORY)((PBYTE)hMod + pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
        PULONG pAddressOfFunctions = (PULONG)((PBYTE)hMod + pExpDes->AddressOfFunctions);
        PULONG pAddressOfNames = (PULONG)((PBYTE)hMod + pExpDes->AddressOfNames);
        PUSHORT pAddressOfNameOrdinals = (PUSHORT)((PBYTE)hMod + pExpDes->AddressOfNameOrdinals);
 
        for (int i = 0; i < pExpDes->NumberOfNames; ++i) {
                index = pAddressOfNameOrdinals[i];
                LPCTSTR pFuncName = (LPTSTR)((PBYTE)hMod + pAddressOfNames[i]);
                if (!_tcscmp((LPCTSTR)pFuncName, szFunName)) {
                        addr = pAddressOfFunctions[index];
                        break;
                }
        }
        VirtualProtect(&pAddressOfFunctions[index], 0x1000, PAGE_READWRITE, &dwProtect);
        pAddressOfFunctions[index] = (DWORD)NewFun - (DWORD)hMod;
        WriteProcessMemory(GetCurrentProcess(), &pAddressOfFunctions[index], (LPCVOID)((LPDWORD)NewFun - (LPDWORD)hMod), 8, &dwWritten);
        VirtualProtect(&pAddressOfFunctions[index], 0x1000, dwProtect, &dwProtect);
 
        return(TRUE);
}
 
int WINAPI MyMessageBox(
        HWND    hWnd,
        LPCTSTR lpText,
        LPCTSTR lpCaption,
        UINT    uType
) {
        _tprintf("Hello, world!\n");
 
        return(0);
}
 
typedef int (WINAPI* LPFNMESSAGEBOX)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
 
int _tmain() {
        EATHook("USER32.dll", "MessageBoxA", MyMessageBox);
        HMODULE hDll = GetModuleHandle("USER32.dll");
        LPFNMESSAGEBOX lpMessageBox = (LPFNMESSAGEBOX)GetProcAddress(hDll, "MessageBoxA");
        if (NULL == lpMessageBox)
                return(-1);
        lpMessageBox(NULL, "Hello, EAT Hook", "Info", MB_OK);
 
        return(0);
}

2. 我想问一下,如果我在64位下远程线程注入,希望突破SESSION0隔离,能够注入到比如explorer.exe等系统服务进程里面该怎么办? 我用ZwCreateThreadEx注入发现要么注入成功但没反应,要么就是注入成功进程崩溃(explorer.exe的时候),要么就直接失败。(已获取Debug权限)。该怎么做呢,这到底是什么问题?

3. 远程线程注入时而成功时而失败这正常吗??

4. Windows下WDK编程有什么好的书推荐吗? 我在看<Windows驱动编程详解>,虽然WDM式驱动还用,但很老的DDK开发包现在都不用了。有什么更好一点的入门书籍吗? 谢谢。

谢谢各位的查看和帮助!!


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-7-6 15:22 被Kiopler编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
求助
最后于 2019-6-22 18:30 被Kiopler编辑 ,原因:
2019-6-22 16:53
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大家好,我是新人,这段IAT Hook在Win10 X64环境下总是报堆栈溢出异常或访问位置冲突异常,有没有大神帮我看一下...困扰我好久了。谢谢
2019-6-22 16:55
0
雪    币: 12354
活跃值: (5123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

不会HOOKS路过一下
2019-6-22 17:26
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
自己顶一下.... 求帮忙啊
我用的X64 Debug编译应该没问题的,因为我看到论坛上是那么说的。

我后来感觉是不是修改IAT表里的IMAGE_THUNK_DATA的时候出错了,因为64位下地址是8个字节。然后我改成了修改8个字节还是错.... 用WriteProcessMemory和直接赋值都是异常。
异常是出现在进入MyMessageBox的时候出现的。
2019-6-22 18:27
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
6
Stack overflow 下断调试就可以发现是重入了
2019-6-22 19:39
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
啥意思是重入... 你和我说啥重入没用的.. 关键是怎么改代码解决啊。
2019-6-22 20:14
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
8
Kiopler 啥意思是重入... 你和我说啥重入没用的.. 关键是怎么改代码解决啊。
2019-6-23 01:24
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
那这个怎么解决嘞 代码怎么改能跑起来
最后于 2019-6-23 09:30 被Kiopler编辑 ,原因:
2019-6-23 09:29
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
啊,我懂了,因为我在自定义函数里还调了MessageBox所以会无限递归调用MyMessageBox!!!!
2019-6-23 09:59
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
今天用ZwCreateThreadEx在64位下注入任意程序都失败了。用 CreateRemoteThread在64位下注入自己写的进程成功。弄到现在,气死了
2019-6-24 16:08
0
雪    币: 23
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼主,感谢分享。
2020-6-6 21:18
0
游客
登录 | 注册 方可回帖
返回
//