今天呢,我们来讨论一下用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) < ) {
MessageBox(NULL,TEXT("LOL"),TEXT("IS WORKING!"),);
return ;
}
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目录下

简单的C++ DLL注入的更多相关文章

  1. Ring3下的DLL注入(NtCreateThreadEx + LdrLoadDll方式实现,可以注入系统进程)

    工具介绍及使用请移步:http://blog.csdn.net/sunflover454/article/details/50441014 本文首发在零日安全论坛:http://www.jmpoep. ...

  2. c++实现dll注入其它进程

    DLL注入技术才具有强大的功能和使用性,同时简单易用,因为DLL中可以实现复杂的功能和很多的技术. 技术要点: 1.宿主进程调用LoadLibrary,就可以完成DLL的远程注入.可以通过Create ...

  3. DLL注入_拦截技术之Hook方式

    后卫大师教你进程注入 首先提一下,由于文章完全是我手写,所以打不了太多,请包含,由于我已经提供了源代码,所以我在这里详细讲一下理论,至于想看代码的下载代码就可以了.代码中关于注入的部分做了详细的注释. ...

  4. 20145314郑凯杰《网络对抗技术》恶意DLL注入进程(进程捆绑)的实现

    20145314郑凯杰<网络对抗技术>恶意DLL注入进程(进程捆绑)的实现 一.本节摘要 简介:在这部分里,要实现将恶意后门悄无声息地与进程进行捆绑,通过和已运行的进程进行捆绑,达到附着攻 ...

  5. <ReversingEngineering>关于windows32位系统下的dll注入技术经验汇

    上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...

  6. Dll注入技术之消息钩子

    转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ...

  7. Dll注入技术之注册表注入

    DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  8. Dll注入技术之ComRes注入

    DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...

  9. DLL注入

    最近的项目涉及了软件破解方面的知识,记录一下. 将dll注入另一个进程. // Inject.cpp : Defines the exported functions for the DLL appl ...

随机推荐

  1. json 打印

    JsonObject jsonObj = new JSONObject(); jsonObj.put("success",true); jsonObj.put("msg& ...

  2. Docker安装nginx以及负载均衡

    首先在linux系统中新建一个data文件夹进行nginx容器的创建--即为:mkdir data. 一:第一次 1 第一步: 使用 docker pull nginx将nginx的镜像从仓库下载下来 ...

  3. STP-8-RSTP中的提议/同意过程

    连接中断原因也可能是增加了新的链路,导致其中一台交换机重新选举根端口,最终认为新链路所连端口是根端口,RSTP在点到点链路上使用提议/同意(Proposal/Agreement)过程,让类似这种链路迅 ...

  4. uoj46玄学

    复杂度辣鸡没人权 疯狂爆oj 感觉要被众多uoj用户骂了 #include <bits/stdc++.h> #define ll long long #define LS ls[now]? ...

  5. 关于企业邮箱无法提醒解决办法(未安装邮件客户端可添加至网易邮箱大师/qq邮箱等)

    关于企业邮箱无法提醒解决办法: 一.使用现有的邮箱客户端,以下以网易的邮箱大师为例mail.exe 点击客户端左边的添加邮箱账号,在出现的对话框中输入账号和密码后,点击登陆按钮后,等待添加完成即可,邮 ...

  6. AtCoder Regular Contest 075 2017年6月4日 C、D、E题解

    http://arc075.contest.atcoder.jp/assignments 昨晚做的atcoder,今天写个简单题解. F题不会做,800point的,就跪了,要等zk大佬来做.zk能做 ...

  7. Spark Mllib里如何建立密集向量和稀疏向量(图文详解)

    不多说,直接上干货! 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计

  8. AI入门丨开源学习资源推荐

    现在AI大热,网上的资源也非常多,让人眼花缭乱.非科班的我,经过半年的摸索,也算马马虎虎入了坑.下面整理了我认为不错的学习资源,大部分我都看过,以分享给更多的人.我会不断保持更新,也欢迎大家补充. P ...

  9. Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)

    ​ (我就是个封面) Spring-boot自出现后,到现在火的很,大家貌似都在用,连招聘里面也要求会这个.但是说实话,spring-boot无外乎想实现一种可插拔的编程方式,说是简化配置,其实并没有 ...

  10. dubbo服务降级(2)

    dubbo降级服务 使用dubbo在进行服务调用时,可能由于各种原因(服务器宕机/网络超时/并发数太高等),调用中就会出现RpcException,调用失败. 服务降级就是指在由于非业务异常导致的服务 ...