軟件保護(hù)之殺死Crack相關(guān)進(jìn)程
發(fā)表時間:2023-08-01 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]軟件保護(hù)之殺死Crack相關(guān)進(jìn)程 屠恩海(SunHai) 開發(fā)工具:Microsoft Visual Studio .NET 2003 操作系統(tǒng):Wind...
軟件保護(hù)之殺死Crack相關(guān)進(jìn)程
屠恩海(SunHai)
開發(fā)工具:Microsoft Visual Studio .NET 2003
操作系統(tǒng):Windows XP
程序開發(fā)三個永恒的主題是:
一.程序的功能及創(chuàng)意
二.程序的推廣
三.程序的保護(hù)
理論上說,不存在不能被Crack的程序。所謂的防Crack,只是增加Crack的難度而已。
用Process類管理進(jìn)程
Process 類提供對本地和遠(yuǎn)程進(jìn)程的訪問并使您能夠啟動和停止本地系統(tǒng)進(jìn)程。
Process 組件提供對正在計算機上運行的進(jìn)程的訪問。用最簡短的話來說,進(jìn)程就是當(dāng)前運行的應(yīng)用程序。線程是操作系統(tǒng)向其分配處理器時間的基本單位。線程可執(zhí)行進(jìn)程的任何一部分代碼,包括當(dāng)前由另一線程執(zhí)行的部分。
對于啟動、停止、控制和監(jiān)視應(yīng)用程序等任務(wù), Process 組件是很有用的工具。使用 Process 組件,可以獲取當(dāng)前運行的進(jìn)程的列表,或者啟動新的進(jìn)程。 Process 組件用于訪問系統(tǒng)進(jìn)程。初始化 Process 組件后,可使用該組件來獲取有關(guān)當(dāng)前運行的進(jìn)程的信息。此類信息包括線程集、加載的模塊(.dll 和 .exe 文件)和性能信息(如進(jìn)程當(dāng)前使用的內(nèi)存量)。
如果在系統(tǒng)中用引號聲明了一個路徑變量,則在啟動該位置中的任何進(jìn)程時,必須完全限定該路徑。否則,系統(tǒng)將找不到該路徑。例如,如果 c:\mypath 不在您的路徑中,而您使用引號添加它( path = %path%;"c:\mypath" ),則在啟動 c:\mypath 中的任何進(jìn)程時,您必須完全限定它們。
進(jìn)程組件同時獲取有關(guān)一組屬性的信息。 Process 組件獲取有關(guān)任一組的一個成員的信息后,它將緩存該組中其他屬性的值,并且在您調(diào)用 Refresh 方法之前,不獲取有關(guān)該組中其他成員的新信息。因此,不保證屬性值比對 Refresh 方法的最后一次調(diào)用更新。組細(xì)分與操作系統(tǒng)有關(guān)。
系統(tǒng)進(jìn)程在系統(tǒng)上由其進(jìn)程標(biāo)識符唯一標(biāo)識。與許多 Windows 資源一樣,進(jìn)程也由其句柄標(biāo)識,而句柄在計算機上可能不唯一。句柄是表示資源標(biāo)識符的一般術(shù)語。即使進(jìn)程已退出,操作系統(tǒng)仍保持進(jìn)程句柄,該句柄通過 Process 組件的 Handle 屬性訪問。因此,可以獲取進(jìn)程的管理信息,如 ExitCode (通常,或者為零表示成功,或者為非零錯誤代碼)和 ExitTime 。句柄是非常有價值的資源,所以句柄泄漏比內(nèi)存泄漏危害更大。
自動停止Crack有關(guān)進(jìn)程
我們可用Process 類檢測進(jìn)程,發(fā)現(xiàn)Crack有關(guān)進(jìn)程,即作出相應(yīng)措施。比如停止Crack相關(guān)進(jìn)程,退出軟件,給出警告,把正式版變?yōu)樵囉冒妗憧刹灰嬖V我你會調(diào)用Format D:)。
可通過兩種方法利用 Process 組件停止進(jìn)程。使用哪種方法取決于所停止的進(jìn)程的類型:
如果進(jìn)程有圖形用戶界面,則調(diào)用 CloseMainWindow 方法。該方法向進(jìn)程的主窗口發(fā)送一個關(guān)閉請求,其行為與從用戶界面中選擇“關(guān)閉”命令相同。使用該方法使目標(biāo)程序有機會在清除操作中提示用戶保存任何沒有保存的數(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,這里只列出我所掌握的一些情況,希望大家一起來補充完善。
這里主要用到 Process.MainWindowTitle 屬性獲取進(jìn)程的主窗口標(biāo)題。
[Visual Basic] Public ReadOnly Property MainWindowTitle As String
僅當(dāng)進(jìn)程有圖形界面時,該進(jìn)程才具有與其關(guān)聯(lián)的主窗口。如果關(guān)聯(lián)進(jìn)程沒有主窗口(因而 MainWindowHandle 為零),則 MainWindowTitle 為空字符串 ("")。如果剛啟動了一個進(jìn)程,并且想使用其主窗口標(biāo)題,則請考慮使用 WaitForInputIdle 方法讓進(jìn)程完成啟動,從而確保創(chuàng)建了主窗口句柄。否則,系統(tǒng)將引發(fā)異常。
Windows 98 平臺說明: 如果在啟動進(jìn)程時 ProcessStartInfo.UseShellExecute 設(shè)置為 true ,則此屬性在此平臺上不可用。
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