今天呢,我们来讨论一下用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. java.sql.SQLException: Could not commit with auto-commit set on

    This kind of exceptions occur when the Oracle JDBC Driver (ojdbc6.jar) version 12 or above will be u ...

  2. PHP 扩展篇 _ 持续更新

    记住这个网站:http://pecl.php.net/ PHP-Redis扩展更新时间:2019/05/06 PHP安装Redis 1:下载目前最新版的redis插件 wget http://pecl ...

  3. BZOJ 4236: JOIOJI map瞎搞

    分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...

  4. GZS与小公园(DFS)

    Description 某天GZS漫步在学校新建的小公园,他发现那里建成了一些水池和小河道.我们暂且把它们统一看成水池.假设公园旁有一张小公园的地图,上面仅标识了此处是否是水池,你能帮GZS计算出该地 ...

  5. poj3264_Balanced Lineup

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 42349   Accepted: 19917 ...

  6. Hdu1015&&寒假作业第二组I题

    题意是A-Z对应1-26,然后给个目标数字和字符串,看看字符串里的某5个字符的组合能不能使v - w^2 + x^3 - y^4 + z^5 = target等式成立,其实多写几个循环也可以达到目的, ...

  7. spring tx:advice事务配置

    http://blog.csdn.net/bao19901210/article/details/17226439 http://blog.csdn.net/rong_wz/article/detai ...

  8. kali linux 通过跑包的方式破解wifi密码

    1. wlan0开启monitor mode    :    airmon-ng start wlan0 2. 查看附近的无线网络     : airodump-ng wlan0mon 3. 抓取无线 ...

  9. JS正则改变字符之间文字

    var reg = /([[^[]*])/g; html = html.replace(reg, "<span class=\"bold\">$1</s ...

  10. linux basename命令的使用

    用途 返回一个字符串参数的基本文件名称. 语法 basename String [ Suffix ] 描述 basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 ...