为了防止忘记,特记下

DLL的创建,在VS2017中选择dll的创建

  1. // dllmain.cpp : Defines the entry point for the DLL application.
  2. #include "stdafx.h"
  3.  
  4. #include <Windows.h>
  5. #include <stdio.h>
  6.  
  7. HMODULE thisModule;
  8. HHOOK hook;
  9. LRESULT CALLBACK LaunchListener(int nCode, WPARAM wParam, LPARAM lParam);
  10. BOOL APIENTRY DllMain( HMODULE hModule,
  11. DWORD ul_reason_for_call,
  12. LPVOID lpReserved
  13. )
  14. {
  15. switch (ul_reason_for_call)
  16. {
  17. case DLL_PROCESS_ATTACH:
  18. case DLL_THREAD_ATTACH:
  19. case DLL_THREAD_DETACH:
  20. case DLL_PROCESS_DETACH:
  21. break;
  22. }
  23. return TRUE;
  24. }
  25.  
  26. #ifdef __cplusplus //If used by C++ code.
  27. extern "C" { //we need to export the C interface
  28. #endif
  29. _declspec(dllexport) HHOOK AttachHook(DWORD threadID) {
  30. hook = SetWindowsHookEx(WH_CALLWNDPROC, LaunchListener, thisModule, threadID); //WH_KEYBOARD_LL WH_CALLWNDPROC
  31.  
  32. return hook;
  33. }
  34. #ifdef __cplusplus
  35. }
  36. #endif
  37. LRESULT CALLBACK LaunchListener(int nCode, WPARAM wParam, LPARAM lParam) {
  38. // process event here
  39. if (nCode >= ) {
  40. CWPSTRUCT* cwp = (CWPSTRUCT*)lParam;
  41. if (cwp->message == WM_ACTIVATE) {
  42. if (LOWORD(cwp->wParam) == WA_INACTIVE)
  43. {
  44. //the window being deactivated
  45. MessageBox(NULL, TEXT("deactivated"), NULL, MB_OK);
  46. }
  47. else
  48. {
  49. //the window being activated
  50. MessageBox(NULL, TEXT("activated"), NULL, MB_OK);
  51. }
  52. }
  53. }
  54. return CallNextHookEx(NULL, nCode, wParam, lParam);
  55. }

Build上面的程序,会生成dll

在需要dll的另一个项目中注入dll

  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
  5. if (message == WM_DESTROY) {
  6. PostQuitMessage();
  7. }
  8. return DefWindowProc(hwnd, message, wParam, lParam);
  9. };
  10. HINSTANCE hinst;
  11. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevinstance, PSTR szCmdLine, int iCmdShow) {
  12. HWND hwnd;
  13.  
  14. hinst = GetModuleHandle(NULL);
  15. // create a window class:
  16. WNDCLASS wc = {};
  17. wc.lpfnWndProc = WndProc;
  18. wc.hInstance = hinst;
  19. wc.lpszClassName = "hooking";
  20.  
  21. // register class with operating system:
  22. RegisterClass(&wc);
  23.  
  24. // create and show window:
  25. hwnd = CreateWindow("hooking", "hooking", WS_OVERLAPPEDWINDOW | WS_EX_APPWINDOW | WS_EX_WINDOWEDGE , , , , , NULL, NULL, hinst, NULL);
  26.  
  27. if (hwnd == NULL) {
  28. return ;
  29. }
  30.  
  31. ShowWindow(hwnd, SW_SHOW);
  32.  
  33. DWORD threadID = GetWindowThreadProcessId(hwnd, NULL);
  34.  
  35. HINSTANCE hinstDLL = LoadLibrary(TEXT("D:\\Strive Sun Project\\HOOK_1024\\DLL\\Debug\\DLL.dll")); //这里需要新创建的dll的路径
  36. HHOOK(*AttachHookProc)(DWORD);
  37. AttachHookProc = (HHOOK(*)(DWORD)) GetProcAddress(hinstDLL, "AttachHook");
  38.  
  39. HHOOK HOOK = AttachHookProc(threadID);
  40.  
  41. MSG msg = {};
  42.  
  43. while (GetMessage(&msg, NULL, , )) {
  44. TranslateMessage(&msg);
  45. DispatchMessage(&msg);
  46. }
  47. }

这个项目是检测创建的窗口是否处于激活状态,仅供参考

另注: 如果想调试dll,需要在另一个程序加载DLL文件之前(可以设置Messagebox阻塞程序执行到下一步)将dll程序attach到另一个程序的.exe可执行文件上,再运行.exe即可调试dll

如何创建DLL,以及注入DLL的更多相关文章

  1. 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里

    /* 描述 功能:通过修改EIP寄存器实现32位程序的DLL注入(如果是64位,记得自己对应修改汇编代码部分) 原理: 挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器 ...

  2. N种内核注入DLL的思路及实现

    内核注入,技术古老但很实用.现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中.可能有部分人会说:"都进内核了.什么不能干?".是啊,要是内核中可以做包括R ...

  3. [转]N种内核注入DLL的思路及实现

    内核注入,技术古老但很实用.现在部分RK趋向无进程,玩的是SYS+DLL,有的无文件,全部存在于内存中.可能有部分人会说:“都进内核了.什么不能干?”.是啊,要是内核中可以做包括R3上所有能做的事,软 ...

  4. Windows x86/ x64 Ring3层注入Dll总结

    欢迎转载,转载请注明出处:http://www.cnblogs.com/uAreKongqi/p/6012353.html 0x00.前言 提到Dll的注入,立马能够想到的方法就有很多,比如利用远程线 ...

  5. 【windows核心编程】使用远程线程注入DLL

    前言 该技术是指通过在[目标进程]中创建一个[远程线程]来达到注入的目的. 创建的[远程线程]函数为LoadLibrary, 线程函数的参数为DLL名字, 想要做的工作在DLL中编写.  示意图如下: ...

  6. 分析恶意驱动(进程启动apc注入dll)

    一.前言  用IDA也有好些时间了,以前就只会用F5功能玩无壳无保护的裸驱动,感觉太坑了,这两天就开始看网上大牛的逆向. 今天记录一下sudami曾经逆向过的fuck.sys.第一遍自己走的时候漏掉了 ...

  7. [C#] - 注入DLL

    原文:http://xyzlht.blog.163.com/blog/static/69301417200882834211787/ ) { MessageBox.Show("创建远程线程失 ...

  8. Hook任务栏时钟窗口(原理其实很简单,就是注入DLL到时钟窗口进程(explorer.exe))

    用过一些日历软件的小伙伴应该都知道它们都实现了在时钟窗口上的Hook,也就是屏蔽了系统原有的功能,实现自己的功能 某日历软件Hook时钟窗口后的效果 经过一番研究,发现原理其实很简单,就是注入DLL到 ...

  9. Windows挂钩注入DLL

    注入DLL实现源码:HINSTANCE g_hInstDll = NULL; HHOOK g_hHook = NULL; DWORD g_dwThreadId = 0; #ifdef _MANAGED ...

随机推荐

  1. C# 给某个方法设定执行超时时间-2

    var response = RunTaskWithTimeout<ReturnType>( (Func<ReturnType>)); /// <summary> ...

  2. java下载文件时文件名出现乱码的解决办法

    转: java下载文件时文件名出现乱码的解决办法 2018年01月12日 15:43:32 橙子橙 阅读数:6249   java下载文件时文件名出现乱码的解决办法: String userAgent ...

  3. Java学习之==>int和Integer的区别和联系

    一.区别 1.类型 int是java中原始八种基本数据类型之一: Integer是一个类,包装整型提供了很多日常的操作: 2.存储位置和大小 int是由jvm底层提供,由Java虚拟机规范,int型数 ...

  4. Linux下源码安装MySQL-5.6.25

    从mysql-5.5起,mysql源码安装开始使用cmake了,因此我们得先安装cmake,配置安装目录./configure --perfix=/.....的时候和以前的会有些区别. 一.安装cma ...

  5. CentOS 7.x关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory问题解决

    一直用CentOS 6.x,今天用CentOS7.3版本时,防火墙配置后执行service iptables start出现”Failed to restart iptables.service: U ...

  6. HTML标签-->段落,格式,文本

    只有努力奔跑,才能一直停留在原地. <!--段落标签--> <h1>默认向左</h1> <h1 align="right">向右对齐 ...

  7. python-day2(学前了解)

    编程语言分类 编程语言是用来和计算机交互的,但计算机只认识0和1 机器语言(低级语言) 直接和硬件交互 用0和1和计算机交流 优点:执行效率高 缺点:开发效率低 汇编语言 直接和硬件交互 优点:开发效 ...

  8. Python自学笔记之计算机基础

    osi七层协议应用层-表示层-会话层-传输层-网络层-数据链路层-物理层 无线网协议 ethernet 物理层:网线,光纤 数据链路层:arp协议 mac地址,广播 在广播域内传播 网络层:ip地址标 ...

  9. Python 入门之 内置模块 -- hashlib模块

    Python 入门之 内置模块 -- hashlib模块 1.hashlib 摘要算法,加密算法 (1)主要用途: <1> 加密 : md5 sha1 sha256 sha512 md5, ...

  10. C++新型强制类型转换。

    C++强制类型转换分为4个不同的类型. 1.static_cast -用作基本类型转换. -不能用于基本类型指针转换. -可以用于有继承关系对象之间的转换和类指针之间的转换. #include < ...