金山毒霸引發(fā)系統(tǒng)崩潰問題技術(shù)分析
昨天晚上,金山論壇貼出一條公告:關(guān)于部分64位Windows 7/8用戶系統(tǒng)啟動異常的解決辦法http://bbs.duba.net/thread-23083105-1-1.html
金山公告里,并沒有提bug原因是什么。不過這次確實中招的很多,群里昨天就有人苦逼正加著班,中間重啟下電腦系統(tǒng)就進不去了。也幸虧這樣,金山偷偷摸摸更新驅(qū)動搞攤系統(tǒng)被抓了個現(xiàn)行。簡單分析下原因吧:
一、為什么開機時會進不去系統(tǒng),并提示0xC0000359錯誤
操作系統(tǒng)在加載BOOT型驅(qū)動文件時,會調(diào)用到winload.exe! ImgpLoadPEImage,這個函數(shù)會判斷IMAGE_NT_HEADERS. FileHeader. Machine的值
如果在64位系統(tǒng)上,Machine的值為IMAGE_FILE_MACHINE_I386(0x014c),則不加載,并返回c0000359
二、什么驅(qū)動惹得禍
Windows啟動管理器顯示的很清楚:windows\system32\drivers\KAVBootC.sys
進一步分析,金山毒霸有一個文件kdf.exe(md5: ecabc14be9008e79bee7696601927762,簽名時間2014-03-22 15:12:54),關(guān)機時改寫KAVBootC.sys服務(wù)的注冊表,沒有判斷操作系統(tǒng)是32位還是64位,就把該服務(wù)的文件統(tǒng)一寫成了\windows\system32\Drivers\KAVBootC.sys,導(dǎo)致64位機器上也會去加載32位的驅(qū)動程序,系統(tǒng)無法啟動;實際上,64位系統(tǒng)對應(yīng)的驅(qū)動文件名應(yīng)該是KAVBootC64.sys
在昨晚金山更新的版本里,kdf.exe對這個問題進行了修復(fù),加上了先判斷是32位系統(tǒng)還是64位系統(tǒng)的邏輯。(md5: 0ac5e33f91fb93c62d2db86b11446f76,簽名時間2014-03-22 18:12:05)
問問金山
你們軟件更新發(fā)布前不做測試的嗎?
之前跟微軟補丁沖突,金山還聲明說“微軟沒有對補丁做兼容性測試”,這次可是金山毒霸自己更新程序。這么明顯的bug,在64位機器上更新后只要關(guān)機或者重啟,100%必現(xiàn)系統(tǒng)無法啟動的情況,竟然就草率發(fā)布了。
根據(jù)我這邊一個數(shù)據(jù),X64的比例大概在10%。昨天金山事故時間段有三個小時,而且都在白天,估算占全天用戶量的15%-20%。按金山自己宣傳的上億用戶,就算周末只有一半人用電腦吧,至少也是5000w*10%*15%=75w臺電腦。難怪windows7貼吧昨天被刷屏。按某人說法,金山真成電腦維修商的好伙伴了。