zoukankan      html  css  js  c++  java
  • 关于DIPS的DLL注入(第22章)

    对应于《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的句柄。

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

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

  • 相关阅读:
    nginx基本命令
    一堆LCT板子
    17?17!
    ……妈妈我会写维修数列了!
    bzoj3744 Gty的妹子序列
    Noip2016 总结&反思
    bzoj4025 二分图
    [SHOI2008]堵塞的交通traffic
    bzoj4237 稻草人
    BestCoder Round #90
  • 原文地址:https://www.cnblogs.com/kwliu/p/2129884.html
Copyright © 2011-2022 走看看