.Net远程注入,包括一些窗口属性,进程类型判断,注入等功能
1. SuperSpy.exe 主程序,可用于探测、操作窗口,判断进程类型等,并提供插件注入的入口(C#开发)
2. Invoke2.dll 实现基于CLR2的插件注入(C++/CLI开发)
3. Invoke4.dll 实现基于CLR4的插件注入(C++/CLI开发)
4. PropertyControl 插件,用于操作WinForm窗口(VB.NET开发)
5. PropertyControlForWPF 插件,专用于WPF的属性编辑器(C#开发)
6. SuperSpy.exe.config 用于CLR版本控制 (XML格式的纯文本文件)
我自已实现的插件的功能是:查询和编辑一个托管程序中所有窗口(包括控件)的属性,这是一个很强大的功能,我举两个例子:
1. 星号密码查看。由于已经注入,本来显示为星号的密码,可以直接通过Text属性获得
2. 灰色按扭突破。只需将窗口的Enabled属性设置成true即可
以往要实现这两个功能,都需要分别编写相关的程序,而现在仅仅是这个插件的一个简单应用。而且,你可以编写自己的插件,来实现自己的要求。
我在示例程序中只给出了程序,没有给出源代码,因为核心思路我已经说得非常明白了,如果你确实需要源代码,请给我来信。
启动软件后,可以在标题栏看到当前程序的运行时,你可以使用右边的“切换到CLR“按钮来切换到另一个运行时(也可以自己在.config文件中配置)
首先拖拽“窗口探测器“的小图标到你希望探测的窗口,这时候程序会用反色来描绘探测到的窗口的边框(在Win7中,由于主窗口的边框是透明的,这个效果不明显,但是子控件还是比较明显的),同时,相应的文本框会显示对应的信息。比较有用的功能是:
1. 禁用/取消禁用窗口,这相当于“灰色按钮突破器”,有的软件没注册,某些功能就灰掉而无法使用,可以通过这个功能来解除该限制(仅用于Win32程序,.Net程序请使用插件PropertyControl来实现同样的功能)
2. 置顶/取消置顶窗口
3. 修改标题
4. 结束进程 可用于替代任务管理器的相关功能(如果程序没有窗口,需要手动填写进程ID)
5. 进程类型判断 这是一个十分有用的功能,一般我们判断程序的类型用的静态方法,也就是基于文件的方法,比如PEID,Reflector等,但是如果程序加了壳,判断往往不准确;该方法是基于进程的,比较准确,一共支持三种类型:非托管进程/CLR2/CL4(如果显示的是CLR2或CLR4,说明是.NET程序) 。请注意,我这里使用的是“CLR”,而不是“.Net“,实际上.Net 2.0/3.0/3.5的内核都是CLR2.0
6. 开发语言判断:通过窗口的类名,可以“推测”软件的开发语言,比如如果类名是”Button”,”Static”这样非常简单、规范的名称,一般是C/C++程序;如果类名含有一个T前缀,比如”TButton”,”TTextBox”,一般是Delphi程序;如果类名含有一个ThunderR6前缀,一般是VB开发的
7. 功能模块判断 :有的时候你需要知道某个窗口是哪一个dll编写的,可以在“模块中看到”,如截图中的模块是MSVBVM60.dll,通过这个名称,你也应该知道,目标程序是一个VB程序,上面的类名也正好说明了这一点
8. 远程注入 这是该软件的最大亮点,可以支持插件,从而实现丰富的功能。只要遵循插件的规范,任何人都可以编写插件。
插件的规范是:
在任意一个类中定义如下成员:
Public static void Inject()//注入后要执行的函数
{
}
Public static string Desription//插件的描述
{
Get;
}
我本人为大家编写了两个插件,后面会讲到的。
另外,SuperSpy还提供了一个功能:
如果插件向SuperSpy的主窗口发送了一个ID号为2000,wParam为插件窗口句柄的消息,则SuperSpy会在探测到窗口后,向插件窗口发送ID号为2000,wParam为所探测的窗口句柄的消息。(你会注意到:在PropertyControl插件中,其本身并没有窗口探测功能,但是其可以利用SuperSpy的探测功能自动切换对应控件的属性;而在PropertyControlForWPF中,我并没有实现该功能,而是重写了一个窗口探测器)