hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

9/30/2006

Scott Hanselman的工具百寶箱(2006版)

你如果曾留意過,就會發現凡是在江湖打混多年的IT老人,身邊總少不了一些順手的小工具。同樣一件複雜的瑣事,你只會老老實實地敲它數十下鍵盤、加上滑鼠又移又點,一陣手忙腳亂才把苦差事做完。同樣的事交給這些老江湖,他們就是有本事亮出一些不要錢的小程式,兩三個Click就做完你得花半個小時的苦工。再猛的是一些你束手無策的狀況: 網路問題、硬碟掛點、要抓圖、轉mp3之類的,就算有Google也要找上大半天,找到十來樣,也不知哪種最好用又不要錢,但老鳥們總是一出手就能拿出好用又不要錢的程式來... 如果有個人可以推薦各類應用領域的最佳工具,不知可以省掉多少無謂的摸索時間!

.NET Blog界的超人氣巨星: Scott Hanselman(你質疑Scott有何資格被尊稱為名人嗎? 算算他Blog首頁的FeedBurner訂閱人數吧!! 100萬人,夠紅吧!!)一直在維護一張推薦給Developer或Power User的無敵工具清單,2006年版在8月底公布了。快去看看你是否錯過什麼好東西吧!

我這裡以個人的實用經驗,為這份清單錦上添花,強力推薦其中幾個不能錯過的好東西:

* Lutz's Reflector: .NET程式的反組譯工具,看穿別人寫的.NET DLL/EXE只在彈指之間。
* Google Desktop: 簡直就是把Google引擎搬回家,查資料的速度像閃電。
* SysInternals工具組: 如能精通
ProcExplorer, FileMon, RegMon,就可以像駭客任務中的尼歐,把各式疑難雜症看成一串串流動的0與1,包你在公司變成救世主。
* Query Express: 跟Query Analyzer幾乎一樣的介面,但只需要一個100K的EXE檔,免安裝,還可以連SQL、ORACLE、OLE DB,對於一般性的SELECT、UPDATE,絕對綽綽有餘。長期被SQL Plus茶毒的人們,快來接受救贖吧~~
* fLogViewer: VB6寫的Log分析程式,可以用Regular Expression, LIKE條件等做簡單篩選。令人驚訝的是這隻VB6程式處理起大型的Log檔(近百MB),仍具有相當好的效率。
* Fiddler: 想知道為什麼瀏覽網站時會忽然HTTP 404,或是想確定該死的AJAX Code到底有沒跟後端連線? MS IE Team工程師寫的超強HTTP偵錯工具可以助你一臂之力。

最後狗尾續貂一下,再介紹兩個好東西:

* StarDict : Scott Hanselmen當然無法了解非英語系國家人們的痛處,閱讀生澀的英文文章時,好的即時英漢字典,會追隨你的滑鼠,滑到哪,翻譯到哪,這才是王道呀! 我知道講到這個,大家就會提到眼博士,但是有買版權的朋友請舉一下手給我看。不想昧著良心當海盜的人可以試試StarDict,我認為並不會輸給千把元的商業軟體太多。唯一美中不足的是這套軟體有個俗夠有力的中文名稱--星際譯王!!(咳... 聽來像是大陸人取的,不覺這跟"金山詞霸"有異曲同工之妙嗎?) 安裝說明可以參考這裡。(注意: 字典檔下載時,附檔名會變成tar.tar,要改成tar.gz)
* Ethereal: 如果你懂網路,對封包、Socket有點研究,不要錯過這個窮人的原子彈,功能不輸一套數十萬的專業Sniffer,卻完全免費。

9/28/2006

KB-活用Visual Studio的Task List

幾乎所有使用VS.NET或VS 2005的開發者都知道Task List的用法,也就是在Build Project時,所有出錯需要修正的地方都會列在Task List中,並分為黃色(Warning)跟紅色(Error),在Task上點兩下IDE就會幫你開啟有問題的程式檔,並把游標移到出問題的地方,真是方便到不行!!

其實Task List還有一個較少人知道的用法,我們可以定義一些自訂的Task類別加以列管! 例如: 我最常遇到的情況是程式寫一寫,有一段因為規格還不清楚或需要的元件還沒做好(或是因為太難寫,先用鋸箭法,並立下志願有朝一日,"而且有時間的話"再好好Refactoring一番,咳~~),會先寫一段替代性的程式,註上TODO,等待日後再補上或修正;另外一種情形,則是為了DEBUG而臨時加的測試Code,我都會加上DEBUG字樣的註解,等測試完再一一刪除。

在沒有特殊工具的情況下,我們可以用尋找文字的方法去逐一找到所有TODO、DEBUG之類的特別註記,但Task List提供了更便捷的做法。例如下圖,只要將Task List的類別切成Comment,所有標註特殊註解的程式碼立即化身為一項項Task,馬上就能享受與"待修正錯誤"Task同等級,點兩下就送到眼前的VIP服務!
TaskListComment

哪些註記會列為Task呢?? 系統提供了一些預設的特殊註解標記(Token),當然,Token也可以自訂。大家不妨善用這些功能,讓你的程式碼管理更上一層樓! (不過,有時看到滿是TODO的特長Task List,心情會忽然不太好,是小小的副作用就是了)
TaskListCommentSet

9/20/2006

TechEd 2006 Day 2 Sharing -- 從網頁開發者角度看IE7

IE7的RC1已經開放下載了,不久後,End-User就要陸續迎接IE7所帶來的新功能及花俏把戲,但不少經歷過XP SP2 Release的Web Developer可能已經矬著等了,擔心重演User一更新完Browser,網站就不能使用的災難。

今天聽了一堂IE7的介紹,但我的觀察重點不在於新功能,而在於Developer要如何因應IE6->IE7的改變。很意外地,我個人的評論是好消息勝過壞消息。以下是我的觀察報告,先說壞消息:

  1. Cross-Domain Security限制更嚴苛了! 不過這主要是為了防範XSS(Cross-Site Scripting)攻擊(參1, 參2, 參3),一般網站在設計時應該不會也不該走這類巧門,影響應該有限。
  2. High Assurance SSL的網站URL會用綠色顯示,這表示當大家都申請了新式的高信賴度SSL憑證時,沒申請的網站就可能因為URL顏色不夠綠(咳...)而受到歧視,屆時網站主非破費申請新憑證不可。
  3. 基於安全的理由,網頁中若內嵌ActiveX Control,User將會收到更多的警告及確認。如果是Internet User都會用到的網頁中有用到自行開發ActiveX Control,花點錢取得憑證為控件加上數位簽章會是較佳的解決方式。

接著,說說令人振奮的好消息:

  • 網頁顯示可自由縮放: 對於內容豐富的網頁,9pt Font Size一直是我的最愛。不過後來才驚覺,這對不少開始老花的中年User十分不友善。User多半會將IE的字型調大自力救濟,但是字型的調整會造成版面配置脫離原先的設計,最慘的狀況是Button被擠到火星去,然後不久就會接到抱怨電話。IE7中的網頁可以像Word或Excel設定不同的檢視比例,字要多大有多大,也完全不用擔心配置錯亂。
  • IE6-的網頁列印在處理大網頁時,常讓人氣結! 要不是右方被裁了,就是右方超長部分被分印在第二張上。IE7的列印可以自由縮放網頁大小,使其可以印在一張A4紙內,甚至也可以自由決定要列印的範圍。有了這個功能,Developer遇爾可以偷點懶,不需再為一些大型網頁另外做列印用的版本。
  • IE7的CSS效果顯示有兩種模式: quirks(向前相容)及strick mode,網頁相容性問題多半出在strick mode,而IE7判定是否要用strick mode則由DocType宣告決定,所以想要完全避開這個困擾,留意一下DocType宣告即可。

再來,雖然對Developer設計網頁關聯不大,我還是整理一下IE7一些吸引人的新特性:

  • 後知後覺了數年,IE終於內建支援Tab功能了,同一個IE視窗可以同時開啟多個網頁,並以Tab切換。我的最愛、首頁所設定的對象可以是多張網頁,不再只能設單一的URL。(開啟時也會同時開多個Tab)
  • 瀏覽到有提供RSS的網頁時,Toolbar上的RSS Icon可以直接帶出可訂閱的RSS Feed。
  • 可以整合多種Search Provider(Google, Yahoo, ESPN, Amazon, eBay...),修改Registry可以連結任何以QueryString傳入關鍵字的查詢網頁。
  • protected mode: IE中的程式在執行時,要寫入HD的檔案會被導到user\Temporary Internet Files\Virtualize目錄下,程式會以為寫入的真的C碟,但實際上個虛擬的環境。這樣可以有效封鎖可能的破壞性。
  • 所有安裝的ActiveX及Plug-In用統一的介面,決定哪些啟用或停用。
  • Windows Defender會自動掃瞄下載的檔案是否有木馬、間諜程式。
  • 支援最新的CSS及W3C標準,使用CSS就可以做出固定位置的背景圖、半透明、光暈...等效果,對美工製圖的依賴降低不少。

KB-ThinkPad! 把Windows Key還給我~~

在TechEd 2006上看Vista Demo時發現一個很炫的功能,切換視窗時(即傳統Alt-Tab的切換動作),可以讓視窗變成一張張直立的照片,然後像摩天輪一樣轉動供User挑選。(這功能的學名叫Flip 3D[介紹在網頁最下方] )
回家開進ThinkPad T43的Windows Vista,試了半天卻只有傳統的Alt-Tab可用! 認真地Google了好久,才發現它要按Windows鍵+Tab啟動,但... ThinkPad的RD工程師們,在設計這樣一台高檔Notebook時,卻很堅持地認定Windows鍵是廢物,所以決定為IBM公司出貨的每台NB省下一顆Key的成本,這下可糗了吧?
所幸,IBM應該是被罵到臭頭,網站上找得到一個工具(Keyboard Customizer Utility)可以Remap一些較少用的Key(例如: 右方的Ctrl, Alt)當成Windows Key。裝好並啟動後,小黑終於有Windows Key可用了...
不過,又掙扎了一陣子,終於又認清了一件事實,Windows Vista的這類特效需要"高檔顯示卡"的晶
片才能展現出Vista Aero效果,並且只有在Theme使用Windows Vista Glass(T43只能用到Windows Vista Basic)時才有資格用Flip 3D, 而T43使用Intel 915晶片組內建的顯示晶片,功能太鳥,無法支援。再會吧! Flip 3D~~~
PS: 我從來認為商務用途的Notebook又不拿來玩3D Game,使用MB內建的晶片組應該綽綽有餘吧! 看來IBM、Intel與我都沒猜到MS這招!


 

9/19/2006

TechEd 2006 Day 1 Sharing

屈指一算,從改變我一生的TechEd 97起算,這是第十個年頭參加TechEd了,今年的TechEd比起前幾年來"樸素"許多,沒有Show Girl、沒有開場舞、沒有學員Blog、也不太有額外的活動(雖然我對這些花招向來興趣缺缺),是主事者換人? 還是"公務機要費"的申報程序變嚴了?? (哈!)

看了一下課表,我最近才開始重用也最感興趣的Visual Studio 2005及.NET 2.0看來在2006年已是舊聞了,今年課程焦點多放在尚未上市的Vista、.NET 3.0、Office 2007及SPS 2007...等新產品。Keynote Speech裡仿"反恐24小時"拍的情境短片很有意思,而本土MS表演的WPF、Excel 2007、Exchange Voice Integration也讓人印象頗為深刻。

今天聽了.NET 3.0 Overview、Office 2007及WSS 3.0,以下我就以QA的方式分享一下我的心得(以淺顯易懂的常識性介紹為主,要再深入我也沒轍)

Q1. 靠! .NET 2.0都還沒開始學,最近冒出來的.NET 3.0又是怎麼一回事,要搞死人嗎?
A: 免驚! .NET 3.0是行銷名詞,代表.NET 2.0加上WPF、WCF、WF、CardSpace四套Framework,基本上.NET 2.0核心完全沒變,只是多了幾個裝滿好用類別的新Namespace。

Q2. Window Presentation Foundation是什麼?
A: 它是XAML語言為基底,一種描述影像、音效... 等等Presentation Layer的XML標準。這個新標準有幾項迷人的特性:
1) 程式師與美工設計師可以分別用Visual Studio跟Microsoft Expression修改同一份XAML,而不會發生美工把程式搞垮或程式師把配置弄爛的衝突。(ASP時代有類似經驗的朋友就知道我在說什麼,哈里路亞!)
2) 同樣的XAML設計,可以直接套用在Window Form及Web上(透過類似Flash Plug-In的方式,WPF/E),二者的表現結果將會完全一致。(MS要進攻RIA市場了)

Q3. Windows Communication Foundation又是什麼?
A: 過去,要做跨機器的溝通,並同時處理Transaction等議題,有很多種選擇: Web Service、.NET Remoting、CORBA、MSMQ、MQ Series... 走不同的管道有不同的寫法,程式碼寫起來又臭又長。WCF提供統一而簡單的Channel概念,只要改改Config,就可以從原本走Web Service,馬上換成.NET Remoting,程式碼一行都不用改。(個人覺得,WCF取代了靠行COM+的半調子EnterpriseService物件群,算是功德一件)

Q4. Windows Workflow Foundation是會讓Flow廠商矬著等的殺手嗎?
A: Workflow真的很好用,除了刻板印象中的電子表單傳簽之外,企業裡一個步驟接著一個步驟的營運流程(銷售、採購...),電腦中一個動作接著一個動作的操作程序,都可以用Workflow的概念去分析、實作。所以,MS出了這個WF以提供實作Workflow的重要基礎。但為了化解流程軟體廠商(包含MS自己的BizTalk)的疑慮,MS詮釋說WF像是引擎、輪胎,要能開上路,還有一大段功夫;而流程軟體就像設備豪華的汽車,二者不能相比。(嘿... 不過呢? 要買一台裕隆馬上開,還是自己用Benz的引擎+米其林輪胎組一台夢幻跑車? 每個人的答案未必相同吧!)

Q5. CardSpace? 那是啥?
A: MS的Passport Service固然提供了世界通用的認證機制,但所費不貲,而且帳號資料及管理權完全在別人家中,大部分的企業都會有疑慮。(我向來也都用類似的理由質疑ERP ASP的發展性)
CardSpace回歸以SmartCard(晶片卡)為核心的身份認證技術,開發者主要的職責則在於如何與其溝通,識別使用者身份。

Q6. 今天的Office 2007 Demo中有哪些新功能很吸引人?
A: Word 2007 - 1) 新格式docx有自我壓縮功能,44M->3M 2) Mouse在不用的樣式選單上滑動時,可以立即看到效果,不需真的套用就能看到(當然,電腦要夠快才會順暢) 3) Office2007全系列使用Ribbon式的選單系統,要時間適應,但習慣後非常順手[參考]
Excel 2007 - 1) 圖表樣式、效果種類大增[參考] 2) 在一堆Cells中挑出前10名、以顏色深淺、箭頭、燈號表示數字大小...等酷炫的BI式應用 3) Row數放大16倍,Column數也放大64倍,可以編輯更大張的試算表(但願你有夠快的CPU及夠大的RAM)
PowerPoint 2007 - 傻瓜式的智慧圖形,自動將條列文字變成向上箭頭、金字塔、齒輪等表現手法。[參考 SmartArt]
Outlook 2007 - 1) RSS訂閱功能 2) Sharepoint整合 3) 多人行事曆合併顯示,找空閒時間較方便

9/14/2006

KB-To Delete DataRow via DataAdapter

用DataAdpater+CommandBuilder來新增、修改、刪除資料真是件爽快的事兒,但過去我用它Update資料的經驗不多,所以今天在處理刪除時,出了點問題。
我先簡單介紹一下如何用DataAdapter來更新資料吧!

例如:
//建一個SELECT Command
OracleConnection cn=new OracleConnection("Data Source=ORA;User Id=Blah;Password=Blah");

OracleCommand cmd=new OracleCommand("SELECT * FROM myTable WHERE PK=:pk",cn);

cmd.Parameters.Add("pk",OracleDbType.Varchar2).Value="123";

//用SELECT Command建立DataAdapter

OracleDataAdapter da=new OracleDataAdapter(cmd);

//用DataAdapter建立CommandBuilder

OracleCommandBuilder cb=new OracleCommandBuilder(da);

DataTable dt=new DataTable();

//查詢資料庫後取得DataRow

da.Fill(dt);

//改改資料

dt.Rows[0]["Col1"]="100";

//另外新增一筆

DataRow newRow=dt.NewRow();

newRow["PK"]=555;

newRow["Col1"]="123";

newRow["Col2"]="ABC";

dt.Rows.Add(newRow);

//要在DB上完成以上的更新及新增動作,只要這樣做就可以

da.Update(dt);

//感謝DataAdapter與CommandBuilder!!!

很簡單吧! 舉一反三,我要刪除資料時,就寫了

dt.Rows.RemoveAt(0);

da.Update(dt);


結果資料還是好好地躺在DB中,啥事也沒發生。

原來,DataAdapter要更新資料時,會以DataRow的RowState來決定要新增、修改或是刪除。如果我們把DataRow從DataTable中拔掉了,DataAdapter當然不知道有一列待刪。正確的寫法應該是:

dt.Rows[0].Delete();

da.Update(dt);


參考資料: http://blog.yam.com/thinkingmore/archives/691002.html

 

9/11/2006

KB-SQL 2005資料庫維護計劃要如何設定檔案保存期限?

SQL 2000一堆簡單易用的管理介面與精靈應該是許多IT新手的最愛吧! (不過,這也讓許多還沒準備好的新鮮人就當起了堂堂的DBA,塞翁得馬,焉知非禍?)
以資料庫維護計劃(Maintenance Plan)來說吧,幾個步驟設定一下,整個資料庫的日常備份機制就算建立起來了,其中我覺得特別好用的是還可以設定備份檔要保存多久,過期的自動刪除!
SQL2000BakCleanUp

SQL 2005的介面改了許多,SSIS更是大幅翻修到DTS老手們快要吐血身亡。所幸還是有維護計劃,也有精靈可以選選備份及維護的選項建出維護計劃。但是... 怎麼沒地方可以設定備份檔案的保存期限呢?
不知道什麼原因,SQL 2005的維護計算精靈遺漏了這個選項,得自己手動加上。在維護計畫上按右鍵,選擇Modify打開SSIS編輯介面,在Pipeline後端接上個Maintenance CleanUp Task,就可以設定保存期限並自動刪除過期檔案了。(謝謝Ryan君的火力支援)
SQLBakCleanUp

9/05/2006

KB-ASP.NET 2.0 網站部署的變革

VS 2005提供了Wizard可以將ASP.NET 1.1 Project無痛升級成ASP.NET 2.0,讓人覺得二者似乎沒啥不同,直到你將網站部署到正式環境時,才會發現人事己非。

在ASP.NET 1.1中,VS.NET 2003預設是用Code-Behind的方式,將所有的aspx的.cs Build成單一顆DLL,若要更新cs時,Rebuild再把dll Copy到正式機即可。如果你還想用這種方式處理ASP.NET 2.0網站的更新,包你傻眼!

ASP.NET 2.0在Code-Behind的概念上悄悄地做了大改變! 首先,ASP.NET 2.0用的是Code-Beside,而不是Code-Behind,也就是.cs直接放在網站上,使用者瀏覽頁面時才動態Complie。這樣的好處是,當你要改.cs的程式時,不須要重新Build DLL出來,只要直接改.cs的內容即可。(又回到ASP時代的方便性了,真是十年河東、十年河西...) 當然,大家馬上想到,那程式碼豈不被看光光?? 這就是方便的代價,如果你要保護.cs的程式邏輯不外露,則ASP.NET 2.0提出了一種Precompiled Web Site的概念(完整的Precompilation Model說明比較可以看這裡),就比較接近原來Code-Behind的精神。.cs會被事先Compile成DLL,這樣就只要部署aspx與dll到正式台上就可以了。

我們看一下,Code-Beside的網站會長成這樣:
NormalWeb
(注意: 在ASP.NET 2.0中,與ASPX無關的獨立.cs要放在App_Code目錄下)
Precompiled Site則像這樣: (每個目錄一個.dll)
PublishedWeb

而要部署ASP.NET 2.0的網站到正式環境,有四種選擇:

1) XCOPY: 就是直接將檔案COPY過去,但預設的Code-Beside方式會有.cs外露的問題
2) Copy Web Site: VS 2005內建的工具,可以比對檔案新舊作同步,也可指定同步特定的Folder、File,但一樣有Code-Beside的.cs外露Issue。
3) Publish Web: VS 2005會進行Precompile的動作,並將aspx, dll檔案複製到遠端的主機上。但是,我們沒法選擇只更新某幾個檔案,一律全部覆寫!! (包含web.config,
額外Copy過去的東西也會被幹掉)
4) Build Setup Project: 建立一個專案,產生MSI自動安裝檔,但如果並不打算做大量部署時,這有點殺雞用牛刀的嫌疑。

老實說,以上三種方法中,3)比較接近實務的需求,但是每次都要"全站更新"的設計叫人不敢恭維,網路上不少人抱怨這一點,也有些改良的建議。其中我覺得較可行的方式是先Publish Web到Local Disk後,再選擇只Copy其中部分檔案到正式機。暫時我會先採行這種做法,等待將來有方便的Add-On或工具問市再說。(Publish Web Site時有個選項是"Use fixed naming and single page assembllies"[參見下方的圖],則每個ASPX會有其獨立的DLL,名稱也會包含ASPX的名稱以資識別,這有利於我們只更新單一的ASPX或其.CS邏輯,在實務上可以減少更新時Web Application需要重新啟動的範圍。但是網站大而ASPX很多時,DLL數目會多到嚇人是一大缺點。)

最後補充一點,Precompiled Site還有一種特異功能,可以連aspx的內容都全部藏起來,網站上放的aspx會是只有一行文字的空殼子,這應該是保密到家的最高境界了,做法是在Publish Web Site時,取消"Allow this precompiled site to be updatable"。
PublishWebOption
根目錄下會出現PrecompiledApp.config,bin下會出現幾個.compiled
PublishedWebNoModify
此時開啟.aspx檔瞧瞧,其中只有一行文字。這個檔案只是用來讓IIS不要判斷檔案不存在而傳回404 Error,真正的HTML內容都藏在DLL裡去囉。
EmptyASPX

9/02/2006

病毒震撼教育

起初,我只是要幫忙看看網路問題而已,真的!

公司有個部門幾天前換了IP,就開始陸續有人回報某幾程式不能跑或一些奇奇怪怪的狀況。原本推測應該是改IP、網域信任之類的問題,卻一直無法找出直接關聯的證據。最後網管將問題縮小具體化為,有一支放在File Server上的程式,某一樓層的可用、另一樓層的人只要一開啟,我的電腦及一些日常操作就會變得極慢,例如: 用檔案總管下按F5 Refresh時,系統就Hang了,但若點一下其他的開著的程式(什麼都好,例如: Notepad,用Developer的角度詮釋就是讓檔案總管Lost Focus)。由於前晚網管人員忙到十點都無法解決,今早我就接到指令去幫忙看看。

由於剛換過IP,有問題的程式又會去讀取網路分享的檔案,一開始我也朝網路方式偵辦,但由一路蒐集的線索,很快的就把網路問題給排除了。理由是,1) Net Use等測試OK,而且只有在跑過問題程式後,才會發生Hang的情形,只要Logout再Logon Hang的狀況就消失 2) 在放問題程式的目錄下,有另一個免費軟體,用來查郵遞區號,跟問題程式一樣是用Delphi寫的。

莫非Delphi程式都會這樣,請RD寫了一個Hello World Delphi小程式測試,卻是正常的,看來並非Delphi的問題。難道是病毒?? 一時要不到問題程式的原始檔案比對,我設法找到了郵遞區號的1.12版程式,發現它也可以正常跑,會Hang的郵遞區號程式則1.14版。很好,比對了一下兩個程式的二進位碼,發現一開頭就有很大的差異,1.12版有This program cannot be run in DOS mode的Win EXE檔特徵,1.14版則沒有。對EXE檔結構雖沒深入研究,但也看出些不對勁,我心想,小改版應該不會變動這麼多才對,莫非用不同版本的Delphi或不同的方法去Build的? 但實在找不到1.14版來比較。回頭再問了一下問題程式是否有原始檔案可以比對,還是沒下文,我想算了(這是我犯的第一個錯誤),把檔案帶回去研究看看好了。

檔案Copy到我的機器上後,心想,這些檔案歷經市場上兩大品牌防毒軟體的檢驗,應該有毒的機率很低(這是第二個錯誤),仗著我的機器有裝防毒及Windows Defender,先執行了1.12版ZipCode程式OK,再試1.14(這是第三個錯誤),並不會Hang住,但速度略慢,但開始有些怪事發生了,桌面(Explorer.exe)忽然結束又重新啟動,然後在事件檢視器中出現Windows Defender發現疑似木馬行為(mssbupx.dll有可疑活動及Windows Socket 2.0 Non-IFS Service Provider Support Environment服務啟用又用的System Event)。

最後發生了一件事,證實了我的疑慮:
我中毒了! 我中毒了! 我中毒了! 我中毒了! 我中毒了! 我中毒了! 我中毒了! 我中毒了! 我中毒了~~~
在執行1.14版時,UltraEdit通知我1.12版的檔案被更改了! Reload之後驚覺cannot be run in DOS mode的訊息不見了,取而代之的是"PE" NT Signature的程式碼段。
NormalExe
VirusExe

心涼了半截! 此時我得蒐集事證,確認是病毒後通報網管人員做緊急處置。
我使用File Monitor側錄,在Windows目錄下找到了一個只有5K的WinVer.exe檔做誘餌,果然蒐集到足以起訴它的呈堂證供。
Virus

這是段犯罪實錄呀! Explorer.exe在檔案後方加了30K的資料,並在EXE檔第64 Byte起插入768 Bytes(這就是cannot be run in DOS mode消失的原因)。接修改檔案長度及把最後更新時間切回修改前的樣子。有了這個,我可以確定Explorer已被病毒附身了。[關於這個病毒的研究心得,我寫在前一篇Blog中了]

通報了網管組的主管,並將被感染的WinVer送交給他們轉送防毒公司。公司開始封鎖疫區,採行一些緊急措施,防止傷害擴大,而無辜的IP更換作業也終於卸下了揹負多日的黑鍋。

防毒公司的反應讓我有些失望,心想連我都可以抓到明確事證,確認是病毒,至少是具有感染性的程式。兩家公司的第一時間反應,似乎就只是用自家的防毒軟體掃一掃,沒查出有已知的病毒,就給了回覆。說什麼經掃瞄後未發現病毒(廢話,掃得到還要通報你們嗎?),但判斷該程式有可能具有惡意程式,建議不要使用。咳... 所有送交給他們的程式應該都可以套用這個回覆吧??  再協調爭取的結果,有簽六小時緊急處理時限的公司拒絕承認這是病毒,真是高招,只要在做出解毒劑前二小時再承認就永遠不會違約,好個射箭再畫靶!
另一家未合作的公司則給了二個小時內交付解毒程式的承諾(當時便很懷疑,二小時會不會太短? 後來證實,這比像業務搶案子時的豪氣干雲)。結果是,合約廠商在48小時後總算出了具有偵測能力的病毒碼更新,競爭廠商則仍然沒消沒息。不禁要小小埋怨,連我都能精準抓出感染過程,一家防毒公司想必精通組合語言的高手如雲,又有標本可供研究,我原本預期的解藥製程應在12小時內,居然花了兩三天還沒能100%除根,實在太讓人失望了!!

筆都丟完了。好,平心靜氣,我們還是要來檢討這次的處置過程。對自己研判問題、推理原因及善用工具的表現,並在一天內提出足夠的事證,讓網管人員能及早針對病毒做因應,我給自己80分的高分。但從另一角度來看,我卻犯下了幾個愚蠢的淊天大錯:
1) 當懷疑檔案被感染時,我沒有堅持要到原始檔做比對;郵遞區號程式有版本的差異,讓目已鄉愿地找了藉口,坐視在第一時間咬定是病毒的機會溜走。錯失了時效,還導致後來惹毒上身。
2) 在懷疑檔案有毒的狀況下,我選擇相信防毒軟體,而忽略自己的直覺。Remember what Fox Mulder said, "Trust NO ONE!"
3) 我居然笨到用自己的本機去跑嫌疑的檔案,這種危險的事,叫VM出來當替死鬼就得了。
總結下來,這堂病毒震撼教育,我只給自己49分的難看分數,但由這場戰爭中,我有了全新的體認,下次,我一定會做得更好!!