六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

談"黑洞2001"殺防火墻的完成與對策

[摘要]談"黑洞2001"殺防火墻的實現與對策 "黑洞2001"是今年1月份推出的國產遠程管理工具,相對其它遠程管理工具,它添加了個很有吸引力的功能:進程管家.它有...

談"黑洞2001"殺防火墻的實現與對策

"黑洞2001"是今年1月份推出的國產遠程管理工具,相對其它遠程管理工具,它添加了個很有吸引力的功能:進程管家.它有什么用呢?在這里引述一下吳建蓉的論述:"多進程監控功能是干什么用的呢?原來隨著大家安全意識的不斷提高, 大多數人都安裝了防火墻, 木馬們的生存空間越來越小, 為生存計, 木馬開發者想出了一個辦法, 他讓木馬服務端定時刷新進程, 如果發現其中的進程名稱與其事先定義好的相符合, 就將這個進程關閉, 如果這個被關閉的進程恰巧就是防火墻, 那你的網絡大門就完全敞開了, 監控端就可為所欲為了。 事實上這個功能就是針對防火墻出現的, 一切堡壘都是從內部被攻破的在此得到了充分的體現。 其實在黑洞2000中就有了這樣的功能, 只不過黑洞2000只能關閉天網防火墻, 對其它防火墻沒有任何作用。 黑洞2001則可以欲定義長達99個英文字符號, 完全可以將您可能會用到的防火墻都定義到其中, 從而可將這些防火墻全部關閉!"(原文見http://www.yesky.com/20010719/189602.shtml)現在有些木馬也具有這個功能了,但是"黑洞"是第一個首先提出和實現這一功能的軟件.

  實際上,作者當初添加這個功能是為了方便監控一些有害的軟件.大家可以在服務端默認的配置看出來,它以前是監控"有害軟件,黃色軟件"的.不過后來被人誤用了而已.

  俗話說:"假傳萬卷書,真傳一句話".看起來最復雜最強大的東西,它的原理往往卻是最簡單的.愛因思坦的質能方程式也只不過是簡單的E=MC2.其實"黑洞"這個看似很神奇的功能,只不過是用了一個API函數PostMessage(窗口句柄, WM_Quit, 0, 0);而已.

  在Windows系統中,每個可執行文件在運行時不僅有進程ID,還存在一個窗口名.一般來說,如果一個程序運行時在任務欄有個圖標,你把鼠標移動到那里出現的提示就是該程序的窗口名.即使程序是隱藏運行,它的窗口名還是存在的,只不過你看不見而已.我們只要找到一個程序的窗口句柄,然后發送一個消息WM_Quit給它就會把它無條件關閉了.那么如何找到那個叫"句柄"的東西呢?Windows提供了一個API函數FindWindow來通過窗口名返回窗口句柄.比如說你想查找一個窗口名為"有害軟件"的句柄,則可以用以下語句:

Var

Exehandle: Thandle;

begin

ExeHandle := FindWindow(Nil, '有害軟件');

if ExeHandle <> 0 then Showmessage('找到該軟件,句柄為'+InttoStr(Exehandle));

end;

  現在問題簡單了吧.只要看看系統現在運行的所有窗口名稱,然后和我們需要關閉的作比較,如果條件符合的就Kill了它.查找當前系統運行的所有窗口名稱可以通過遞歸實現.我們可以寫出下面的一個函數.

Function My_RefreshForm(MyStringList:TStringList):Boolean;

var

hCurrentWindow: HWnd;

szText: array[0..254] of char;

begin

MyStringList.Clear;

hCurrentWindow := GetWindow(application.Handle, GW_HWNDFIRST);

while hCurrentWindow <> 0 do

begin

if GetWindowText(hCurrentWindow, @szText, 255) > 0 then

MyStringList.Add(StrPas(@szText));

hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);

end;

Result:=true;

end;

  我們來試試調用這個函數看看.運行Delphi新建一個工程,放上一個ListBox控件和一個按鈕Button1,在它的OnClick事件寫代碼:

procedure TForm1.Button1Click(Sender: TObject);

Var

FormStrings:TStringList;

begin

FormStrings:=TStringList.Create;

My_RefreshForm(FormStrings);

ListBox1.Items:=FormStrings;

FormStrings.Free;

end;

  然后運行這個程序,點擊Button1就會在ListBox1列出系統現在的所有窗口名.你會發現有一些很奇怪的操作系統本身運行的程序---但是你自己在Windows任務列表中卻看不到它.有了上面這兩個函數,我們就可以叫它Quit了.我們再來寫個函數吧:

Procedure My_KillForm(S: String);

Var

Exehandle: Thandle;

begin

ExeHandle := FindWindow(nil, Pchar(S));

if ExeHandle <> 0 then

PostMessage(ExeHandle, WM_Quit, 0, 0);

end;

  我們在程序中要殺死那個"有害軟件",那么可以先用My_RefreshForm函數列出所有窗口名稱,然后一個一個和"有害軟件"這個窗口名作比較,如果條件符合就使用My_KillForm('有害軟件')把它給關了.至于象"黑洞2001"那樣做到"模糊設置",相信大家很快就可以寫出來,這里就不再多講了.

  知道了它的原理后,那么我們如何來防范它呢?比如說我的軟件是個殺毒防火墻,如何不讓它給Kill了呢?一個程序如果沒有窗口名不就可以了嗎?呵呵,問題是Windows不讓你那么做.比如說Delphi做的程序窗口名就是Application的Title,如果你不設置它那么Windows系統就會把該程序主窗口的標題當作該程序的窗口名.其實,我們可以這樣:就是定時隨機改變自己的窗口名,這樣一來它確定不了你的窗口名就那你沒轍了:)

Procedure RandomChangeTitle;

begin

Application.Title := Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65)

+Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65);

Application.name := Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65)

+Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65);

end;

  你可以在自己的程序中用個Timer控件定時調用該函數,或者比如說你的程序是個Socket通訊程序,就可以在OnClientSocket1Read調用它.最后,說句題外話:如果你想成為一個優秀的程序員,那么培養自己那種不鉆牛角尖的思維習慣是很重要的.世界上很多問題的答案不只有一個,而我們要做的就是找出最簡單的那個.很多人特別是那些數學思維比較強的人,一拿到程序就寫,雖然算法很好,程序結構也很清晰,但是卻走了彎路.我認識很多名校的學生,他們數學很好,但是往往把一個很簡單的問題想的復雜化.記得有一次國際奧林匹克數學競賽,有一道填空題:一個小時內時針和分針重合幾次,中國學生馬上列方程來解,美國學生則取下自己的手表拔了一圈就寫出了答案.也許,只關心算法是程序員和優秀程序員的區別吧.因為,程序,不僅僅是算法!

★作者:

陳經韜


上面是電腦上網安全的一些基礎常識,學習了安全知識,幾乎可以讓你免費電腦中毒的煩擾。




主站蜘蛛池模板: 亚洲激情欧美 | 香蕉视频一区 | 中文国产成人久久精品小说 | 在线观看成年视频 | 日本久操 | 欧美综合久久 | 天天插天天操天天射 | 外国毛片网站 | 日本乱人伦片中文字幕三区 | 午夜影视在线 | 午夜精品久久久久久久99 | 青草国产在线视频 | 亚洲欧美婷婷 | 日韩欧美系列 | 三级黄色在线视频中文 | 一级做性色a爰片久久毛片 一级做受视频免费是看美女 | 欧美亚洲网 | 色第一页| 日本一道在线观看 | 日韩禁片 | 日韩国产中文字幕 | 在线免费色 | 日日噜噜夜夜狠狠视频欧美人 | 欧美透逼视频 | 日本一区二区不卡视频 | 亚洲精品15p| 亚洲福利视频网站 | 天堂伦理片 | 青青青免费观看在线视频网站 | 亚洲成人99 | 日本成片免费高清 | 青青草99热这里都是精品 | 天天综合天天添夜夜添狠狠添 | 天天干天天爱天天射 | 伊人久久大香线蕉综合影 | 日本亚洲一区二区三区 | 中文字幕网资源站永久资源 | 欧美笫一页 | 最好韩国日本高清 | 日韩欧美色视频在线观看 | 午夜三级成人三级 |