軟件保護(hù)之殺死Crack相關(guān)進(jìn)程
屠恩海(SunHai)
開發(fā)工具:Microsoft Visual Studio .NET 2003 操作系統(tǒng):Windows XP
程序開發(fā)三個(gè)永恒的主題是: 一.程序的功能及創(chuàng)意 二.程序的推廣 三.程序的保護(hù) 理論上說,不存在不能被Crack的程序。所謂的防Crack,只是增加Crack的難度而已。
用Process類管理進(jìn)程
Process 類提供對(duì)本地和遠(yuǎn)程進(jìn)程的訪問并使您能夠啟動(dòng)和停止本地系統(tǒng)進(jìn)程。
Process 組件提供對(duì)正在計(jì)算機(jī)上運(yùn)行的進(jìn)程的訪問。用最簡(jiǎn)短的話來說,進(jìn)程就是當(dāng)前運(yùn)行的應(yīng)用程序。線程是操作系統(tǒng)向其分配處理器時(shí)間的基本單位。線程可執(zhí)行進(jìn)程的任何一部分代碼,包括當(dāng)前由另一線程執(zhí)行的部分。
對(duì)于啟動(dòng)、停止、控制和監(jiān)視應(yīng)用程序等任務(wù), Process 組件是很有用的工具。使用 Process 組件,可以獲取當(dāng)前運(yùn)行的進(jìn)程的列表,或者啟動(dòng)新的進(jìn)程。 Process 組件用于訪問系統(tǒng)進(jìn)程。初始化 Process 組件后,可使用該組件來獲取有關(guān)當(dāng)前運(yùn)行的進(jìn)程的信息。此類信息包括線程集、加載的模塊(.dll 和 .exe 文件)和性能信息(如進(jìn)程當(dāng)前使用的內(nèi)存量)。
如果在系統(tǒng)中用引號(hào)聲明了一個(gè)路徑變量,則在啟動(dòng)該位置中的任何進(jìn)程時(shí),必須完全限定該路徑。否則,系統(tǒng)將找不到該路徑。例如,如果 c:\mypath 不在您的路徑中,而您使用引號(hào)添加它( path = %path%;"c:\mypath" ),則在啟動(dòng) c:\mypath 中的任何進(jìn)程時(shí),您必須完全限定它們。
進(jìn)程組件同時(shí)獲取有關(guān)一組屬性的信息。 Process 組件獲取有關(guān)任一組的一個(gè)成員的信息后,它將緩存該組中其他屬性的值,并且在您調(diào)用 Refresh 方法之前,不獲取有關(guān)該組中其他成員的新信息。因此,不保證屬性值比對(duì) Refresh 方法的最后一次調(diào)用更新。組細(xì)分與操作系統(tǒng)有關(guān)。
系統(tǒng)進(jìn)程在系統(tǒng)上由其進(jìn)程標(biāo)識(shí)符唯一標(biāo)識(shí)。與許多 Windows 資源一樣,進(jìn)程也由其句柄標(biāo)識(shí),而句柄在計(jì)算機(jī)上可能不唯一。句柄是表示資源標(biāo)識(shí)符的一般術(shù)語。即使進(jìn)程已退出,操作系統(tǒng)仍保持進(jìn)程句柄,該句柄通過 Process 組件的 Handle 屬性訪問。因此,可以獲取進(jìn)程的管理信息,如 ExitCode (通常,或者為零表示成功,或者為非零錯(cuò)誤代碼)和 ExitTime 。句柄是非常有價(jià)值的資源,所以句柄泄漏比內(nèi)存泄漏危害更大。
自動(dòng)停止Crack有關(guān)進(jìn)程
我們可用Process 類檢測(cè)進(jìn)程,發(fā)現(xiàn)Crack有關(guān)進(jìn)程,即作出相應(yīng)措施。比如停止Crack相關(guān)進(jìn)程,退出軟件,給出警告,把正式版變?yōu)樵囉冒妗憧刹灰嬖V我你會(huì)調(diào)用Format D:)。
可通過兩種方法利用 Process 組件停止進(jìn)程。使用哪種方法取決于所停止的進(jìn)程的類型:
如果進(jìn)程有圖形用戶界面,則調(diào)用 CloseMainWindow 方法。該方法向進(jìn)程的主窗口發(fā)送一個(gè)關(guān)閉請(qǐng)求,其行為與從用戶界面中選擇“關(guān)閉”命令相同。使用該方法使目標(biāo)程序有機(jī)會(huì)在清除操作中提示用戶保存任何沒有保存的數(shù)據(jù)。 如果進(jìn)程沒有用戶界面,則調(diào)用 Kill 方法。 警告 調(diào)用 Kill 方法將在不提示保存更改的數(shù)據(jù)的情況下,立即停止進(jìn)程。任何沒有保存的數(shù)據(jù)將丟失。 我把Crack相關(guān)進(jìn)程分為四類: 反編譯 跟蹤調(diào)試 監(jiān)視 其他
只有真正的Crack高手才真正懂得如何防Crack。我們首先要知道常見的Crack相關(guān)軟件及其進(jìn)程名,特別是.Net下的Crack相關(guān)軟件。我并不懂Crack,這里只列出我所掌握的一些情況,希望大家一起來補(bǔ)充完善。
這里主要用到 Process.MainWindowTitle 屬性獲取進(jìn)程的主窗口標(biāo)題。
[Visual Basic] Public ReadOnly Property MainWindowTitle As String 僅當(dāng)進(jìn)程有圖形界面時(shí),該進(jìn)程才具有與其關(guān)聯(lián)的主窗口。如果關(guān)聯(lián)進(jìn)程沒有主窗口(因而 MainWindowHandle 為零),則 MainWindowTitle 為空字符串 ("")。如果剛啟動(dòng)了一個(gè)進(jìn)程,并且想使用其主窗口標(biāo)題,則請(qǐng)考慮使用 WaitForInputIdle 方法讓進(jìn)程完成啟動(dòng),從而確保創(chuàng)建了主窗口句柄。否則,系統(tǒng)將引發(fā)異常。 Windows 98 平臺(tái)說明: 如果在啟動(dòng)進(jìn)程時(shí) ProcessStartInfo.UseShellExecute 設(shè)置為 true ,則此屬性在此平臺(tái)上不可用。
Private Sub close()
Dim pProcess() As Process pProcess = Process.GetProcesses() '獲取當(dāng)前所有進(jìn)程 Dim All As Integer Dim myArray() As String = _ {"Assembly View", "Anakrino", "Borg", "PEBrowse", "ProcessDasm", "VirtualCode", "Dasm", "IDA", _ "FrogsICE", "DriverWorkbench", "OllyDbg", "twx", "TRW", "SoftICE", "NTICE", "SICE", _ "API Monitor", "ApiHooks", "APIS", "API-Log", "APISpy", "ExeSpy", "File Monitor", "RegistryMonitor", "MemoryMonitor", "Regmon", "Regshot", "RegSnap", "RegSpy", "Res Spy", _ "crack", "破解", "sn", "SN"}
For All = 0 To pProcess.Length() - 1 For Kill As Integer = 0 To myArray.Length - 1 If InStr(pProcess(All).MainWindowTitle, myArray(Kill).ToString) Then pProcess(All).Kill() '殺死Crack相關(guān)進(jìn)程 End '退出軟件。這里你還可以加上其他措施 'MsgBox(pProcess(All).MainWindowTitle) End If Next Next
|