简单的C++ DLL注入
今天呢,我们来讨论一下用C++实现DLL注入的简单方法。
环境:
- Visual Studio 2015及以上
- Windows 7及以上
入门需要了解的:
- DLL是什么:DLL_360百科
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
- 注入是什么:注入_360百科
所谓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注入的更多相关文章
- Ring3下的DLL注入(NtCreateThreadEx + LdrLoadDll方式实现,可以注入系统进程)
工具介绍及使用请移步:http://blog.csdn.net/sunflover454/article/details/50441014 本文首发在零日安全论坛:http://www.jmpoep. ...
- c++实现dll注入其它进程
DLL注入技术才具有强大的功能和使用性,同时简单易用,因为DLL中可以实现复杂的功能和很多的技术. 技术要点: 1.宿主进程调用LoadLibrary,就可以完成DLL的远程注入.可以通过Create ...
- DLL注入_拦截技术之Hook方式
后卫大师教你进程注入 首先提一下,由于文章完全是我手写,所以打不了太多,请包含,由于我已经提供了源代码,所以我在这里详细讲一下理论,至于想看代码的下载代码就可以了.代码中关于注入的部分做了详细的注释. ...
- 20145314郑凯杰《网络对抗技术》恶意DLL注入进程(进程捆绑)的实现
20145314郑凯杰<网络对抗技术>恶意DLL注入进程(进程捆绑)的实现 一.本节摘要 简介:在这部分里,要实现将恶意后门悄无声息地与进程进行捆绑,通过和已运行的进程进行捆绑,达到附着攻 ...
- <ReversingEngineering>关于windows32位系统下的dll注入技术经验汇
上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...
- Dll注入技术之消息钩子
转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ...
- Dll注入技术之注册表注入
DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- Dll注入技术之ComRes注入
DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...
- DLL注入
最近的项目涉及了软件破解方面的知识,记录一下. 将dll注入另一个进程. // Inject.cpp : Defines the exported functions for the DLL appl ...
随机推荐
- JDBC基础原理
一.DCL(了解) -- 1. 创建用户CREATE USER 'zhangsan'@'%' IDENTIFIED BY 'zhangsan';-- 2. 用户授权GRANT ALL ON heima ...
- oracle view and MATERIALIZED VIEW
View http://blog.csdn.net/tianlesoftware/article/details/5530618 MATERIALIZED VIEW http://blog.csdn. ...
- POJ-3352-RoadConstruction(边双联通分量,缩点)
链接:https://vjudge.net/problem/POJ-3352#author=0 题意: 给一个无向连通图,至少添加几条边使得去掉图中任意一条边不改变图的连通性(即使得它变为边双连通图) ...
- 命令行音乐播放器 CMus
自从接触到 CMus (C* Music Player) 这个工作在终端里的音乐播放器后,在 Linux 环境里就很少使用 GUI 音乐播放器播放本地音乐文件了.它消耗资源少使用方便,对中文的支持也不 ...
- dot watch
dot watch+vs code提升asp.net core开发效率 在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp ...
- JDBC连接中Class.forName("")到底干了什么?
思考了一个问题,Class.forName("***");到底干了什么? 我们知道Class.forName( )静态方法的目的是为了动态加载类,但是一般来说,一个类forName ...
- Fedora桌面系统Idea中的部分中文无法显示解决
在Linux 桌面开发已经有一段时间了,个人用的是最新的Fedora ,装上idea后,写代码再加中文注释的时候发现部分汉字打不出来,删除的时候发现汉字占着位,只是显示不出来,最初以为是注释问题,调整 ...
- Typedef 用法
typedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法. 不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用typedef避免缺欠,从而使代码更健壮. ...
- Android--View事件传递
Android--View事件传递 View事件传递首先要明白以下要素: 事件就是MotionEvent.该对象包含了传递的事件中的所有信息 事件的来源是Window(即PhoneWindow),包含 ...
- Eclipse IDE配置PHP开发、调试环境
前言 使用java语言开发的朋友想必对Eclipse开发工具已经不陌生了,那么Eclipse作为java主流的开发工具,是否能够开发PHP项目呢?答案如你所想,肯定是可以的!以下就是该IDE下如何配置 ...