新聞中心
本人介紹下注入VS2003代碼到PE,文件格式的Import Table(導(dǎo)入表,也有譯為“引入表”)技術(shù),其也被稱(chēng)為API重定向技術(shù),這些都是通過(guò)平時(shí)的學(xué)習(xí)和實(shí)踐中得出的結(jié)果。

目前累計(jì)服務(wù)客戶(hù)上千多家,積累了豐富的產(chǎn)品開(kāi)發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹(shù)立企業(yè)形象,為客戶(hù)提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。成都創(chuàng)新互聯(lián)公司始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶(hù)形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶(hù)提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶(hù),共同發(fā)展進(jìn)步。
讓我們想像一下:如果我們可以通過(guò)操作導(dǎo)入表thunks將導(dǎo)入函數(shù)的入口點(diǎn)(thoroughfare)重定向到我們的指定的例程,用我們的例程過(guò)濾導(dǎo)入(消息)就成為可能。此外,我#t#們可以通過(guò)這個(gè)功能實(shí)現(xiàn)安排給我們適當(dāng)?shù)睦?,VS2003代碼專(zhuān)業(yè)的Portable Executable (PE) Protectors正是這么來(lái)做的,另外一些種類(lèi)的rootkits使用這個(gè)方法通過(guò)一個(gè)特洛伊木馬嵌入其惡意代碼到受害者。在反向工程世界里,我們稱(chēng)之為:API重定向技術(shù),然而我不準(zhǔn)備通過(guò)源代碼描述這個(gè)領(lǐng)域的所有觀點(diǎn),本文只是通過(guò)一個(gè)簡(jiǎn)單代碼介紹一下這個(gè)技術(shù)的概況。我將描述這個(gè)源代碼中沒(méi)有的其他一些問(wèn)題;我不能公開(kāi)這些代碼,原因是其關(guān)系到一些商業(yè)項(xiàng)目或可能會(huì)被懷有惡意者利用,然而我想本文可以被用來(lái)作為一個(gè)關(guān)于該主題的入門(mén)。
進(jìn)入導(dǎo)入表
PE文件格式包括:MS-DOS header、NT headers、Sections headers和Section images(譯注:正如很多技術(shù)讀物上一樣,其實(shí)header可以譯為“頭”,image可譯為“映像”,但本文正文在不影響理解的前提下盡量保留原文術(shù)語(yǔ),以免誤解。)正如你在下圖中所看到的。MS-DOS header是自DOS時(shí)代到Windows時(shí)代在所有微軟可執(zhí)行文件格式(executable file format)公有的。NT headers的思想來(lái)源于UNIX系統(tǒng)的Executable and Linkable Format (ELF),當(dāng)然Portable Executable (PE)格式是Linux Executable and Linkable Format (ELF)的姐妹。PE 格式包括"PE" Signature、Common Object File Format (COFF) header、Portable Executable Optimal header和Section headers。
Portable Executable文件格式結(jié)構(gòu)
在Portable Executable Optional header,有一些數(shù)據(jù)目錄(data directories)描述了當(dāng)前進(jìn)程在虛擬內(nèi)存中主信息表(the principal information tables)的相對(duì)位置和大小。這些表可以有關(guān)于VS2003代碼資源的信息、import(導(dǎo)入)、export(導(dǎo)出)、relocation(重定位)、Debug(調(diào)試)、thread local storage(線程本地存儲(chǔ))和COM運(yùn)行時(shí)。沒(méi)有導(dǎo)入表想要找到一個(gè)PE可執(zhí)行文件是不可能的;
該表包含DLL的名稱(chēng)和Functions(函數(shù))名稱(chēng),這些是當(dāng)程序意圖通過(guò)它們的虛地址來(lái)請(qǐng)求(調(diào)用)它們時(shí)所必需的。在Console executable files(控制臺(tái)可執(zhí)行文件)中沒(méi)有發(fā)現(xiàn)資源表(resource table);然而它是擁有Graphic User Interface (GUI)的Windows可執(zhí)行文件的至關(guān)重要的部分。導(dǎo)出表(export table)在一個(gè)動(dòng)態(tài)鏈接庫(kù)想要導(dǎo)出它的函數(shù)到外界時(shí)是必需的,并且它也在OLE Active-X容器中。Dot NET虛擬機(jī)在沒(méi)有COM+ runtime header下時(shí)不能被執(zhí)行。正如你看到的VS2003代碼,在PE格式中每個(gè)表都有特定的委派任務(wù)。
Data Directories(數(shù)據(jù)目錄)
- PIMAGE_NT_HEADERS pimage_nt_headers = ImageNtHeader(pImageBase);
- DWORD it_voffset = pimage_nt_headers->OptionalHeader.
- DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
- PIMAGE_DOS_HEADER pimage_dos_header = PIMAGE_DOS_HEADER(pImageBase);
- PIMAGE_NT_HEADERS pimage_nt_headers = (PIMAGE_NT_HEADERS)
- (pImageBase + pimage_dos_header->e_lfanew);
- DWORD it_voffset = pimage_nt_headers->OptionalHeader.
- DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress
本文標(biāo)題:都是自己編的VS2003代碼格式歡迎大家指點(diǎn)改正
轉(zhuǎn)載來(lái)于:http://m.fisionsoft.com.cn/article/dphocip.html


咨詢(xún)
建站咨詢(xún)
