zoukankan      html  css  js  c++  java
  • 简单的C++ DLL注入

    今天呢,我们来讨论一下用C++实现DLL注入的简单方法。

    环境:

    • Visual Studio 2015及以上
    • Windows 7及以上

    入门需要了解的:

    DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。

    所谓DLL注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。


    任务目标:将DLL注入到Windows计算器中,使按下Home键时弹出消息框(MessageBox)

    1.生成DLL文件:

    2.代码时间!

    需要了解的函数方法:

    FindWindow( //返回该窗体的句柄(HWND)
    LPCTSTR lpClassName, //窗体的类名,可以为NULL
    LPCTSTR lpWindowName //窗体的标题
    );
    
    GetWindowThreadProcessId( //返回这个线程的ID(DWORD)
    HWND hWnd, //该窗体的句柄(HWND) 用FindWindow获取
    LPDWORD lpdwProcessId  //存放 线程的变量地址(DWORD) 的地址(有点绕口 = =)
    ); 
    
    GetModuleHandle( //获取一个特定的应用程序或动态链接库的模块句柄
    LPCTSTRlpModuleName); //模块名称 也就是DLL项目名
    
    SetWindowsHookEx(
    __in int idHook, //钩子类型 这里用的是键盘钩子,所以用WH_KEYBOARD
    __in HOOKPROC lpfn, //回调函数地址 处理键盘事件的方法
    __in HINSTANCE hMod, //实例句柄 也就是这个DLL的句柄,用GetModuleHandle获取
    __in DWORD dwThreadId); //线程ID 用GetWindowThreadProcessId获取

     了解以上函数以后,事情就变得十分简单了:

    直接将代码加入到初始的cpp中即可,注意更改部分的代码以兼容你自己的程序:

    LRESULT WINAPI KeybordProc(int code, WPARAM wP, LPARAM lP)
    {
        if (code == HC_ACTION && wP == VK_HOME && GetKeyState(VK_HOME) < 0) {
            MessageBox(NULL,TEXT("LOL"),TEXT("IS WORKING!"),0);
            return 0;
        }
        return CallNextHookEx(NULL, code, wP, lP);//一定要有,否则程序可能无法正常运行
    }
     
    void _stdcall SetHook()
    {
        HWND Games;
        Games = ::FindWindow(NULL, TEXT("计算器"));
    
        DWORD PID, TID;
        TID = ::GetWindowThreadProcessId(Games, &PID);
        HHOOK g_Hook=::SetWindowsHookEx(WH_KEYBOARD,
            KeybordProc,
            GetModuleHandle(TEXT("MFCLibrary2.dll")),//注意这里是生成的dll名称
            TID);
    
    }

    生成->编译 

     

    没差错的话DLL就生成在了debug目录下

  • 相关阅读:
    腾讯云通信 资料
    获取openid 的步骤
    微信公众号推送通知接口
    患者接收医生的消息通知完整流程(微信公众号的界面)
    阿里im即时通讯 h5 demo
    微信微信JS-SDK 6.0.2 填坑笔记
    2018秋季寒假作业1-介绍自己
    勿忘初心
    Ubuntu中安装eclipse
    vim的常用指令
  • 原文地址:https://www.cnblogs.com/Mr-Banned/p/9299888.html
Copyright © 2011-2022 走看看