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

本文详细介绍了Source Insight插件TabSiPlus的实现原理,包括"外挂插件加载器"TabSiHost.exe和"插件动态库"TabSiPlus.dll的工作流程。加载器通过Hook Source Insight进程,注入插件动态库,动态库则通过Hook窗口消息,实现Tab标签功能。文章着重阐述了Hook机制和关键消息处理,如WM_SETTEXT和WM_DESTROY,以及MDI窗口的管理。
摘要由CSDN通过智能技术生成


    “TabSiPlus 外挂插件”主要有两部分组成,分别是“外挂插件加载器”和“插件动态库”。“插件动态库”完成Source Insight窗口的Hook,显示Tab标签栏,截获Source Insight的窗口消息并根据消息调整Tab标签栏等功能,这是一个动态链接库,不能主动执行,所以还需要一个“外挂插件加载器”,“外挂插件加载器”是一个独立的可执行文件,它的主要功能就是发现Source Insight的进程,并把插件动态库“注入”到Source Insight的进程中。本文将简单介绍这两个组件是如何协同工作,最终实现插件的完整功能。
   
    首先介绍“外挂插件加载器”,它就是TabSiHost.exe组件,它的功能就是监视Source Insight进程,发现Source Insight的主窗口,将插件主体动态库插入到Source Insight。关于如何发现Source Insight和代码注入的方法请查看本系列的第一篇《发现Source Insight》和第二篇《将本地代码注入到Source Insight》,此处就不再赘述。此处主要介绍TabSiHost.exe组件的工作流程以及一些实现细节问题。TabSiHost.exe组件的主函数是MainFunction(),这个函数首先获取参数,根据参数判断是加载还是卸载插件,然后是启动一个定时器,这个定时器负责监视Source Insight进程,最后进入一个消息循环,等待进程结束。定时器的主要任务就是检查是否有Source Insight进程创建,其实就是枚举当前全部程序的主窗口,查看是否有Source Insight的主窗口,如果有则要根据设置确定是否对其实施代码注入。这里需要注意的是不能重复注入,因为每次注入都要创建一个Tab标签栏,重复注入会导致很难看的事情发生。如何确定Source Insight已经被Hook过了呢?其实可以有很多方法,比如创建内核对象进行标识,这只内存标志等等,TabSiPlus使用了一种很巧妙的方式,就是在Source Insight主窗口的窗口标题字符串中插入一个标识字符串“with TabSiPlus”,这样定时器在枚举程序的主窗口的时候就可以根据窗口标题判断这个进程实例是否已经被Hook过了,同时,这个字符串标识还宣示了“TabSiPlus 插件”的存在,一举两得。简单了解了“外挂插件加载器”的工作过程之后,下面将重点介绍“插件动态库”的工作过程。

    本系列的第三篇已经介绍过TabSiPlus.dll组件中的代码执行顺序,当LoadLibrary()调用发生时,C
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值