軟件保護之殺死crack相關進程
屠恩海(sunhai)
開發工具:microsoft visual studio .net 2003
操作系統:windows xp
程序開發三個永恒的主題是:
一.程序的功能及創意
二.程序的推廣
三.程序的保護
理論上說,不存在不能被crack的程序。所謂的防crack,只是增加crack的難度而已。
用process類管理進程
process 類提供對本地和遠程進程的訪問并使您能夠啟動和停止本地系統進程。
process 組件提供對正在計算機上運行的進程的訪問。用最簡短的話來說,進程就是當前運行的應用程序。線程是操作系統向其分配處理器時間的基本單位。線程可執行進程的任何一部分代碼,包括當前由另一線程執行的部分。
對于啟動、停止、控制和監視應用程序等任務, process 組件是很有用的工具。使用 process 組件,可以獲取當前運行的進程的列表,或者啟動新的進程。 process 組件用于訪問系統進程。初始化 process 組件后,可使用該組件來獲取有關當前運行的進程的信息。此類信息包括線程集、加載的模塊(.dll 和 .exe 文件)和性能信息(如進程當前使用的內存量)。
如果在系統中用引號聲明了一個路徑變量,則在啟動該位置中的任何進程時,必須完全限定該路徑。否則,系統將找不到該路徑。例如,如果 c:/mypath 不在您的路徑中,而您使用引號添加它( path = %path%;"c:/mypath" ),則在啟動 c:/mypath 中的任何進程時,您必須完全限定它們。
進程組件同時獲取有關一組屬性的信息。 process 組件獲取有關任一組的一個成員的信息后,它將緩存該組中其他屬性的值,并且在您調用 refresh 方法之前,不獲取有關該組中其他成員的新信息。因此,不保證屬性值比對 refresh 方法的最后一次調用更新。組細分與操作系統有關。
系統進程在系統上由其進程標識符唯一標識。與許多 windows 資源一樣,進程也由其句柄標識,而句柄在計算機上可能不唯一。句柄是表示資源標識符的一般術語。即使進程已退出,操作系統仍保持進程句柄,該句柄通過 process 組件的 handle 屬性訪問。因此,可以獲取進程的管理信息,如 exitcode (通常,或者為零表示成功,或者為非零錯誤代碼)和 exittime 。句柄是非常有價值的資源,所以句柄泄漏比內存泄漏危害更大。
自動停止crack有關進程
我們可用process 類檢測進程,發現crack有關進程,即作出相應措施。比如停止crack相關進程,退出軟件,給出警告,把正式版變為試用版……(你可不要告訴我你會調用format d:)。
可通過兩種方法利用 process 組件停止進程。使用哪種方法取決于所停止的進程的類型:
如果進程有圖形用戶界面,則調用 closemainwindow 方法。該方法向進程的主窗口發送一個關閉請求,其行為與從用戶界面中選擇“關閉”命令相同。使用該方法使目標程序有機會在清除操作中提示用戶保存任何沒有保存的數據。
如果進程沒有用戶界面,則調用 kill 方法。 警告 調用 kill 方法將在不提示保存更改的數據的情況下,立即停止進程。任何沒有保存的數據將丟失。
我把crack相關進程分為四類:
反編譯
跟蹤調試
監視
其他
只有真正的crack高手才真正懂得如何防crack。我們首先要知道常見的crack相關軟件及其進程名,特別是.net下的crack相關軟件。我并不懂crack,這里只列出我所掌握的一些情況,希望大家一起來補充完善。
這里主要用到 process.mainwindowtitle 屬性獲取進程的主窗口標題。
[visual basic] public readonly property mainwindowtitle as string
僅當進程有圖形界面時,該進程才具有與其關聯的主窗口。如果關聯進程沒有主窗口(因而 mainwindowhandle 為零),則 mainwindowtitle 為空字符串 ("")。如果剛啟動了一個進程,并且想使用其主窗口標題,則請考慮使用 waitforinputidle 方法讓進程完成啟動,從而確保創建了主窗口句柄。否則,系統將引發異常。
windows 98 平臺說明: 如果在啟動進程時 processstartinfo.useshellexecute 設置為 true ,則此屬性在此平臺上不可用。
private sub close()
dim pprocess() as process
pprocess = process.getprocesses() '獲取當前所有進程
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相關進程
end '退出軟件。這里你還可以加上其他措施
'msgbox(pprocess(all).mainwindowtitle)
end if
next
next