MHOOK的使用

// dllmain.cpp : 定义 DLL 应用程序的入口点。

#include "stdafx.h"

#include "mhook-lib/mhook.h"

#include <winsock2.h>

//封包函数//

typedef int (WINAPI *_send)(SOCKET s, const char *buf, int len, int flags);

typedef int (WINAPI *_recv)(SOCKET s, char *buf, int len, int flags);

_send g_trueSend = (_send)GetProcAddress(GetModuleHandleA("Ws2_32"),"send");

_recv g_trueRecv = (_recv)GetProcAddress(GetModuleHandleA("Ws2_32"),"recv");

mhook_func _msend = NULL;

mhook_func _mrecv = NULL;

static int WINAPI hook_send(SOCKET s, const char *buf, int len, int flags)

{

    int ret = g_trueSend(s,buf,len,flags);

    if (ret > 0)

    {

        char *temp = new char[ret];

        memcpy_s(temp,ret,buf,ret);

        if(_msend != NULL)

            _msend(temp,ret);

        delete temp;

    }

    return ret;

}

static int WINAPI hook_recv(SOCKET s, char *buf, int len, int flags)

{

    int ret = g_trueRecv(s,buf,len,flags);

    if (ret > 0)

    {

        char *temp = new char[ret];

        memcpy_s(temp,ret,buf,ret);

        if(_msend != NULL)

            _mrecv(temp,ret);

        delete temp;

    }

    return ret;

}

BOOL APIENTRY DllMain(HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)

{

    switch (ul_reason_for_call)

    {

    case DLL_PROCESS_ATTACH:

        //直接在这里HOOK SEND和RECV函数

        Mhook_SetHook((LPVOID*)&g_trueSend,hook_send);

        Mhook_SetHook((LPVOID*)&g_trueRecv,hook_recv);

        break;

    case DLL_THREAD_ATTACH:

        break;

    case DLL_THREAD_DETACH:

        break;

    case DLL_PROCESS_DETACH:

        //直接在这里UNHOOK SEND和RECV函数)

        Mhook_Unhook((LPVOID*)&g_trueSend);

        Mhook_Unhook((LPVOID*)&g_trueRecv);

        break;

    }

    return TRUE;

}

</winsock2.h>

需要实现的函数及.cpp文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// mk.cpp : 定义 DLL 应用程序的导出函数。

//

#include "stdafx.h"

#include "mhook-lib/mhook.h"

extern mhook_func _msend;

extern mhook_func _mrecv;

//ppSystemFunction为系统API,pHookFunction为自己定义的API

BOOL t001(PVOID *ppSystemFunction, PVOID pHookFunction)

{

    return Mhook_SetHook(ppSystemFunction,pHookFunction);

}

//pHookFunction为自己定义的API

BOOL t002(PVOID *ppHookedFunction)

{

    return Mhook_Unhook(ppHookedFunction);

}

BOOL t003(mhook_func pHookSendFunc,mhook_func pHookRecvFuc)

{

    _msend = pHookSendFunc;

    _mrecv = pHookRecvFuc;

    return TRUE;

}


mk.def

1

2

3

4

5

6

LIBRARY

EXPORTS

    ; 此处可以是显式导出

    t001 @1

    t002 @2

    t003 @3


在stdafx.h中添加以下别名

1

typedef void (WINAPI *mhook_func)(char *buf, int len);

最后直接编译生成DLL库就成功了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Dll文件反编译工具易语言是一种功能强大、易于操作的反编译工具,它能够对Windows操作系统中的dll文件进行反汇编和反编译操作,提供源代码和汇编代码供用户参考和修改。 易语言作为一种高级脚本语言,具有操作简便、运行速度快的特点,能够快速实现对dll文件的反编译操作,使用户能够深入了解和学习dll文件的内部结构和行为规律。 该工具提供了丰富的功能,包括查看、编辑资源、查看dll文件中的字符串、函数列表、反汇编代码,甚至还能够直接生成反编译后的源代码和可执行文件。 值得一提的是,该工具还内置了mhook组件,可以直接对dll文件进行hook操作,实现对系统API的监视和拦截,是一款非常实用的安全工具。 总之,dll文件反编译工具易语言具有易于操作、功能丰富、高效实用等特点,可以满足用户反编译和研究dll文件的需求。 ### 回答2: dll文件反编译工具易语言是一款面向Windows系统的反编译工具。它可以将已经编译好的dll文件进行反编译操作,以便对这些dll文件进行修改和分析。 易语言是一种基于中文的编程语言,相对于其他编程语言而言,易语言更加容易学习和理解。因此,很多人使用易语言来进行反编译操作。 dll文件反编译工具易语言具有以下几个特点: 1.易于学习和使用。易语言作为一种基于中文的编程语言,它的语言结构简单明了,容易上手。 2.支持多种工程文件格式。不同的编译器生成的dll文件格式可能不同,易语言反编译工具支持多种工程文件格式,可以进行有效的反编译操作。 3.提供了丰富的反编译工具。除了反编译外,易语言反编译工具还可以进行函数跟踪、变量查看、汇编代码分析等多种操作,可以帮助程序员更好地进行修改和分析。 4.支持插件扩展。易语言反编译工具还支持插件扩展,允许用户自定义功能。 总之,dll文件反编译工具易语言是一款功能丰富、易于学习和使用的工具,可以帮助程序员更好地进行反编译操作,并进行程序分析和修改。 ### 回答3: DLL文件反编译工具易语言是一款可用于反汇编Windows操作系统中动态连接库文件(DLL)的工具,它是一种易于学习和使用的编程语言,可以通过这种语言轻松地进行反编译和编码操作。它具有精简的代码、直观的界面和丰富的帮助文档,使得用户能够迅速上手开始使用。 该工具的主要功能是将DLL文件中的机器码源代码反编译回可读性高的汇编代码和C/C++代码,并支持用户在编辑器中进行修改和调试,从而实现对DLL文件的修改和重新编译。这对于开发人员来说是非常有用的,因为它允许他们修改和定制原有的DLL文件,以满足特定的需求。同时,对于恶意分子来说,该工具也可能为他们提供一个有效的手段来对系统进行攻击和破坏。 考虑到这个工具可能对网络安全造成的潜在威胁,用户需要非常警惕并使用该工具进行良好的代码审查和使用,以确保代码的安全性和完整性。此外,对于开发人员而言,应该遵循所有软件开发最佳实践,只对可信来源的代码进行调试和修改,并保持对所有代码和文件的备份和保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值