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中,我并沒有實現該功能,而是重寫了一個窗口探測器)