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