- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个应用程序,它使用 Winsock 2.0 recv
函数,我可以通过 Redox Packet Editor 捕获输出,例如,它确认版本是 2.0。
我有这段代码来 Hook 函数:
#define _CRT_SECURE_NO_DEPRECATE
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <WinSock2.h>
#include <detours.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
FILE *pSendLogFile;
FILE *pRecvLogFile;
int (WINAPI *pSend)(SOCKET s, const char* buf, int len, int flags) = send;
int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);
int (WINAPI *pRecv)(SOCKET s, char *buf, int len, int flags) = recv;
int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags);
INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
switch(Reason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hDLL);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pSend, MySend);
if(DetourTransactionCommit() == NO_ERROR)
MessageBox(0,"send() detoured successfully","asd",MB_OK);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pRecv, MyRecv);
if(DetourTransactionCommit() == NO_ERROR)
MessageBox(0,"recv() detoured successfully","asd",MB_OK);
break;
case DLL_PROCESS_DETACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
{
MessageBox(0,"sent","sent",MB_OK);
return pSend(s, buf, len, flags);
}
int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
{
MessageBox(0,"recvd","recvd",MB_OK);
return pRecv(s, buf, len, flags);
}
对于 send
,一切正常,但对于 recv
我没有得到任何输出。我在另一个应用程序中尝试使用 1.1 版本的 Winsock,它工作正常。尝试 Hook WSARecv、WSARecvEx 但没有任何运气。
使用 WinAPIOverride32 检查应用程序,它清楚地表明它使用 recv
函数,并成功记录了使用情况。 Winsock 数据包编辑器也能很好地读取数据。
有什么想法吗?
最佳答案
您确定您挂接的是正确的 dll 吗?我会仔细检查程序实际使用了哪个 dll:WSOCK32.dll 或 ws2_32.dll。
编辑:
也许尝试这样的事情:
typedef int (WINAPI *SendPtr)(SOCKET s, const char* buf, int len, int flags);
HMODULE hLib = LoadLibrary("wsock32.dll");
SendPtr pSend = (SendPtr)GetProcAddress(hLib, "send");
然后将 pSend
与该值一起使用(recv 也是如此)。不要忘记最后调用 FreeLibrary。如果您确定 dll 已经加载,那么最好使用 GetModuleHandle("wsock32.dll")
,因为在这种情况下您不必调用 FreeLibrary。
关于c++ - Winsock recv hooking with Detours,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065903/
我有几个关于 Microsoft Detours Library 的快速问题。我以前用过(成功),但是我只是想到了这个功能: LONG DetourUpdateThread(HANDLE hThrea
我是 Microsoft Detours 的新手。我已经安装它来跟踪进程进行的系统调用。我运行以下从网上获得的命令 syelogd.exe /q C:\Users\xxx\Desktop\log.tx
我正在寻找 Delphi 示例,但我只能找到 C++ 示例代码。 例如,如何在Delphi中定义下面的钩子(Hook)? DETOUR_TRAMPOLINE(int WINAPI SetScrol
我正在尝试拦截系统上每个对象的构造/销毁。为此,我使用 Detours Lib创建运行时补丁。它似乎以某种方式工作 FastCode方法确实如此。我认为它应该有相同的限制(无法修补操作码小于 5 个字
请问tileLayers在detour中是如何工作的。 我能否将任意 2 block 瓷砖分层,导致“切口”合并到更大的洞中?以何种方式,是否有任何限制?我可以拥有多少层以及它们在导航时如何交互。例如
在这里感觉很愚蠢,但为什么这段代码在 Visual 中给我一个语法错误Studio 何时尝试编译它? DetourAttach(&(PVOID&)true_create_file, creat
我尝试在谷歌上搜索编译器错误,但它甚至没有返回搜索结果。所以,我在这里有点迷路了。我刚刚下载了 Microsoft Detours,构建它并从中获取了 detours.h、detours.lib、de
我在使用 Microsoft Detours 时遇到访问冲突问题。我制作了一个加载到第三方应用程序中的 dll。我正在使用 Detours 制作一个蹦床功能到一个未记录的功能,Ida Pro 显示为:
我正在寻找一个 C 库/框架,它允许我替换内存中的函数并将它们重定向到我自己的实现,同时仍然允许我的实现调用原始实现。 这在 Linux-y 系统上似乎是一个相当罕见的需求,大概是因为 LD_PREL
我有一个应用程序,它使用 Winsock 2.0 recv 函数,我可以通过 Redox Packet Editor 捕获输出,例如,它确认版本是 2.0。 我有这段代码来 Hook 函数: #def
我不会在 Minesweeper 中绕过 PlaySoundW 功能。游戏一调用 PlaySoundW 函数就崩溃了。如果我在我的代码中取消对 Beep 的注释,游戏会发出哔哔声然后崩溃。 现在代码正
我正在尝试学习使用弯路修改和扩展程序中的功能。在本例中,我尝试修改 Windows 记事本 32 位中的 InsertDateTime 函数。 我正在使用 Winject 注入(inject)我创建的
很长一段时间我都没有遇到使用 Detours 劫持函数的问题...当我试图劫持类方法时(在我的例子中是 IHTMLDocument2::write from mshtml.dll)我遇到了无穷无尽的问
我通过函数偏移量在外部进程中 Hook 函数。到目前为止,这对于我 Hook 的函数来说效果很好——但是我发现一个“debugLog(char...)”函数仍然存在于二进制文件中但不进行任何打印——它
detours包声称支持 64 位 但我没有看到编译 64 位 二进制文件的方法: Detouring 32-bit and 64-bit Processes 使用nmake all 只编译32 位
很长一段时间我都没有遇到使用 Detours 劫持函数的问题...当我试图劫持类方法时(在我的例子中是 IHTMLDocument2::write from mshtml.dll)我遇到了无穷无尽的问
我是新来的,这是我提出的第一个问题。我希望在这里相处得很好:)对于我的问题!: 我为 x64 处理器(普通英特尔 x64)写了一个 Detouring 基础设施 主要有趣的函数如下所示: typede
我将在Visual Studio 2013或Visual Studio 2019中编译旧项目(Visual Studio 2012 Platform-v110xp)。 它使用了boost和Micros
我无法使用绕行来获得我的第一个钩子(Hook)。我正在使用 Detour 3.0。 我的代码编译得很好,我可以使用 Winject 注入(inject) DLL,但是,我应该 Hook 的函数似乎没有
我正在使用: 微软 VS 10 Detours v3.0 Express 完整的源代码DLL: #include #include ofstream prclist ; #pragma comme
我是一名优秀的程序员,十分优秀!