




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本節(jié)主要內(nèi)容計(jì)算機(jī)程序逆向工程及應(yīng)用逆向技術(shù)原理常用軟件分析工具工具使用示例計(jì)算機(jī)程序程序的定義
計(jì)算機(jī)程序是一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,每一條指令使計(jì)算機(jī)執(zhí)行特定的操作,實(shí)現(xiàn)某特定目標(biāo)功能。因此,我們需要一種使計(jì)算機(jī)和人都能識(shí)別的語(yǔ)言,即計(jì)算機(jī)語(yǔ)言。2北方工業(yè)大學(xué)信息學(xué)院計(jì)算機(jī)語(yǔ)言高級(jí)語(yǔ)言:語(yǔ)法結(jié)構(gòu)更接近人類語(yǔ)言,邏輯也與人類思維邏輯相似,較高的可讀性和編程效率。Java,C,C++,等等均屬于高級(jí)語(yǔ)言。匯編語(yǔ)言:即我們本書所學(xué)習(xí)的語(yǔ)言,也稱為符號(hào)語(yǔ)言。在不同的設(shè)備中,匯編語(yǔ)言對(duì)應(yīng)著不同的機(jī)器語(yǔ)言指令集,運(yùn)行時(shí)按照設(shè)備對(duì)應(yīng)的機(jī)器碼指令進(jìn)行轉(zhuǎn)換。機(jī)器語(yǔ)言:又稱機(jī)器碼,CPU可直接解讀,通用性很差,與人們習(xí)慣的語(yǔ)言差別太大,故難以推廣使用。計(jì)算機(jī)程序3北方工業(yè)大學(xué)信息學(xué)院時(shí)下熱門的編程語(yǔ)言匯編語(yǔ)言計(jì)算機(jī)程序4北方工業(yè)大學(xué)信息學(xué)院程序的生成IDE(集成開發(fā)環(huán)境IntegratedDevelopmentEnvironment)是用于提供程序開發(fā)環(huán)境的應(yīng)用程序,通過(guò)IDE可快速生成程序。根據(jù)程序的生成和運(yùn)行過(guò)程,程序大致可分為兩類:編譯型程序和解釋型程序。
編譯型程序解釋型程序工作方式程序在執(zhí)行前編譯成機(jī)器語(yǔ)言文件,運(yùn)行時(shí)不需要重新翻譯,直接供機(jī)器運(yùn)行程序在用編程語(yǔ)言編寫后,不需要編譯,以文本方式存儲(chǔ)原始代碼,在運(yùn)行時(shí),通過(guò)對(duì)應(yīng)的解釋器解釋成機(jī)器碼后再運(yùn)行,執(zhí)行時(shí)逐條讀取解釋每個(gè)語(yǔ)句,然后再執(zhí)行。優(yōu)點(diǎn)執(zhí)行效率高跨平臺(tái)性好缺點(diǎn)依賴編譯器,跨平臺(tái)性差效率較低舉例C,C++等Basic,Python等計(jì)算機(jī)程序5北方工業(yè)大學(xué)信息學(xué)院各種語(yǔ)言之間的聯(lián)系計(jì)算機(jī)程序6北方工業(yè)大學(xué)信息學(xué)院以C語(yǔ)言為例,我們來(lái)說(shuō)說(shuō)C語(yǔ)言程序的生成過(guò)程兩個(gè)主要過(guò)程:編譯和鏈接編譯預(yù)處理正式編譯前,根據(jù)已放置在文件中的預(yù)處理指令來(lái)修改源文件的內(nèi)容,包含宏定義指令,條件編譯指令,頭文件包含指令,特殊符號(hào)替換等。編譯、優(yōu)化正式編譯前,根據(jù)已放置在文件中的預(yù)處理指令來(lái)修改源文件的內(nèi)容,包含宏定義指令,條件編譯指令,頭文件包含指令,特殊符號(hào)替換等。目標(biāo)代碼生成將上面生成的匯編代碼譯成目標(biāo)機(jī)器指令的過(guò)程。目標(biāo)文件中所存放著與源程序等效的目標(biāo)的機(jī)器語(yǔ)言代碼。計(jì)算機(jī)程序7北方工業(yè)大學(xué)信息學(xué)院鏈接是指將有關(guān)的目標(biāo)文件彼此相連接生成可加載、可執(zhí)行的目標(biāo)文件,其核心工作是符號(hào)表解析和重定位。鏈接按照工作模式分靜態(tài)和動(dòng)態(tài)鏈接兩類:靜態(tài)鏈接:鏈接器將函數(shù)的代碼從其所在地(目標(biāo)文件或靜態(tài)鏈接庫(kù)中)拷貝到最終的可執(zhí)行程序中,整個(gè)過(guò)程在程序生成時(shí)完成。動(dòng)態(tài)鏈接:動(dòng)態(tài)鏈接庫(kù)在編譯鏈接時(shí)只提供符號(hào)表和其他少量信息用于保證所有符號(hào)引用都有定義,保證編譯順利通過(guò)。程序執(zhí)行時(shí),動(dòng)態(tài)鏈接庫(kù)的全部?jī)?nèi)容將被映射到運(yùn)行時(shí)相應(yīng)進(jìn)程的虛地址空間,根據(jù)可執(zhí)行程序中記錄的信息找到相應(yīng)的函數(shù)地址并調(diào)用執(zhí)行。計(jì)算機(jī)程序8北方工業(yè)大學(xué)信息學(xué)院C語(yǔ)言程序的生成過(guò)程計(jì)算機(jī)程序9北方工業(yè)大學(xué)信息學(xué)院經(jīng)過(guò)編譯鏈接后,程序生成,windows程序以PE(PortableExecutable)文件形式存儲(chǔ)。常見的EXE、DLL、OCX、SYS、COM都是PE文件。
PE文件以段的形式存儲(chǔ)代碼和相關(guān)資源數(shù)據(jù),其中數(shù)據(jù)段和代碼段是必不可少的兩個(gè)段。在應(yīng)用程序中最常出現(xiàn)的段有6種:
執(zhí)行代碼段,.text數(shù)據(jù)段,.data、.rdata資源段,.rsrc導(dǎo)出表,.edata導(dǎo)入表,.idata調(diào)試信息段,.debug計(jì)算機(jī)程序10北方工業(yè)大學(xué)信息學(xué)院至此程序誕生,當(dāng)我們雙擊程序后,windows系統(tǒng)會(huì)根據(jù)后綴名進(jìn)行注冊(cè)表查找相應(yīng)的啟動(dòng)程序,對(duì)程序進(jìn)行運(yùn)行。一個(gè)標(biāo)準(zhǔn)的PE文件結(jié)構(gòu)。計(jì)算機(jī)程序11北方工業(yè)大學(xué)信息學(xué)院程序的運(yùn)行程序從入口點(diǎn)開始順序執(zhí)行,CPU直接與內(nèi)存中的程序打交道,讀取內(nèi)存中的數(shù)據(jù)進(jìn)行處理,并將結(jié)果保存到內(nèi)存,除非代碼段中還有保存數(shù)據(jù)到硬盤的代碼,否則程序全程都不會(huì)在硬盤中存儲(chǔ)任何數(shù)據(jù)。逆向工程及應(yīng)用逆向工程
一切從產(chǎn)品中提取原理及設(shè)計(jì)信息并應(yīng)用于再造及改進(jìn)的行為,都是逆向工程,例如惡意軟件分析等等。在安全對(duì)抗中第一步要做的就是逆向分析,需要弄清樣本是什么,良性的還是惡意的、樣本做了哪些事情以及如何進(jìn)行反制。12北方工業(yè)大學(xué)信息學(xué)院逆向工程應(yīng)用無(wú)文檔學(xué)習(xí):假設(shè)某個(gè)公司對(duì)同行的產(chǎn)品很感興趣,想知道另一種算法的優(yōu)點(diǎn)是什么,就需要對(duì)其產(chǎn)品進(jìn)行逆向分析和算法還原。漏洞挖掘和安全性檢測(cè):對(duì)于一些安全性要求較高的行業(yè),為確保軟件安全,但又無(wú)法獲取源碼時(shí),就需逆向還原軟件的運(yùn)行過(guò)程,確保軟件的安全可靠。病毒分析:通過(guò)逆向病毒,獲取病毒傳播方法,遏制病毒傳播、獲取病毒隱藏手段,根除病毒、溯源定位攻擊者。逆向技術(shù)原理
“逆向”就是與將源碼變?yōu)榭蓤?zhí)行程序的順序相反,將編譯鏈接好的程序反過(guò)來(lái)恢復(fù)成“代碼級(jí)別”。因源代碼編譯是“不可逆”過(guò)程,無(wú)法從編譯后的程序逆推出源代碼。通過(guò)工具軟件對(duì)程序進(jìn)行反編譯,將二進(jìn)制程序反編譯成匯編代碼,甚至可以將一些程序恢復(fù)成更為高級(jí)的偽代碼狀態(tài)。
不同的操作系統(tǒng),不同的編程語(yǔ)言,反匯編出的代碼大相庭徑。13北方工業(yè)大學(xué)信息學(xué)院C++程序反匯編結(jié)果.net程序反匯編結(jié)果常用軟件分析工具
如果僅依靠閱讀這些代碼來(lái)梳理程序運(yùn)行過(guò)程,叫做“靜態(tài)調(diào)試”。
“動(dòng)態(tài)調(diào)試”則是讓程序運(yùn)行起來(lái),更加直觀的觀察程序的運(yùn)行過(guò)程。在動(dòng)態(tài)調(diào)試中,斷點(diǎn)起著很大的作用,否則程序?qū)⒉粫?huì)暫停下來(lái)讓你慢慢觀察各寄存器狀態(tài)。14北方工業(yè)大學(xué)信息學(xué)院常用靜態(tài)分析工具:IDAPro,c32asm,Win32Dasm,VBDecompilerpro常用動(dòng)態(tài)分析工具:Ollydbg,Windbg常用軟件分析工具IDAPro
首先用C語(yǔ)言編寫一個(gè)簡(jiǎn)單的程序,生成exe文件,例如“test1.exe”,對(duì)其進(jìn)行逆向分析
在IDA中選擇要導(dǎo)入的“test1.exe”文件,加載后,有三種分析方式進(jìn)行選擇:?
Portableexecutablefor80386(PE)[pe.ldw]:分析PE格式文件?
MS-DOSexecutable(EXE)[dos.ldw]:分析DOS控制臺(tái)下的文件?
Binaryfile:分析二進(jìn)制文件15北方工業(yè)大學(xué)信息學(xué)院這里選擇PE格式文件進(jìn)行分析,點(diǎn)擊“OK”常用軟件分析工具
經(jīng)過(guò)分析后,會(huì)顯示如下視圖窗口16北方工業(yè)大學(xué)信息學(xué)院其中:IDAView-A用于顯示分析結(jié)果,可選流程圖或代碼形式;HexView-A為二進(jìn)制視圖窗口,打開文件的二進(jìn)制信息;Structures為添加結(jié)構(gòu)體信息窗口;Enums為添加枚舉信息窗口;Imports為分析文件中的導(dǎo)入函數(shù)信息窗口;Exports為分析文件中的導(dǎo)出函數(shù)信息窗口;此外還有Names名稱窗口,分析文檔中用到的標(biāo)號(hào)名稱;Functions,用于分析文件中的函數(shù)信息窗口,Strings窗口我們?cè)谀嫦蚍治鰰r(shí),主要觀測(cè)的界面時(shí)IDAView-A常用軟件分析工具 IDAView主要包括三個(gè)區(qū)域:地址區(qū),以PE文件加載到內(nèi)存后的虛地址為準(zhǔn),鏡像地址+偏移地址;OpCode操作區(qū),需要通過(guò)Options->General->設(shè)置Numberofopcodebytes為8顯示出來(lái);以及反編譯代碼區(qū),雙擊函數(shù)或變量名能跳轉(zhuǎn)對(duì)應(yīng)的地址。17北方工業(yè)大學(xué)信息學(xué)院常用軟件分析工具 HexView窗口顯示16進(jìn)制,默認(rèn)為只讀狀態(tài),可以用快捷鍵F2對(duì)數(shù)據(jù)區(qū)域(綠色字符區(qū)域)在只讀和編輯兩種狀態(tài)切換。18北方工業(yè)大學(xué)信息學(xué)院常用軟件分析工具 Strings窗口用于顯示程序中所有字符串,有助于通過(guò)程序的運(yùn)行輸出逆向找出對(duì)應(yīng)的代碼片斷。19北方工業(yè)大學(xué)信息學(xué)院常用軟件分析工具
“test1.exe”文件反匯編結(jié)果如圖所示,我們可以看到反匯編后的代碼,將其拷貝到IDE中,稍加修改就可以進(jìn)行編譯連接。IDA中查詢數(shù)據(jù)非常簡(jiǎn)單,只需雙擊標(biāo)號(hào),就可跟蹤到該數(shù)據(jù)的定義處。查看函數(shù)的實(shí)現(xiàn)方式也是如此。IDA大大降低了將二進(jìn)制文件還原成C/C++代碼的難度。20北方工業(yè)大學(xué)信息學(xué)院常用軟件分析工具 IDA常用快捷鍵21北方工業(yè)大學(xué)信息學(xué)院編號(hào)快捷鍵功能說(shuō)明1Enter跟進(jìn)函數(shù)實(shí)現(xiàn),查看標(biāo)號(hào)對(duì)應(yīng)的地址2Esc返回跟進(jìn)處3A解釋光標(biāo)處的地址為一個(gè)字符串的首地址4B十六進(jìn)制與二進(jìn)制轉(zhuǎn)換5C解釋光標(biāo)處的地址為一條指令6D解釋光標(biāo)處的地址為數(shù)據(jù),每按一次將會(huì)轉(zhuǎn)換這個(gè)地址的數(shù)據(jù)長(zhǎng)度7G快速查找到對(duì)應(yīng)地址8H十六進(jìn)制與十進(jìn)制轉(zhuǎn)換9K將數(shù)據(jù)解釋為棧變量10;添加注釋11M解釋為枚舉成員12N重新命名13O解釋地址為數(shù)據(jù)偏移量,用于字符串標(biāo)號(hào)14T解釋數(shù)據(jù)為一個(gè)結(jié)構(gòu)體成員15X轉(zhuǎn)換試圖到交叉參考模式16Shift+F9添加結(jié)構(gòu)體常用軟件分析工具OllyDbg
22北方工業(yè)大學(xué)信息學(xué)院1.匯編代碼對(duì)應(yīng)的地址窗口2.匯編代碼對(duì)應(yīng)的十六進(jìn)制機(jī)器碼窗口3.反匯編窗口4.反匯編代碼對(duì)應(yīng)的注釋信息窗口5.寄存器信息窗口6.當(dāng)前執(zhí)行到的反匯編代碼的信息窗口7.數(shù)據(jù)窗口—數(shù)據(jù)所在的內(nèi)存地址8.數(shù)據(jù)窗口—數(shù)據(jù)的十六進(jìn)制編碼信息9.數(shù)據(jù)窗口—數(shù)據(jù)對(duì)應(yīng)的ASCⅡ碼信息10.棧窗口—棧地址11.棧窗口—棧地址中存放的數(shù)據(jù)12.棧窗口—對(duì)應(yīng)的說(shuō)明信息常用軟件分析工具 OllyDbg常用快捷鍵23北方工業(yè)大學(xué)信息學(xué)院編號(hào)快捷鍵說(shuō)明1F2斷點(diǎn),使用F2指定斷點(diǎn)地址2F3加載一個(gè)可執(zhí)行程序,進(jìn)行調(diào)試分析3F4程序執(zhí)行到光標(biāo)處4F5縮小、還原當(dāng)前窗口5F7單步步入,進(jìn)入函數(shù)實(shí)現(xiàn)內(nèi),跟進(jìn)到CALL地址處6F8單步步過(guò),越過(guò)函數(shù)實(shí)現(xiàn),CALL指令不會(huì)跟進(jìn)函數(shù)實(shí)現(xiàn)7F9運(yùn)行程序,遇到斷點(diǎn)處程序暫停8Ctrl+F2重新運(yùn)行程序到起始處,重新調(diào)試程序9Ctrl+F9執(zhí)行到函數(shù)返回處,跳出函數(shù)實(shí)現(xiàn)10Atl+F9執(zhí)行到用戶代碼處,快速跳出系統(tǒng)函數(shù)11Ctrl+G輸入十六進(jìn)制地址,在反匯編或數(shù)據(jù)窗口中快速定位到該地址工具使用示例CTF例題
題目鏈接:/task/answer?type=reverse&number=4&grade=0&id=5074&page=124北方工業(yè)大學(xué)信息學(xué)院工具使用示例25北方工業(yè)大學(xué)信息學(xué)院0x01
首先下載題目提供的附件程序,運(yùn)行可以看到程序應(yīng)該是輸入正確順序,從而使八個(gè)圖案都變亮,得到flag工具使用示例26北方工業(yè)大學(xué)信息學(xué)院0x02
使用PE工具查看可執(zhí)行文件信息我們直接使用IDA進(jìn)行分析工具使用示例27北方工業(yè)大學(xué)信息學(xué)院0x04IDA在左邊搜索框中輸入”main”,搜索主函數(shù);在搜索結(jié)果中點(diǎn)擊_main,進(jìn)入主函數(shù);按F5鍵查看偽代碼,跟進(jìn)main函數(shù)工具使用示例28北方工業(yè)大學(xué)信息學(xué)院0x05
主函數(shù)主函數(shù)先判斷是輸入的是否是1-8,然后進(jìn)行循環(huán),這個(gè)時(shí)候應(yīng)該就是程序的亮暗的顯示,然后,如果byte_532E28每一位都是1,那么,就會(huì)進(jìn)入sub_457AB4。猜測(cè)這里應(yīng)該就是最后的flag的地方,跟進(jìn)該函數(shù)注:若IDA不能正確的獲得自定義函數(shù)的名字,那么IDA會(huì)用sub__加上自定義函數(shù)的起始地址來(lái)定義函數(shù)的名字工具使用示例29北方工業(yè)大學(xué)信息學(xué)院0x06
可能含flag的函數(shù)函數(shù)定義了v2,v3,v4,v5四個(gè)字符串?dāng)?shù)組輸出提示信息“done!
The
flag
is”,說(shuō)明flag就在該函數(shù)內(nèi)然后對(duì)v5字符串?dāng)?shù)組賦初值,從0到56號(hào)元素,這里只展示一部分工具使用示例30北方工業(yè)大學(xué)信息學(xué)院0x06
可能含flag的函數(shù)對(duì)v2字符串?dāng)?shù)組每個(gè)元素賦初值,從0到21號(hào)元素。賦值v3字符串?dāng)?shù)組時(shí),首先前12個(gè)來(lái)自復(fù)制的字符串,接著賦值第12號(hào)到31號(hào)元素。memcpy函數(shù)工具使用示例31北方工業(yè)大學(xué)信息學(xué)院0x06
可能含flag的函數(shù)將字符串的值復(fù)制給v4循環(huán)里調(diào)用的是v2字符串,進(jìn)行56次循環(huán),但是v2只有22位根據(jù)v2,v3,v4的字符串長(zhǎng)度聯(lián)想到,56=22+32+4,而v2,v3,v4的地址連接在一起,故這里的v2其實(shí)是v2,v3,v4連接起來(lái)的字符串循環(huán)中v2每一位與v5進(jìn)行異或,然后與無(wú)符號(hào)0x13(u代表無(wú)符號(hào)數(shù))進(jìn)行異或最后輸出v2,即為flag工具使用示例32北方工業(yè)大學(xué)信息學(xué)院0x07
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025內(nèi)蒙古呼和浩特市力信社會(huì)工作服務(wù)中心招聘考試參考試題及答案解析
- 2025福建福州羅源縣衛(wèi)健系統(tǒng)事業(yè)單位招聘編內(nèi)41人模擬試卷及答案詳解(有一套)
- 2025廣西柳州市考試錄用公務(wù)員(人民警察)體能測(cè)評(píng)模擬試卷及答案詳解參考
- 2025年福建省漳州市圓山勞務(wù)派遣服務(wù)有限公司招聘若干人考前自測(cè)高頻考點(diǎn)模擬試題及一套答案詳解
- 2025湖南長(zhǎng)沙藝術(shù)學(xué)校教師招聘68人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(各地真題)
- 2025科學(xué)技術(shù)部新質(zhì)生產(chǎn)力促進(jìn)中心高層次專業(yè)技術(shù)人才招聘3人考試參考題庫(kù)及答案解析
- 2025安徽合肥科技農(nóng)村商業(yè)銀行校園招聘48人考試參考題庫(kù)及答案解析
- 2025甘肅張掖市教育局培黎職業(yè)學(xué)院引進(jìn)高層次人才14人模擬試卷附答案詳解(黃金題型)
- 2025黑龍江黑河市愛(ài)輝區(qū)花園社區(qū)衛(wèi)生服務(wù)中心招聘非事業(yè)編制人員7人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(必刷)
- 2025廣東清遠(yuǎn)市連南瑤族自治縣赴高校設(shè)點(diǎn)招聘教師29人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(奪冠系列)
- 2025年共青團(tuán)員必背的100個(gè)重點(diǎn)知識(shí)匯編
- 【《離心泵葉輪的水力設(shè)計(jì)過(guò)程案例綜述》2200字】
- 2025年新聞宣傳、新聞采編專業(yè)及理論知識(shí)考試題(附含答案)
- 執(zhí)法監(jiān)督培訓(xùn)課件
- 股權(quán)投資基金培訓(xùn)課件
- 千川投手培訓(xùn)課件
- 2025年中國(guó)注塑機(jī)熔膠筒螺桿市場(chǎng)調(diào)查研究報(bào)告
- 皮膚科入科培訓(xùn)
- 職業(yè)培訓(xùn)班級(jí)管理制度
- 鄉(xiāng)鎮(zhèn)網(wǎng)絡(luò)安全管理制度
- 高處墜落傷的急救與護(hù)理
評(píng)論
0/150
提交評(píng)論