老鳥講逆向分析-完整_第1頁
老鳥講逆向分析-完整_第2頁
老鳥講逆向分析-完整_第3頁
老鳥講逆向分析-完整_第4頁
老鳥講逆向分析-完整_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

黑客老鳥講逆向分析什么是PE文件HTTP/NETSECURITY51CTOCOM/200802251418子明51CTOCOM我要評論0【51CTOCOM專家特稿】講到逆向,更多的人都是考慮到既然是逆向那就應(yīng)該反著來推或者相反,其實(shí)則不然,這里我們要講的是為了更深入的研究WINDOWS編寫機(jī)制,更好的研究他們的安全,誰讓微軟這么保守雖然曾經(jīng)流出過WINDOWS的部分代碼,但是還是有更多的秘密值得我們?nèi)ド钔?,每天都有新的發(fā)現(xiàn),做為逆向分析的第一步,我們首先來學(xué)習(xí)下什么是PE文件針對PE的認(rèn)識(shí)PE是PORTABLEEXECUTABLEFILEFORMAT(可移植的執(zhí)行體)簡寫,它是目前WINDOWS平臺(tái)上的主流可執(zhí)行文件格式。PE的文件格式PE“PORTABLEEXECUTABLE“文件格式是針對MSWINDOWSNT,WINDOWS95ANDWIN32S的可執(zhí)行二進(jìn)制代碼DLLSANDPROGRAMS。在WINDOWSNT內(nèi),驅(qū)動(dòng)程序也是這個(gè)格式,也可以用于對象文件和庫。這個(gè)格式是MICROSOFT設(shè)計(jì)的,并在1993經(jīng)過TISTOOLINTERFACESTANDARD委員會(huì)MICROSOFT,INTEL,BORLAND,WATCOM,IBM等標(biāo)準(zhǔn)化。它基于在UNIX和VMS上運(yùn)行的對象文件和可執(zhí)行文件的COFF“COMMONOBJECTFILEFORMAT“格式。PE格式結(jié)構(gòu)圖以上就是逆向分析的第一課程,有關(guān)PE的認(rèn)識(shí)。下面我們接著將軟件的保護(hù)甲殼?!?1CTOCOM獨(dú)家特稿,轉(zhuǎn)載請注明出處及作者】【相關(guān)文章】黑客老鳥講逆向分析什么是殼及殼的加載過程HTTP/NETSECURITY51CTOCOM/200802251427子明51CTOCOM我要評論0【51CTOCOM專家特稿】上節(jié)課程我主要介紹了什么是PE,本次課程我們主要來講一下殼,這也是破解軟件的必修課程,也是逆向分析里面的必修功課。在一些計(jì)算機(jī)軟件里有一段專門負(fù)責(zé)保護(hù)軟件不被非法修改或反編譯的程序。它們一般都是先于程序運(yùn)行,拿到控制權(quán),然后完成它們保護(hù)軟件的任務(wù)。由于這段程序和自然界的殼在功能上有很多相同的地方,基于命名的規(guī)則,就把這樣的程序稱為“殼”了。殼分為私密殼和壓縮殼。殼的示意圖殼的加載過程1)獲取殼所需要使用的API地址如果用PE編輯工具查看加殼后的文件,會(huì)發(fā)現(xiàn)未加殼的文件和加殼后的文件的輸入表不一樣,加殼后的輸入表一般所引入的DLL和API函數(shù)很少,甚至只有KERNEL32DLL以及GETPROCADDRESS這個(gè)API函數(shù)。殼實(shí)際上還需要其他的API函數(shù)來完成它的工作,為了隱藏這些API,它一般只在殼的代碼中用顯式鏈接方式動(dòng)態(tài)加載這些API函數(shù)。2)解密原程序的各個(gè)區(qū)塊SECTION的數(shù)據(jù)殼出于保護(hù)原程序代碼和數(shù)據(jù)的目的,一般都會(huì)加密原程序文件的各個(gè)區(qū)塊。在程序執(zhí)行時(shí)外殼將會(huì)對這些區(qū)塊數(shù)據(jù)解密,以讓程序能正常運(yùn)行。殼一般是按區(qū)塊加密的,那么在解密時(shí)也按區(qū)塊解密,并且把解密的區(qū)塊數(shù)據(jù)按照區(qū)塊的定義放在合適的內(nèi)存位置。如果加殼時(shí)用到了壓縮技術(shù),那么在解密之前還有一道工序,就是解壓縮。這也是一些殼的特色之一,比如說原來的程序文件未加殼時(shí)12M大小,加殼后反而只有幾百K。3)重定位文件執(zhí)行時(shí)將被映像到指定內(nèi)存地址中,這個(gè)初始內(nèi)存地址稱為基地址(IMAGEBASE)。對于EXE的程序文件來說,WINDOWS系統(tǒng)會(huì)盡量滿足。例如某EXE文件的基地址為0X400000,而運(yùn)行時(shí)WINDOWS系統(tǒng)提供給程序的基地址也同樣是0X400000。在這種情況下就不需要進(jìn)行地址“重定位”了。由于不需要對EXE文件進(jìn)行“重定位”,所以加殼軟件把原程序文件中用于保存重定位信息的區(qū)塊干脆也刪除了,這樣使得加殼后的文件更加小巧。有些工具提供“WIPERELOC”的功能,其實(shí)就是這個(gè)作用。不過對于DLL的動(dòng)態(tài)鏈接庫文件來說,WINDOWS系統(tǒng)沒有辦法保證每一次DLL運(yùn)行時(shí)都提供相同的基地址。這樣“重定位”就很重要了,此時(shí)殼中也需要提供進(jìn)行“重定位”的代碼,否則原程序中的代碼是無法正常運(yùn)行起來的。從這點(diǎn)來說,加殼的DLL比加殼的EXE更難修正。4)HOOKAPI程序文件中的輸入表的作用是讓W(xué)INDOWS系統(tǒng)在程序運(yùn)行時(shí)提供API的實(shí)際地址給程序使用。在程序的第一行代碼執(zhí)行之前,WINDOWS系統(tǒng)就完成了這個(gè)工作。殼一般都修改了原程序文件的輸入表,然后自己模仿WINDOWS系統(tǒng)的工作來填充輸入表中相關(guān)的數(shù)據(jù)。在填充過程中,外殼就可填充HOOKAPI代碼的地址,這樣就可間接地獲得程序的控制權(quán)。5)跳轉(zhuǎn)到程序原入口點(diǎn)(OEP)從這個(gè)時(shí)候起殼就把控制權(quán)交還給原程序了,一般的殼在這里會(huì)有明顯的一個(gè)“分界線”。但現(xiàn)在的猛殼己沒這界限了,殼里有肉,肉里有殼。一般殼的加載過程如圖所示加殼軟件介紹加殼軟件按照其加殼目的和作用,可分為兩類一是壓縮(PACKERS),二是保護(hù)(PROTECTORS)。壓縮這類殼主要目的是減小程序體積,如ASPACK、UPX和PECOMPACT等。另一類是保護(hù)程序,用上了各種反跟蹤技術(shù)保護(hù)程序不被調(diào)試、脫殼等,其加殼后的體積大小不是其考慮的主要因素,如ASPROTECT、ARMADILLO、EXECRYPTOR等。隨著加殼技術(shù)的發(fā)展,這兩類軟件之間的界線越來越模糊,很多加殼軟件除具有較強(qiáng)的壓縮性能,同時(shí)也有了較強(qiáng)的保護(hù)性能。各類加殼軟件,其壓縮算法一般不是自己實(shí)現(xiàn)的,大多是調(diào)用其他的壓縮引擎。目前壓縮引擎種類比較多,不同的壓縮引擎有不同特點(diǎn),如一些對圖像壓縮效果好,一些對數(shù)據(jù)壓縮效果好。而加殼軟件選擇壓縮引擎有一個(gè)特點(diǎn),在保證壓縮比的條件下,壓縮速度慢些關(guān)系不是太大,但解壓速度一定要快,這樣加了殼的EXE文件運(yùn)行起來速度才不會(huì)受太大的影響。常用壓縮殼介紹1ASPACK主頁HTTP/WWWASPACKCOM/ASPACK是款WIN32可執(zhí)行文件壓縮軟件,可壓縮WINDOWS32位可執(zhí)行文件(EXE)以及庫文件(DLL、OCX),文件壓縮比率高達(dá)4070。2UPX主頁HTTP/UPXSOURCEFORGENET/UPX是一個(gè)以命令行方式操作的可執(zhí)行文件經(jīng)典免費(fèi)壓縮程序,壓縮算法自己實(shí)現(xiàn),速度極快。3PECOMPACT主頁HTTP/WWWBITSUMCOM/PECOMPACT同樣也是一款能壓縮可執(zhí)行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同類軟件,PECOMPACT提供了多種壓縮項(xiàng)目的選擇,用戶可以根據(jù)需要確定哪些內(nèi)部資源需要壓縮處理。同時(shí),該軟件還提供了加解密的插件接口功能?!?1CTOCOM獨(dú)家特稿,轉(zhuǎn)載請注明出處及作者】【相關(guān)文章】黑客老鳥講逆向分析有關(guān)脫殼以及脫殼實(shí)例講解HTTP/NETSECURITY51CTOCOM/200802251502子明51CTOCOM我要評論0【51CTOCOM專家特稿】上節(jié)課講了許多有關(guān)殼的知識(shí),下面我們就開始講如何脫殼,以及脫殼時(shí)要用的的一些工具,首先是查殼,當(dāng)前流行的查殼工具主要以PEID和FILEINFO這兩個(gè)軟件為代表。PEID的原理是利用查特征串搜索來完成識(shí)別工作的。各種開發(fā)語言都有固定的啟動(dòng)代碼部分,利用這點(diǎn)就可識(shí)別出何種語言編譯的。同樣,不同的殼也有其特征碼,利用這點(diǎn)就可以識(shí)別是被何種殼所加密。PEID提供了一個(gè)擴(kuò)展接口文件USERDBTXT,用戶可以自定義一些特征碼,這樣就可識(shí)別出新的文件類型。一般的壓縮殼,如ASPACK等都有專用的脫殼機(jī)。而加密殼(如ASPROTECT,ARMADILLO)一般很少有脫殼機(jī),必須手工脫殼。手工脫殼一般情況是分三步一是查找程序的真正入口點(diǎn)(OEP);二是抓取內(nèi)存映像文件;三是輸入表重建。(當(dāng)然現(xiàn)在的加密殼復(fù)雜些,要考慮更多的東西)OEP是ORIGINALENTRYPOINT縮寫,即程序加殼前的真正的入口點(diǎn)。如何尋找OEP外殼初始化的現(xiàn)場環(huán)境(各寄存器值)與原程序的現(xiàn)場環(huán)境是相同的。加殼程序初始化時(shí)保存各寄存器的值,外殼執(zhí)行完畢,會(huì)恢復(fù)各寄存器內(nèi)容。其代碼形式一般如下PUSHFD將標(biāo)志寄存器入棧保存PUSHADPUSHEAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI外殼代碼部分POPADPOPEDI,ESI,EBP,ESP,EBX,EDX,ECX,EAXPOPFD恢復(fù)標(biāo)志寄存器JMPOEPOEP解壓后的程序原代碼方法一利用UPX通用脫殼機(jī)自動(dòng)脫殼脫殼后的程序,利用PEID進(jìn)行分析,PEID給出如下的信息BORLANDDELPHI6070方法二跨段指令尋找OEP用OLLYDBG來調(diào)試脫殼,運(yùn)行OLLYDBG,點(diǎn)擊菜單“OPTIONS/DEBUGGINGOPTIONS”,選擇EVENTS項(xiàng),將第一次暫停設(shè)在WINMAIN函數(shù)上。OLLYDBG打開實(shí)例BANDOOKV135EXE相關(guān)代碼006E044060PUSHAD/一開始OLLYDBG就會(huì)中斷這行,這個(gè)就是外殼的入口點(diǎn),注意這個(gè)PUSHAD指令如下圖所示絕大多數(shù)加殼程序在被加密的程序中加上一個(gè)或多個(gè)段,所以依據(jù)跨段的轉(zhuǎn)移指令(JMP)就可找到真正的入口點(diǎn),此時(shí)就會(huì)有POPAD/POPFD指令出現(xiàn)。UPX用了一次跨段的轉(zhuǎn)移指令(JMP),在跳到OEP處會(huì)看到虛擬地址的值有一個(gè)突變,此時(shí)就能確定OEP了。UPX殼比較簡單,中斷WINMAIN后,只需要在OLLYDBG里往下翻屏,就會(huì)發(fā)現(xiàn)這個(gè)跨段轉(zhuǎn)移指令上圖相關(guān)代碼如下006E05A261POPAD/注意這里的POPAD指令,和開始的PUSHAD對應(yīng)006E05A3E9444EE7FFJMP005553EC/這里跳到OEP,將光標(biāo)移到這,按F4執(zhí)行到這行這句006E05A3JMP005553EC就是跳到OEP的指令,執(zhí)行到這,UPX外殼己將程序解壓完畢,并模擬WINDOWS加載器將原始程序加載到內(nèi)存,005553EC就是映射到內(nèi)存目標(biāo)程序的入口點(diǎn),此時(shí)就可抓取內(nèi)存映像文件了。相關(guān)代碼005553EC55PUSHEBP005553ED8BECMOVEBP,ESP選擇PLUGINSOLLYDUMPDUMPDEBUGGEDPROCESS項(xiàng),DUMP保存成新的文件。方法三編譯語言特點(diǎn)找OEP各類語言編譯的文件入口點(diǎn)都有一些規(guī)律,可以這利用這點(diǎn)來尋找入口點(diǎn)。1)DELPHI程序執(zhí)行程序,用LORDPE(或PRODUMP)選DUMPFULL脫殼,存為DUMPEXE。接著用HEXWORKSHOP打開DUMPEXE,搜索文本“RUNTIME”,搜到后,向前查找離“RUNTIME”最近的十六進(jìn)制數(shù)字“558BEC”,數(shù)字所在的地址就是程序的OEP。2)VISUALC程序可以利用VISUALC啟動(dòng)部分幾個(gè)函數(shù)GETCOMMANDLINEAW、GETVERSION、GETMODULEHANDLEAW、GETSTARTUPINFOAW等來定位程序的OEP。常見的各類編譯語言的入口匯編代碼都要熟悉,因?yàn)橐恍┘用軓?qiáng)殼會(huì)偷OEP處的代碼到殼里,一般情況各編譯語言入口代碼都相同,到時(shí)只需要直接引用相關(guān)程序的入口代碼,這給我們恢復(fù)代碼帶來方便。其它技術(shù)通過堆棧平衡尋找OEP,通過內(nèi)存斷點(diǎn)尋找OEP補(bǔ)充講解一下WINDOWSAPI函數(shù),這可是脫殼的時(shí)候離不開的,如果熟悉了它可以更快的找到程序的入口及程序領(lǐng)空WIN32API是基于C語言的接口,但是WIN32API中的函數(shù)可以由用不同語言編寫的程序調(diào)用。WINDOWS的主要部分有三個(gè)主要子系統(tǒng),分別是KERNEL/USER/GDI。KERNEL操作系統(tǒng)核心功能服務(wù),包括進(jìn)行與線程控制、內(nèi)存管理、文件訪問等;USER負(fù)責(zé)處理用戶接口,包括鍵盤和鼠標(biāo)輸入、窗口和菜單管理等;GDI圖形設(shè)備接口,允許程序在屏幕和打印機(jī)上顯示文本和圖形。常用WIN32API函數(shù)GETWINDOWTEXT函數(shù),作用是取得一個(gè)窗體的標(biāo)題文字,或文本控件的內(nèi)容。GETDLGITEMTEXT函數(shù),作用是獲取對話框文本。GETMODULEFILENAME函數(shù)INTERNETOPEN函數(shù)INTERNETOPENURL函數(shù)SETWINDOWSHOOKEX函數(shù)ADJUSTTOKENPRIVILEGES函數(shù)LOOKUPPRIVILEGEVALUE函數(shù)OPENPROCESSTOKEN函數(shù)GETCURRENTPROCESSID函數(shù)GETCURRENTPROCESS函數(shù)GETWINDOWTHREADPROCESSID函數(shù)GETCOMPUTERNAME函數(shù)【51CTOCOM獨(dú)家特稿,轉(zhuǎn)載請注明出處及作者】【相關(guān)文章】黑客老鳥講逆向分析逆向分析技術(shù)全揭秘2HTTP/NETSECURITY51CTOCOM/200802251523子明51CTOCOM我要評論0靜態(tài)分析靜態(tài)分析從反匯編出來的程序清單上分析程序流程,了解模塊完成的功能。靜態(tài)分析先分析程序的文件類型,如果程序使用加殼保護(hù),則要先進(jìn)行脫殼。通過靜態(tài)分析工具加載程序進(jìn)行分析。(例如IDAPRO工具)動(dòng)態(tài)分析技術(shù)動(dòng)態(tài)跟蹤調(diào)試程序,分為用戶模式和內(nèi)核模式兩種類型。用戶模式調(diào)試器是指用來調(diào)試用戶模式的應(yīng)用程序,工作在RING3級。(例如VC編譯器調(diào)試器)內(nèi)容模式調(diào)試器是指能調(diào)試系統(tǒng)內(nèi)核的調(diào)試器,工作在RING0級。(例如SOFTICE、OLLDBG)OD動(dòng)態(tài)分析調(diào)試中常用的快捷鍵F2設(shè)置斷點(diǎn),只要在光標(biāo)定位的位置(上圖中灰色條)按F2鍵即可,再按一次F2鍵則會(huì)刪除斷點(diǎn)。F8單步步過。每按一次這個(gè)鍵執(zhí)行一條反匯編窗口中的一條指令,遇到CALL等子程序不進(jìn)入其代碼。F7單步步入。功能同單步步過F8類似,區(qū)別是遇到CALL等子程序時(shí)會(huì)進(jìn)入其中,進(jìn)入后首先會(huì)停留在子程序的第一條指令上。F4運(yùn)行到選定位置。作用就是直接運(yùn)行到光標(biāo)所在位置處暫停。F9運(yùn)行。按下這個(gè)鍵如果沒有設(shè)置相應(yīng)斷點(diǎn)的話,被調(diào)試的程序?qū)⒅苯娱_始運(yùn)行。CTRF9執(zhí)行到返回。此命令在執(zhí)行到一個(gè)RET返回指令指令時(shí)暫停,常用于從系統(tǒng)領(lǐng)空返回到我們調(diào)試的程序領(lǐng)空。ALTF9執(zhí)行到用戶代碼??捎糜趶南到y(tǒng)領(lǐng)空快速返回到我們調(diào)試的程序領(lǐng)空。黑客老鳥講逆向分析逆向分析技術(shù)全揭秘3HTTP/NETSECURITY51CTOCOM/200802251523子明51CTOCOM我要評論0結(jié)構(gòu)化異常處理結(jié)構(gòu)化異常處理(STRUCTUREDEXCEPTIONHANDLING,簡稱SEH)是WINDOWS操作系統(tǒng)處理程序錯(cuò)誤或異常的技術(shù)。兩種類型的異常處理句柄一種是FINAL型的,這是在異常未能得到線程相關(guān)處理例程處理操作系統(tǒng)在即將關(guān)閉程序之前會(huì)回調(diào)的例程,這個(gè)例程是進(jìn)程相關(guān)而不是線程相關(guān)的,因此無論是哪個(gè)線程發(fā)生異常未能被處理都會(huì)調(diào)用這個(gè)例程另一種是PER_THREADEXCEPTIONHANDLER線程相關(guān)的異常處理,通常每個(gè)線程初始化準(zhǔn)備好運(yùn)行時(shí)FS指向一個(gè)TIB結(jié)構(gòu)THREADINFOR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論