博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于DIPS的DLL注入(第22章)
阅读量:6693 次
发布时间:2019-06-25

本文共 749 字,大约阅读时间需要 2 分钟。

对应于《window核心编程》第五版的576页。

这个例子主要通过SetWindowsHookEx函数来将一个指定的DLL加载进目标进程,进而到达一些特殊的处理目的。DIPS这个例子实现的功能是保存桌面上所有图标的位置,使桌面的分辨率发生改变后仍然能够保持原来的布局不变。我们没有办法直接获取到这些图标的位置,因为我们的程序进程和桌面进程不是同一个,必须要将我们的dll放置在桌面的进程空间中才能访问桌面上的内容。

其思路如下:整个solution分为两个项目,第一个是一个exe的程序,用来将dll注入,并且通过给dll中的窗口发消息来和dll通信,控制dll的行为。第二个是一个dll程序,用来被注入到桌面进程中,实现桌面图标的保存。

主程序exe的思路如下:

通过findwindow来找到桌面的窗口句柄,然后再使用GetWindowThreadProcessId获取到窗口所属的线程,在这个线程上用SetWindowsHookEx来给这个线程挂接一个消息的hook,从而将我们的dll注入,通过给dll中的窗口发送WM_APP消息来控制dll的行为。

dll的思路如下:

在dll被注入后,创建一个对话框,不进行显示,用来维持消息循环。当接收到WM_app消息后,按照消息参数,读取或者保存桌面图标的位置。

注意:

两个进程之间的设置了共享的存储去用来存储 exe的线程Id和hook的句柄。

其实现在看起来不难,但是我调试这个程序还是花了点时间,所以总结一下。。。。。。

http://files.cnblogs.com/kwliu/22-DIPS.rar

转载于:https://www.cnblogs.com/kwliu/archive/2011/08/07/2129884.html

你可能感兴趣的文章
Windows Redis默认配置文件,Redis配置不生效解决方案
查看>>
oracle-------window安装
查看>>
学习打卡-2018/07/25
查看>>
python 网络编程---粘包
查看>>
I/O完成端口、异步I/O、APC和线程池(四)——线程池
查看>>
获取Java程序运行的路径 | 获取当前jar包的路径
查看>>
摆脱京城贵妇unittest的骚套路discover,自定义用例执行顺序。
查看>>
MYSQL
查看>>
jQuery验证控件jquery.validate.js使用说明+中文API
查看>>
Uploadify自定义提示信息
查看>>
R语言可视化--颜色
查看>>
源码安装干净卸载方式
查看>>
java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
查看>>
selenium IDE安装
查看>>
u3d工作中解决问题记录
查看>>
String to Integer (atoi)
查看>>
一、cent OS安装配置JDK
查看>>
DWARF 中的 Debug Info 格式
查看>>
Valid Sudoku
查看>>
启用事务注解
查看>>