直到后来一同事玩了一下,这样才开始知道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++最核心的功能,包含了窗口监视、进程监视、线程监视和消息监视。这几个功能对于学习了相关知识的人来说,不难理解。我不打算在这里细讲,主要是告诉你这个软件能做什么,而且具体怎么操作,慢慢玩就是了。
对于进程和线程来说,是后台的东西,所以点开监视就可以列出当前的列表。在进程列表中,展开一个进程可以看到这个进程的所有线程,右击后单击“属性”,可以看到相关信息。右击后单击“消息”,可以弹出一个监视这个线程消息的窗口,不停的滚动显示当前线程的消息。当然,这个线程必须是UI线程,因为工作线程没有消息。如果是工作线程,监视窗口将是一片空白哦。UI线程子级会显示关联的窗口。如果是含有编辑框输入的窗口,通常会被输入法注入,因此也可以在这个UI线程看到输入法注入后显示的输入法窗口哦。输入法就是依赖于其他窗口而存在的,只有注入到其他进程去了,才能操作这个进程的窗口,才能输入文字。如果某一个进程禁止输入法输入,那么输入法就失效了。通常很多金融软件为了安全,禁止其他输入法输入,而使用自己的输入法输入。
【QQ拼音输入法注入了记事本进程】
然后在UI线程下的窗口列表中右击,查看属性,可以看到窗口的所有相关信息,如窗口所在的进程线程ID、使用的窗口类、父子窗口关系、拥有者关系、窗口风格等等信息。这个Spy++让你对运行的进程、线程的窗口的所有信息一览无余了。通过分析可以知道,Spy++重点不是在进程和线程,而是在窗口信息部分。不过进程线程的基本信息也都可以看到。如果要深入分析进程线程的信息,还需要借助其他软件。
所以说,Spy++对于学习Windows编程是非常不错的辅助软件。但不是说,你用了这个软件就很厉害,因为你可能看不懂软件列出的所有信息。这个需要好好学习,在C++技术网的Windows零基础入门教程中,可以给你一个强有力的支持。
既然Spy++的重点是窗口,所以还有额外的查找窗口的功能,可以快速了解窗口的功能。这就是查找窗口。前面打开窗口显示的是所有窗口列表,如果我们只是想快速确定一个窗口的信息,可以使用“查找窗口”和“搜索窗口”。
窗口搜索主要是确定窗口的句柄,得到的句柄可以用来操作窗口。而查找窗口则主要显示窗口的样式等信息,当然也有句柄信息。界面和操作基本上一样。
下面是窗口搜索的界面:
那么说到这里,Spy++的基本使用也就差不多了,剩下的就看你自己的实际操作了。我们尝试跟踪了一下Windows的文件管理器的驱动器列表,在文件管理器上出现一个粗框,如下图所示:
然后看到,Spy++显示的窗口信息是:
那么最后要解释一下DirectUI技术。我们可以看到,窗口的结构可以通过Spy++了解的一清二楚,就可以方便破解逆向分析软件了。所以很多软件就采用DirectUI技术,中文意识就是直接绘制的UI,UI上的所有东西都直接画出来,而不是用控件组合成的。这样既好看又不能被跟踪了。其实Windows早就用DirectUI技术了,从Vista系统推出,就已经在系统用了,然而DirectUI技术在国内的普及,却很晚。现在做界面,基本都是用DirectUI做,个性安全。而且也有很多DirectUI框架可以方便开发,之前流行一个Duilib的开源免费Windows轻量级的UI库,是一个人维护的,后来被用烂了,作者都不再维护了,不过做Windows界面的公司还在要求这个技术。
那么从跟踪窗口到DirectUI技术的全面介绍,就差不多了。更多技术细节,请学习相关书籍或者在C++技术网阅读相关文章。