其實(shí)對于VS2003源代碼理解真的不是很難
在大學(xué)時(shí)我下了關(guān)于很多VS2003源代碼。而我用的是VS2005,我在使用VS2003源代碼時(shí),因?yàn)樯贁?shù)文件無法轉(zhuǎn)換,我也為些郁悶了好久,后來終于讓我找到了解決辦法,讓我很高興。
Asp.net基于VS2005的工程與以往版本的工程的***區(qū)別就是用分部類(partial)取代了代碼隱藏(Codebehind)。
于是我采取的方法是:
1.用打開網(wǎng)站的方式打開這個(gè)工程。這樣VS2005也會進(jìn)行轉(zhuǎn)換,而且也會報(bào)錯,但與直接打解決方案無法加載不同的是,這一次它展開了網(wǎng)站的所有文件。如果你現(xiàn)在運(yùn)行工程,也不會成功的。
2.打開filename.aspx文件到源代碼視圖,將@Page指令中的屬性“Codebehind”改為“CodeFile”,
3.將與這對應(yīng)的Codebehind文件filename.aspx.cs,將繼承于System.Web.UI.Page的類定義class前加上partial關(guān)鍵字。
4.運(yùn)行該工程,它會提示你在filename.aspx中已經(jīng)包含controlname的定義,跟蹤錯誤到filename.aspx.cs,將那些被指示錯誤的重復(fù)定義刪去。
5.然后重復(fù)2-4步直至所有的文件都改過來,再運(yùn)行工程應(yīng)該就可以運(yùn)行成功了。不過也許會報(bào)幾個(gè)警告說某某已經(jīng)過時(shí),不用去管它。
我用VS2003源代碼將那些老頑固(包括2003以及2002的工程)都成功轉(zhuǎn)換了,真的是屢試不爽。這只不過是我自己總結(jié)出來的方法,也許有人有更好的辦法,如果有更好的方法也請指點(diǎn)。
本文介紹注入代碼到PE(Portable Executable可移植的執(zhí)行體)文件格式的Import Table(導(dǎo)入表,也有譯為“引入表”)技術(shù),其也被稱為API重定向技術(shù)(API redirection technique)。
讓我們想像一下:如果我們可以通過操作導(dǎo)入表thunks將導(dǎo)入函數(shù)的入口點(diǎn)(thoroughfare)重定向到我們的指定的例程,用我們的例程過濾導(dǎo)入(消息)就成為可能。
此外,我們可以通過VS2003源代碼這個(gè)功能實(shí)現(xiàn)安排給我們適當(dāng)?shù)睦?,專業(yè)的Portable Executable (PE) Protectors正是這么來做的,另外一些種類的rootkits使用這個(gè)方法通過一個(gè)特洛伊木馬嵌入其惡意代碼到受害者。在反向工程世界里,我們稱之為:API重定向技術(shù),然而我不準(zhǔn)備通過源代碼描述這個(gè)領(lǐng)域的所有觀點(diǎn),本文只是通過一個(gè)簡單代碼介紹一下這個(gè)技術(shù)的概況。我將描述這個(gè)源代碼中沒有的其他一些問題;我不能公開這些代碼,原因是其關(guān)系到一些商業(yè)項(xiàng)目或可能會被懷有惡意者利用,然而我想本文可以被用來作為一個(gè)關(guān)于該主題的入門。導(dǎo)入表的導(dǎo)入目錄入口(import directory entry)帶我們來到文件image內(nèi)部的導(dǎo)入表位置。
對于每個(gè)被導(dǎo)入的DLL,導(dǎo)入描述符是個(gè)容器,它包含了first thunk的地址和original first thunk的地址,DLL名稱的指針。First Thunk引用first thunk的位置,thunks在運(yùn)行該程序時(shí)將會被Windows的PE loader(裝載器)初始化。Original First Thunk指向thunks***個(gè)存儲處,該存儲處提供Hint 數(shù)據(jù)的地址和每個(gè)函數(shù)的Function Name數(shù)據(jù)。在此情況下,F(xiàn)irst Original Thunk沒有出現(xiàn);First Thunks引用Hint 數(shù)據(jù)和Function Name 數(shù)據(jù)被定位的位置。用IMAGE_IMPORT_DESCRIPTOR來表示導(dǎo)入描述符結(jié)構(gòu)如