程式本身有辦法「自殺」嗎? |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
引言: 最近在寫一個保護的程式,保護的方法不外乎是序號檢查、CheckSum 等等,而我在想,一個正在執行中的程式,可以「自殺」嗎? 例如,發現程式已遭修改時,可以自行刪除自己嗎? 如果不能刪除,那可以破壞嗎? 一般在執行中的程式,由外部的程式要刪除時就會有 Exception... 不過,病毒不是可以感染執行檔嗎?病毒都只有在程式載入前就感染嗎?正在執行中的程式,可以「自殺」嗎? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 小弟不才我認為...應該是不行地...
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 最近在寫一個保護的程式,保護的方法不外乎是序號檢查、CheckSum 等等,而我在想,一個正在執行中的程式,可以「自殺」嗎? 例如,發現程式已遭修改時,可以自行刪除自己嗎? 如果不能刪除,那可以破壞嗎? 一般在執行中的程式,由外部的程式要刪除時就會有 Exception... 不過,病毒不是可以感染執行檔嗎?病毒都只有在程式載入前就感染嗎?兩個另外的方法: 1.殺資料 2.設一個Registry Code,程式執行時檢查此Code,若錯誤就不執行! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
Jungle
一般會員 發表:5 回覆:18 積分:9 註冊:2002-03-18 發送簡訊給我 |
以一是我的想法, 尚未測試過, 希望能幫助您
1.首先先在系統裡定義系統的類別名稱(ClassName), 強迫關閉訊息及強迫關閉程式
const
CM_APCLOSE = WM_USER + $1000; {自定義的“強迫關閉”消息} //設定ClassName
procedure TFMAIN.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := 'ApName';
end; //強迫關閉
Procedure APClose(var message: TMessage); message CM_APCLOSE; procedure TFMAIN.APClose(var message: TMessage);
begin
Close;
end; 2.另外寫一支自殺程式, 由系統來呼叫, 並傳入系統之類別名稱及系統相關訊息(如:執行檔名稱, 所在路徑) 3.自殺程式, 先取得系統的Handle, 再傳自定的"強迫關閉"訊息給它
RvHandle := FindWindow(APClassName, NIL);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_APCLOSE, 0, 0);
end; 4.依系統傳進來的執行檔名及路徑來殺檔
//只刪除系統執行檔
DeleteFile(路徑+執行檔); //刪除所有檔案
FileAttrs := faAnyfile - faDirectory;
HasFiles := FindFirst(路徑+ '\*.*', FileAttrs, sr) = 0;
while HasFiles do
begin
if not DeleteFile(路徑+ '\' + sr.Name) then
begin
Exit;
end;
HasFiles := FindNext(sr) = 0;
end;
//刪除目錄
RemoveDir(路徑);
引言: 最近在寫一個保護的程式,保護的方法不外乎是序號檢查、CheckSum 等等,而我在想,一個正在執行中的程式,可以「自殺」嗎? 例如,發現程式已遭修改時,可以自行刪除自己嗎? 如果不能刪除,那可以破壞嗎? 一般在執行中的程式,由外部的程式要刪除時就會有 Exception... 不過,病毒不是可以感染執行檔嗎?病毒都只有在程式載入前就感染嗎? |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 以一是我的想法, 尚未測試過, 希望能幫助您 1.首先先在系統裡定義系統的類別名稱(ClassName), 強迫關閉訊息及強迫關閉程式 2.另外寫一支自殺程式, 由系統來呼叫, 並傳入系統之類別名稱及系統相關訊息(如:執行檔名稱, 所在路徑) 3.自殺程式, 先取得系統的Handle, 再傳自定的"強迫關閉"訊息給它 4.依系統傳進來的執行檔名及路徑來殺檔謝謝,我會試試看的, 目前我的想法可能是整合 Jungle 及站長的方法: 1. 另寫一個清除程式 2. 判斷出狀態將自殺訊息加到 registry 後,程式結束 3. 再重開機時由清除程式清除 在此有一個小問題,不知道有沒有人寫過類似像我們在更新 DirectX 或是一些 driver 時,必需重新開機,而且重新開機進入 windows 前,由 DOS 的訊息可以看到 「系統正在更新XXXX.....」 「更新完畢」 等字樣,我想這些更新應該也是由一個程式來完成的,只是不知道它是在那執行的呢?是在 reg 或是 win/system.ini ? 有人有經驗嗎?
------
http://www.ViewMove.com |
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |