当前位置:C++技术网 > 资讯 > 窗口跟踪神器Spy++和窗口反跟踪技术DirectUI的整体分析

窗口跟踪神器Spy++和窗口反跟踪技术DirectUI的整体分析

更新时间:2016-03-25 16:35:24浏览次数:1+次

    看到别人软件UI做的不错,就喜欢顺手用Spy++来看看软件,能够大致了解一下软件的情况。以前认识的程序员朋友不多,很多东西也不知道。所以那时候都不知道有Spy++的存在,尽管Spy++总是经常看到我,而我却无视他的存在。
    直到后来一同事玩了一下,这样才开始知道Spy++的存在。我想也有很多没有经验的人,接触到的信息太少,所以很多东西也不知道。对此,我也非常想帮助那些新入门的人,能够了解更多东西,掌握一些非常有用的软件,帮助自己学习和开发。如果你也有这个想法,欢迎将你经常使用的不错的软件和基本用法发布到C++技术网,一起学习。我希望C++技术网能够成为大家成就大神的一个平台。
    那么最先要说的就是Spy++怎么来的,能干什么,怎么用?说清楚这些就够用了。软件只是来辅助我们学习和工作的,不必当作一个炫耀的资本,这是很肤浅的。如果你知道一个不错的软件,推荐给大家就好,没必要鄙视别人不知道和不会用。
    举个例子来说,我曾经通过观察任务管理器来分析内存映射文件导致的内存泄漏,最终成功解决了问题。当然,有一些工具可以辅助分析内存的使用情况,难道说,我不知道这些软件或者不用这些软件就很Low吗?你知道这些软件就很牛叉吗?
    我们作为程序员,应该有更加主观清晰健康的思维来分析问题,然后做正确的事情。当你在炫耀一个软件时,说不定对方就参与开发了这个软件呢。
    好了,言归正传。Spy的英文单词的意思是间谍的意思,也就是可以探知一些普通人无法捕捉到的信息。普通人看一个人,就只是看到他最表面的信息,而间谍则可以捕捉更多信息、分析,得到更加深入的信息。如果看到一个人拎着包,普通人只是看到这个包的外观和品牌而已,最多延伸到价格等等。而间谍则可能通过包的外观和品牌分析到这个人的性格人品和品味,结合走路时的情况分析出他的社会地位等等。
    上面这一段的描述,是帮助你从生活中的印象来理解这个软件的用途。Spy++就是这样一个分析软件的间谍。通过界面的元素,Spy++就可以分析很多信息,具体有些什么信息,后面我们会了解到。
    那么Spy++从哪里来呢?是不是要下载?
    Spy++在微软提供的IDE中就默认安装了。VC6.0、VS系列IDE都附带了这个工具。然而用过的人并不多,至少基本上新手都没有用过。所以,只要你安装了VS或VC6.0,这个工具就已经存在于你的电脑了。

    win7安装的Vs2010在“所有程序”下的“Microsoft Visual Studio ”的“Visual Studio Tools”下,然后看到一个间谍头像的图标,就是Spy++了。

Spy++所在的位置

【Spy++所在的位置】
    怎么来的,能干什么基本有所了解了。下面就看看怎么用,也能够知道具体Spy++能干什么。

    启动Spy++软件,主界面如下:

Spy++主界面

【Spy++主界面】
    软件的菜单有“监视”和“搜索”,这两个基本就是核心功能了。软件客户区的子窗口列出了所有窗口的树状结构,根窗口为桌面窗口,就是我们通常说的桌面。仔细查看这个树状结构,可以对Windows窗口结构有一个深刻的了解哦。从这里也就能够体会到软件能够辅助我们学习哦。具体的窗口结构不是本文的焦点,你有兴趣可以仔细看看。
    监视作为Spy++最核心的功能,包含了窗口监视、进程监视、线程监视和消息监视。这几个功能对于学习了相关知识的人来说,不难理解。我不打算在这里细讲,主要是告诉你这个软件能做什么,而且具体怎么操作,慢慢玩就是了。

    对于进程和线程来说,是后台的东西,所以点开监视就可以列出当前的列表。在进程列表中,展开一个进程可以看到这个进程的所有线程,右击后单击“属性”,可以看到相关信息。右击后单击“消息”,可以弹出一个监视这个线程消息的窗口,不停的滚动显示当前线程的消息。当然,这个线程必须是UI线程,因为工作线程没有消息。如果是工作线程,监视窗口将是一片空白哦。UI线程子级会显示关联的窗口。如果是含有编辑框输入的窗口,通常会被输入法注入,因此也可以在这个UI线程看到输入法注入后显示的输入法窗口哦。输入法就是依赖于其他窗口而存在的,只有注入到其他进程去了,才能操作这个进程的窗口,才能输入文字。如果某一个进程禁止输入法输入,那么输入法就失效了。通常很多金融软件为了安全,禁止其他输入法输入,而使用自己的输入法输入。

QQ拼音输入法注入了记事本进程

【QQ拼音输入法注入了记事本进程】

    然后在UI线程下的窗口列表中右击,查看属性,可以看到窗口的所有相关信息,如窗口所在的进程线程ID、使用的窗口类、父子窗口关系、拥有者关系、窗口风格等等信息。这个Spy++让你对运行的进程、线程的窗口的所有信息一览无余了。
    通过分析可以知道,Spy++重点不是在进程和线程,而是在窗口信息部分。不过进程线程的基本信息也都可以看到。如果要深入分析进程线程的信息,还需要借助其他软件。
    所以说,Spy++对于学习Windows编程是非常不错的辅助软件。但不是说,你用了这个软件就很厉害,因为你可能看不懂软件列出的所有信息。这个需要好好学习,在C++技术网的Windows零基础入门教程中,可以给你一个强有力的支持。
    既然Spy++的重点是窗口,所以还有额外的查找窗口的功能,可以快速了解窗口的功能。这就是查找窗口。前面打开窗口显示的是所有窗口列表,如果我们只是想快速确定一个窗口的信息,可以使用“查找窗口”和“搜索窗口”。
    窗口搜索主要是确定窗口的句柄,得到的句柄可以用来操作窗口。而查找窗口则主要显示窗口的样式等信息,当然也有句柄信息。界面和操作基本上一样。

    下面是窗口搜索的界面:

Spy++窗口搜索界面

【Spy++窗口搜索界面】
    在菜单的“搜索”、工具栏的两个图标(图中标注1和2)可以打开这两个窗口。然后在图中标注的2点击圆形图标,鼠标左键按住拖动到要查看信息的窗口上,即可实时显示不同的信息。移动鼠标到窗口的不同位置,可以查看不同的控件的窗口信息。如果想在跟踪窗口信息时将Spy++窗口关闭,勾选上图中标注的4复选框。

    那么说到这里,Spy++的基本使用也就差不多了,剩下的就看你自己的实际操作了。我们尝试跟踪了一下Windows的文件管理器的驱动器列表,在文件管理器上出现一个粗框,如下图所示:

Spy++跟踪文件管理器

【Spy++跟踪文件管理器】

    然后看到,Spy++显示的窗口信息是:

Windows文件资源管理器的列表信息

【Windows文件资源管理器的列表信息】
    Windows文件资源管理器的驱动器列表的窗口类是:DirectUIHWND。我们会发现跟踪的时候没法对列表中的每一个进行跟踪,问题就是这里使用了DirectUI技术哦。
    那么最后要解释一下DirectUI技术。我们可以看到,窗口的结构可以通过Spy++了解的一清二楚,就可以方便破解逆向分析软件了。所以很多软件就采用DirectUI技术,中文意识就是直接绘制的UI,UI上的所有东西都直接画出来,而不是用控件组合成的。这样既好看又不能被跟踪了。其实Windows早就用DirectUI技术了,从Vista系统推出,就已经在系统用了,然而DirectUI技术在国内的普及,却很晚。现在做界面,基本都是用DirectUI做,个性安全。而且也有很多DirectUI框架可以方便开发,之前流行一个Duilib的开源免费Windows轻量级的UI库,是一个人维护的,后来被用烂了,作者都不再维护了,不过做Windows界面的公司还在要求这个技术。
    那么从跟踪窗口到DirectUI技术的全面介绍,就差不多了。更多技术细节,请学习相关书籍或者在C++技术网阅读相关文章。