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

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

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

★作者:

陳經韜


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




主站蜘蛛池模板: 宅男午夜视频在线观看 | 欧美一级视频免费观看 | 中文字幕精品亚洲无线码二区 | 伊人干综合网 | 一区二区三区欧美日韩 | 视频久久 | 亚洲日本高清 | 日韩免费在线观看 | 青青热久免费精品视频网站 | 色婷婷影院在线视频免费播放 | 日本无人区码卡1 | 搜索一级黄色片 | 欧美中文字幕一二三四区 | 欧美一块操| 亚洲永久免费视频 | 欧美影院在线观看在线观看看 | 天天久久综合网站 | 日本一道dvd在线播放 | 青青草原国产在线 | 日韩欧美极品 | 色综合久久综合中文小说 | 日本高清www视频在线观看 | 亚洲视频中文字幕在线观看 | 性盈盈影视院 | 日韩美女视频在线 | 青青青国产在线手机免费观看 | 四虎影视免费在线 | 综合热久久 | 欧美一区二区激情视频 | 色手机在线 | 青青草成人免费在线视频 | 日韩城人网 | 偷自视频区视频真实在线 | 色吧久久 | 日本美女高清在线观看免费 | 色欲香天天天综合网站 | 日韩免费不卡 | 中文字幕第一页亚洲 | 偷自视频视频区免费 | 无码精品一区二区三区免费视频 | 天天毛片 |