{注意加載TlHelp32.pas單元}
procedureCheckParentProc;
var//檢查自己的進程的父進程
Pn:TProcesseNtry32;
sHandle:THandle;
H,ExplProc,ParentProc:Hwnd;
Found:Boolean;
Buffer:array[0..1023]ofChar;
Path:string;
begin
H:=0;
ExplProc:=0;
ParentProc:=0;
//得到Windows的目錄
SetString(Path,Buffer)
GetWindowsDirectory(Buffer,Sizeof(Buffer)-1));
Path:=UpperCase(Path)+'\EXPLORER.EXE';//得到Explorer的路徑
//得到所有進程的列表快照
sHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
Found:=Process32First(sHandle,Pn);//查找進程
whileFounddo//遍曆所有進程
begin
ifPn.szExeFile=ParamStr(0)then//自己的進程
begin
ParentProc:=Pn.th32ParentProcessID://得到父進程的進程ID
//父進程的句柄
H:=OpenProcess(PROCESS_ALL_ACCESS,True,Pn.th32ParentProcessID);
end
elseifUpperCase(Pn.szExeFile)=Paththen
ExplProc:=Pn.th32ProcessID;//Explorer的PID
Found:=Process32Next(sHandle,Pn);//查找下一個
end;
//父進程不是Explorer,是調試器......
ifParentProc<>ExplProcthen
begin
TerminateProcess(H,0);//殺之!除之而後快也!:)
//你還可以加上其它什麼死機代碼來消遣消遣這位可愛的Cracker:)
end
end
你可以在Delphi或者VC中試試,這樣可以把Delphi和VC殺掉了,因為你現在用的是Delphi和VC的內置調試器來運行你的程序。調試的時候你還是把它的注釋刪掉吧,發布時別忘記激活喲!
第四招:保護字符串
最後一個問題,這也是一個非常重要的問題:保護你的字符串!字符串在注冊模塊中非常重要!當一個富有經驗的Cracker破解你的軟件時,首先做的就是竊取你的字符串。比如他會輸入錯誤的注冊碼,得到你關於錯誤注冊碼的提示,通常是"無效的注冊碼,請重新輸入!"或者"Invalidkey(pleaseinputagain)"等等,然後用OllyDbg進行斷點調試或者用WinDASM、IDAPro等靜態分析工具在被他脫殼後的程序中查找那個字符串,找到後進行分析。因此,請一定加密你的字符串!使用時再臨時解密出來,而且要盡量少使用消息提示框,避免被Cracker找到漏洞。加密字符串不需要太複雜的算法,隨便找一個快速的對稱算法就可以了。
最後提醒大家一句,不要在加密上花太多的功夫!你應該把更多的時間和精力都用來完善你的軟件,這樣會更合算。借用一位前輩的話來忠告大家吧:花點時間考慮你自己的軟件,看看它是否值得保護?如果沒人用你的軟件,保護也就沒有意義了,不要過高估計你的軟件"對世界的重要性"!