ViewState大概ASP.NET裡最偉大的發明,因為它提供與WinForm一致的開發經驗,讓寫單機AP的開發人員也能無痛(?)轉移到Web上的開發。一般的ASP.NET網頁,在原始碼中會有如下圖的hidden value。

2012-03-02_142924

其實ViewState是以Base64編碼,還原後可以看見部份文字,實際上它是將物件序列化後再轉為Base64字串,接下來示範如何將ViewState還原。

Demo程式介面,上面的TextBox是ViewState值,下面則是顯示還原後的結果。

2012-03-02_142415

 

要將ViewState非常簡單,只要使用LosFormatter就能輕鬆辦到。但有一點比較麻煩,就是還原後的物件型別沒辦法事先知道,照慣例通常是Pair物件,但Pair底下的First及Second屬性,型別還是未知。

2012-03-02_142438

 

在這裡使用的方法稍微暴力了些,就是儘量列出可能的型別,然後再將值印出。

2012-03-02_142501

 

對於Pair型別的處理,採用遞迴的方式,配合前面的VisitObj方法,一層一層的往下找。

2012-03-02_142516

 

雖然儘量列出可能的型別,但總是會有沒處理到的型別,這時就利用Reflection將物件的屬性及值全部找出來。

2012-03-02_142528

 

最後,提供一個網址讓大家測試,這個網站是國外的網友製作,一樣能還原ViewState,但能處理的型別較少。

http://ignatu.co.uk/ViewStateDecoder.aspx

 

參考資料

MSDN:LosFormatter類別

全站熱搜

卑微研究生 發表在 痞客邦 留言(0) 人氣()