外挂的目的就是将代码注入到其它进程中,所以必须要有目标进程才能完成注入,而所谓的目标进程通常是某软件的一部分或者是全部,所以要对目标程序有深入地了解。一般外挂都是针对某个应用程序开发的,其装载、运行都依赖于宿主进程提供的环境,如果“挂”错了,后果很严重。有一些软件运行时会启动多个进程,每个进程完成各自的任务,所以要分清到底应该“挂”哪个进程,好在“Source Insight”比较简单,所有的功能都在一个进程中完成,分析起来比较简单。

要给“Source Insight”加一个用于文件切换的标签栏,就要对“Source Insight”的窗口体系进行深入研究,因为文件切换体现在“Source Insight”的界面上就是窗口的切换。除此之外,还要研究窗口之间的消息流向,这样的工具要首推“Spy++”。“Spy++”工具是Viausl Studio的一部分,我们先用它来看看“Source Insight”程序的窗口层次结构,首先是主框架窗口,也就是整个界面最外层(最大)的那个窗口,如下图所示:

图4.1 Source Insight的主窗口

主窗口的class name是“si_Frame”,这是一个好兆头,这说明“Source Insight”程序有固定的主框架窗口class name,TabSiPlus就是根据主框架窗口的class name识别“Source Insight”的。其实要标签化一个多文档界面的窗口系统,最重要的是找到子框架窗口以及子框架窗口的宿主,也就是子框架窗口的父窗口。通常这个窗口并不是主框架窗口,而是主框架窗口的一个子窗口,这个子窗口和Toolabr或Rebar窗口一样,不同之处在于它既不靠顶,也不靠边,它只是占据主框架窗口的整个客户区。现在就看看“Source Insight”的子框架窗口的宿主窗口是怎么回事,首先关闭所有文档,也就是关闭全部子框架窗口,然后拖着“Spy++”的瞄准星到处找,找啊找,就是这个:


图4.2 MDI Client窗口

注意到它的class name了吗?是的,它的窗口class name是“MDIClient”,熟悉Windows的程序员都知道,这就是windows的标准多文档窗口界面,这很令人振奋,要记住这个名字,因为我们的外挂就是通过Hook这个窗口来控制文件标签的。接下来是研究子框架窗口,打开一个子窗口,不要最大化,然后用“Spy++”的瞄准星慢慢看:


图4.3 Source Insight的子窗口

原来它的class name是“si_Sw”,它还有很多子窗口,不过不在我们关心之列,重要的就是这个class name,因为“TabSiPlus”只Hook这个子框架窗口。

找到这些窗口之后,就需要研究这些窗口之间的消息了,考虑到文件切换标签栏的行为,比如当用户点击一个标签的时候要激活对应的子框架窗口,再比如当用户通过其它方式切换一个窗口的时候(比如使用快捷键或Window菜单),需要标签栏能够作出相应的更新动作,还有就是窗口的创建和销毁(对用操作是打开和关闭文件),所以要重点关注的几个消息是窗口创建,销毁,窗口激活,窗口去激活等等,如下图所示设定消息Filter:


图4.4 消息过滤设置

然后激活这个子框架窗口,可以看到有一个WM_MDIACTIVE消息:


图4.5 MDI消息流动情况

通过解析消息参数就能得到窗口句柄,再通过窗口句柄和标签之间的关系(这个关系由我们的外挂自己维护,关于TabSiPlus内部细节将在下篇介绍)更新相应的标签。同样的方法,Hook WM_MDICREATE和WM_MDIDESTROY可以感知到窗口的创建和销毁,据此可以添加一个标签或删除一个标签。当用户激活某个标签的时候,通过模拟发送相应的消息使窗口能够具有相应的行为,这一部分就是标签外挂的重点。

通过上面的研究,我们来总结一下具有哪些资质的程序才能应用标签窗口外挂,首先,主窗口要有固定的class name或窗口标题格式,有固定的class name这一点不是必须的,可以通过其它方式找到宿主程序的主窗口,但是窗口标题的格式十分重要,因为在无法获得宿主程序内部数据结构的情况下,只能通过分析窗口标题来获知窗口对应的文件名称。其次是应用程序要是标准的Windows多文档界面,虽然从理论上讲所有拥有固定客户区窗口class name和子窗口class name的窗口体系都可以使用TabSiPlus使用的技术,但是对于标准的Windows多文档界面程序,有很多标准的窗口消息可以利用(例如MDICHILD_ACTIVE,MDICHILD_DESTROY等等),能给功能开发带来更多的便利。最后是用于显示文件的子窗口要有固定的class name。“Source Insight”很好地满足了这些条件,所以“TabSiPlus”就出现了。

至此,所有有关“TabSiPlus”的外部情况(包括如何找到“Source Insight”,如何装载外挂动态链接库等等)都介绍完了,本系列的下一篇讲深入“TabSiPlus”的内部,详细讲解注入到宿主程序中的代码是如何工作的,下下篇(可能是最后一篇)会对本文发表过程中读者提到的一些感兴趣的问题进行解答,如果你能耐着性子读完最后一篇文章,会有一个惊喜等待着你,猜猜会是什么?

Source Insignt文件标签外挂:TabSiPlus的下载地址:
http://www.winmsg.com/download/tabsiplus.zip

版权声明:本文为博主原创文章,未经博主允许不得转载。

给Source Insight做个外挂系列之四--分析“Source Insight”相关推荐

  1. 给Source Insight做个外挂系列之五--Insight “TabSiPlus”

    "TabSiPlus 外挂插件"主要有两部分组成,分别是"外挂插件加载器"和"插件动态库"."插件动态库"完成Sourc ...

  2. 给Source Insight做个外挂系列之三--构建外挂软件的定制代码框架

    上一篇文章介绍了"TabSiPlus"是如何进行代码注入的,本篇将介绍如何构建一个外挂软件最重要的部分,也就是为其扩展功能的定制代码.本文前面提到过,由于windows进程管理的限 ...

  3. 给Source Insight做个外挂系列之一--发现Source Insight

    作者:星轨(oRbIt)   E_Mail :inte2000@163.com 一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多游戏也有用于扩展功能或者作弊的工具,其中很多也是以 ...

  4. 给Source Insight做个外挂系列之六--“TabSiPlus”的其它问题

    关于如何做一个Source Insight外挂插件的全过程都已经写完了,这么一点东西拖了一年的时间才写完,足以说明我是一个很懒的人,如果不是很多朋友的关心和督促,恐怕是难以完成了.许多朋友希望顺着本文 ...

  5. 给Source Insight做个外挂系列之二--将本地代码注入到Source Insight进程

    作者:星轨(oRbIt)  E_Mail :inte2000@163.com 上一篇文章介绍了如何发现正在运行的"Source Insight"窗口,本篇将介绍"TabS ...

  6. Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程...

    Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列文章: Red Gate系列之一 SQL C ...

  7. mldonkey系列之四──Mldonkey命令解释[zt]

    mldonkey系列之四──Mldonkey命令解释2007-10-27 周六, 21:16 MLDonkey拥有一个简单的内部命令解释器.多数如telnet.Web或GUI这样Mldonkey的界面 ...

  8. nginx系列之四:web服务器

    ** 前言 ** nginx系列之一:nginx入门 nginx系列之二:配置文件解读 nginx系列之三:日志配置 nginx系列之四:web服务器 nginx系列之五: 负载均衡 nginx系列之 ...

  9. PXE系列之四:PXE无盘LINUX工作站

    PXE系列之四:PXE无盘LINUX工作站 (一)概念: 无盘引导,本机无硬盘,从pxe服务器上把一个小小的内核通过tftp传到客户端,运行于其内存中,这种应用 往往还需要一个存在于某个文件服务器上的 ...

最新文章

  1. 骆驼iptv_骆驼路线的主/从故障转移
  2. 人工智能与智能系统的先驱人物
  3. 设置图片元素上下垂直居中的7种css样式_赵一鸣博客
  4. feign直接走熔断_SpringCloud微服务面试必问:Hystrix 服务降级、熔断
  5. php+mysql封装增删查改
  6. MyBatis官方文档——动态SQL部分
  7. New Windows Vista Includes ActiveSync
  8. JAVA跑步计时器app_锻炼计时器app
  9. 如何用WxJump解决微信二维码无法跳转
  10. iOS开发 处理置顶聊天的功能
  11. AD切换2D,3D,旋转模型
  12. PyTorch - GAN与WGAN及其实战
  13. 【小白向】利用笔记本+网线让台式机上网
  14. 牛客 Celestial Resort 质因数分解求最小公倍数 除法取模
  15. 程序通过命令行获取操作系统名称+版本+CPU名称等各种信息
  16. 怎么自制小程序?【自己制作小程序】
  17. 中州韵输入法 linux,linux manjaro安装五笔+拼音输入法(中州韵)
  18. 【GaussDB】初始GaussDB和GaussDB版本介绍
  19. 【bzoj3238】差异 后缀自动机
  20. my read_exchange rate

热门文章

  1. 方法入门_方法的定义
  2. SpringBoot整合RocketMQ之环境搭建以及Producer发送消息
  3. Redisson分布式锁实战-1:构建分布式锁
  4. 云服务器 web网站吗,web云服务器免费的吗
  5. 计算机领域的范式,编程领域的范式转移
  6. 在 IntelliJ IDEA 中远程调试 Java 程序
  7. 210305设计共享内存
  8. 【图文详解】Mysql8.0安装教程
  9. Leetcode PHP题解--D5 804. Unique Morse Code Words
  10. 【科普】Web(瓦片)地图的工作原理