二進(jìn)制課程-pwn基礎(chǔ)知識(shí)_第1頁(yè)
二進(jìn)制課程-pwn基礎(chǔ)知識(shí)_第2頁(yè)
二進(jìn)制課程-pwn基礎(chǔ)知識(shí)_第3頁(yè)
二進(jìn)制課程-pwn基礎(chǔ)知識(shí)_第4頁(yè)
二進(jìn)制課程-pwn基礎(chǔ)知識(shí)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余79頁(yè)可下載查看

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)基礎(chǔ)01

02

進(jìn)程管理05進(jìn)程虛擬空間與

03

04*nix調(diào)試環(huán)境二進(jìn)制程序 挖掘第一章操作系統(tǒng)基礎(chǔ)第一章01計(jì)算機(jī)基礎(chǔ)

馮計(jì)算機(jī)工作模型器用來(lái)容納程序和數(shù)據(jù)程序由指令組成,并和數(shù)據(jù)一起

在計(jì)算機(jī)內(nèi)存中。第一章01

計(jì)算機(jī)基礎(chǔ)

一種簡(jiǎn)明的計(jì)算機(jī)結(jié)構(gòu)第一章,是一些具有如下02:操作系統(tǒng)目標(biāo)是計(jì)算機(jī)系統(tǒng)的一個(gè)系統(tǒng)功能的程序模塊的集合:能有效地組織和管理計(jì)算機(jī)硬件和 資源能合理組織計(jì)算機(jī)的工作流程,控制程序的執(zhí)行能透明地向用戶提供各種服務(wù)功能,使用戶能夠靈活、方便地使用計(jì)算機(jī),使整個(gè)計(jì)算機(jī)系統(tǒng)能高效地運(yùn)行第一章02:操作系統(tǒng)目標(biāo)操作系統(tǒng)的目標(biāo)(質(zhì)量模型)方便性(方便,易學(xué)、易用)有效性(有效管理各類系統(tǒng) 資源,提高系統(tǒng)的利用率和吞吐率)可擴(kuò)充性(可修改性,可擴(kuò)展性好)開(kāi)放性(移植性,互操作性好)操作系統(tǒng)的作用作為計(jì)算機(jī)系統(tǒng)資源的管理者;作為用戶與計(jì)算機(jī)硬件系統(tǒng)之間的接口;操作系統(tǒng)結(jié)構(gòu)模型一般采用基于 級(jí)保護(hù)的層次化結(jié)構(gòu)模型第一章03:典型操作系統(tǒng)第一章03:典型操作系統(tǒng)第一章04:Unix

V.S.

WindowsUNIX:內(nèi)核和外層有機(jī)結(jié)合。內(nèi)核小、簡(jiǎn)潔,常駐內(nèi)存,保證系統(tǒng)高效運(yùn)行;外層--各種工具容易串接組合。包含非常的實(shí)用程序和豐富的支持可移植性、可擴(kuò)展性好和安全性好;是一個(gè)支持多任務(wù)多用戶系統(tǒng)開(kāi)放源代碼WINDOWS多任務(wù)操作環(huán)境圖形化工作環(huán)境和用戶界面,界面友好(→傻瓜機(jī))屬于準(zhǔn)微內(nèi)核體系,兼顧性能和效率V.S.第一章05:操作系統(tǒng)主要功能概述一、進(jìn)程與線程管理主要任務(wù)是對(duì)CPU的分配和運(yùn)行實(shí)施有效管理具體功能包括進(jìn)程控制:負(fù)責(zé)進(jìn)行的創(chuàng)建、撤銷和狀態(tài)轉(zhuǎn)換進(jìn)程同步:對(duì)并發(fā)執(zhí)行的多進(jìn)程進(jìn)行協(xié)調(diào)進(jìn)程通信:負(fù)責(zé)完成進(jìn)程間的信息交換進(jìn)程調(diào)度:按一定的算法進(jìn)行CPU分配第一章05:操作系統(tǒng)主要功能概述二、

管理主要任務(wù)是對(duì)內(nèi)存進(jìn)行分配、保護(hù)和擴(kuò)充具體功能包括內(nèi)存分配:按一定的策略為每道程序分配內(nèi)存內(nèi)存保護(hù):保證各程序在自己的內(nèi)存區(qū)域內(nèi)運(yùn)行不受其它并發(fā)執(zhí)行程序影響。內(nèi)存擴(kuò)充:為允許大型作業(yè)或多作業(yè)并發(fā)運(yùn)行,必須借助虛擬技術(shù)來(lái)獲得更大“虛擬”內(nèi)存第一章05:操作系統(tǒng)主要功能概述三、設(shè)備管理是OS中最龐雜、最瑣碎部分具體功能包括設(shè)備分配:按一定原則對(duì)設(shè)備進(jìn)行分配。為使設(shè)備能與主機(jī)并行工作,需大量采用緩沖技術(shù)和虛擬技術(shù)設(shè)備傳輸控制:實(shí)現(xiàn)物理設(shè)備的I/O操作,包括啟動(dòng)、中斷處理和結(jié)束處理等操作。第一章05:操作系統(tǒng)主要功能概述四、文件管理OS中負(fù)責(zé)信息管理部分稱為文件系統(tǒng)具體功能包括文件的 空間管理(分配、回收)

管理: 是為方便文件管理而采用的基本數(shù)據(jù)結(jié)構(gòu),它能提供“按名存取”功能。文件操作管理:實(shí)現(xiàn)文件的基本操作,包括打開(kāi)、關(guān)閉、讀、寫(xiě)等。文件保護(hù):提供文件安全保護(hù)的有關(guān)功能和設(shè)施。第二章進(jìn)程(Task)的概念進(jìn)程是執(zhí)行程序的一個(gè)實(shí)例進(jìn)程和程序的區(qū)別幾個(gè)進(jìn)程可以并發(fā)的執(zhí)行一個(gè)程序一個(gè)進(jìn)程可以順序的執(zhí)行幾個(gè)程序第二章01:進(jìn)程描述符為了管理進(jìn)程,內(nèi)核必須對(duì)每個(gè)進(jìn)程進(jìn)行清晰的描述。進(jìn)程描述符提供了內(nèi)核所需了解的進(jìn)程信息include/linux/sched.hstruct

task_struct數(shù)據(jù)結(jié)構(gòu)很龐大基本信息管理信息控制信息第二章02:進(jìn)程狀態(tài)可運(yùn)行狀態(tài)(TASK_RUNNING)可中斷的等待狀態(tài)(TASK_INTERRUPTIBLE)不可中斷的等待狀態(tài)(TASK_UNINTERRUPTIBLE)暫停狀態(tài)(TASK_STOPPED)僵死狀態(tài)(TASK_ZOMBIE)第二章03:進(jìn)程狀態(tài)轉(zhuǎn)換圖03:進(jìn)程標(biāo)識(shí)使用進(jìn)程描述符地址進(jìn)程和進(jìn)程描述符之間有非常嚴(yán)格的一一對(duì)應(yīng)關(guān)系,使得用32位進(jìn)程描述符地址標(biāo)識(shí)進(jìn)程非常方便使用PID

(Proce

,PID)每個(gè)進(jìn)程的PID都存放在進(jìn)程描述符的pid域中新pid的產(chǎn)生:get_pid?

+1循環(huán)第二章04:進(jìn)程創(chuàng)建許多進(jìn)程可以并發(fā)的運(yùn)行同一程序,這些進(jìn)程共享內(nèi)存中程序正文的單一副本,但每個(gè)進(jìn)程有自己的單獨(dú)的數(shù)據(jù)和堆棧區(qū)一個(gè)進(jìn)程可以在任何時(shí)刻可以執(zhí)行新的程序,并且在它的生命周期中可以運(yùn)行幾個(gè)程序又如,只要用戶輸入一條命令,s

進(jìn)程就創(chuàng)建一個(gè)新進(jìn)程第二章的方式來(lái)創(chuàng)建進(jìn)程,即子進(jìn)傳統(tǒng)的UNIX操作系統(tǒng)采用程 父進(jìn)程所擁有的所有資源。缺點(diǎn):創(chuàng)建過(guò)程慢、效率低事實(shí)上,子進(jìn)程的很多資源是不會(huì)使用到的現(xiàn)代UNIX內(nèi)核通過(guò)引入寫(xiě)時(shí)技術(shù)來(lái)解決這個(gè)問(wèn)題第二章04:進(jìn)程創(chuàng)建04:進(jìn)程創(chuàng)建寫(xiě)時(shí) 技術(shù),Copy-On-Writing,COWCOW技術(shù)允許父子進(jìn)程能讀相同的物理頁(yè)。內(nèi)核只為新生成的子進(jìn)程創(chuàng)建虛擬空間結(jié)構(gòu),但是不為這些段分配物理內(nèi)存,它們共享父進(jìn)程的物理空間,當(dāng)父子進(jìn)程中有更改相應(yīng)段的行為發(fā)生(即發(fā)生寫(xiě)操作時(shí))時(shí),再為子進(jìn)程相應(yīng)的段分配物理空間。第二章05:進(jìn)程相關(guān)APILinux提供了幾個(gè)系統(tǒng)調(diào)用來(lái)創(chuàng)建和終止進(jìn)程,以及執(zhí)行新程序。fork,vfork和clone系統(tǒng)調(diào)用創(chuàng)建新進(jìn)程,其中,clone創(chuàng)建輕量級(jí)進(jìn)程,必須指定要共享的資源。exec系統(tǒng)調(diào)用執(zhí)行一個(gè)新程序。exit系統(tǒng)調(diào)用終止進(jìn)程(進(jìn)程也可以因收到信號(hào)而終止)。第二章fork系統(tǒng)調(diào)用創(chuàng)建一個(gè)新進(jìn)程調(diào)用fork的進(jìn)程稱為父進(jìn)程新進(jìn)程是子進(jìn)程子進(jìn)程幾乎就是父進(jìn)程的完全。它的地址空間是父進(jìn)程的,一開(kāi)始也是運(yùn)行同一程序。fork為父子進(jìn)程返回不同的值05:進(jìn)程相關(guān)API第二章05:進(jìn)程相關(guān)APIexec系統(tǒng)調(diào)用執(zhí)行一個(gè)新程序很多情況下,子進(jìn)程從fork返回后很多會(huì)調(diào)用exec來(lái)開(kāi)始執(zhí)行新的程序。這種情況下,子進(jìn)程根本不需要讀或者修改父進(jìn)程擁有的所有資源。所以fork中地址空間的

依賴于Copy

On

Write技術(shù),降低fork的開(kāi)銷。第二章05:進(jìn)程相關(guān)APIIf

(result

=

fork()

==

0)

{/*

子進(jìn)程代碼*/…if(execve(“new_program”,…)<0)

{perror(“execve

failed”);exit(1);}}

else

if

(result

<

0)

{perror(“fork

failed”)}

else

{/*

result==子進(jìn)程的pid,父進(jìn)程將會(huì)從這里繼續(xù)執(zhí)行*/…}第二章05:進(jìn)程相關(guān)API分開(kāi)這兩個(gè)系統(tǒng)調(diào)用是有好處的:比如服務(wù)器可以fork許多進(jìn)程執(zhí)行同一個(gè)程序有時(shí)程序只是簡(jiǎn)單的exec,執(zhí)行一個(gè)新程序在fork和exec之間,子進(jìn)程可以有選擇的執(zhí)行一系列操作以確保程序以所希望的狀態(tài)運(yùn)行。比如重定向輸入輸出、關(guān)閉不需要的打開(kāi)文件、重置信號(hào)處理程序等。若單一的系統(tǒng)調(diào)用試圖完成所有這些功能將是笨重而低效的第二章05:進(jìn)程相關(guān)API進(jìn)程終止的一般方式是exit()系統(tǒng)調(diào)用這個(gè)系統(tǒng)調(diào)用可能由編程者明確的在代碼中另外,在控制流到達(dá)主過(guò)程[C中的main()函數(shù)]的最后一條語(yǔ)句時(shí),執(zhí)行exit()系統(tǒng)調(diào)用內(nèi)核可以強(qiáng)迫進(jìn)程終止當(dāng)進(jìn)程接收到一個(gè)不能處理或忽視的信號(hào)時(shí),比如SIGSEGV

信號(hào)當(dāng)在內(nèi)核態(tài)產(chǎn)生一個(gè)不可恢復(fù)的CPU異常而內(nèi)核此時(shí)正代表該進(jìn)程在運(yùn)行第二章第三章

進(jìn)程虛擬空間及01:進(jìn)程的虛擬空間為了管理進(jìn)程,內(nèi)核必須對(duì)每個(gè)進(jìn)程進(jìn)行清晰的描述,進(jìn)程描述符提供了內(nèi)核所需了解的進(jìn)程信息。include/linux/sched.hstruct

task

struct數(shù)據(jù)結(jié)構(gòu)非常龐大基本信息管理信息控制信息4GB的線性地址空間(32位操作系統(tǒng))某個(gè)線性空間之前,必須獲得該線性空間的許進(jìn)程最多能但進(jìn)程在可的全部線性因此,一個(gè)進(jìn)程的地址空間是由允許該進(jìn)程地址組成內(nèi)核使用線性區(qū)資源來(lái)表示線性地址空間每個(gè)線性區(qū)由起始線性地址、長(zhǎng)度和一些存取權(quán)限描述第三章01:進(jìn)程的虛擬空間01:進(jìn)程的虛擬空間線性區(qū)的開(kāi)始和結(jié)束都必須4KB對(duì)齊進(jìn)程獲得新線性區(qū)的一些典型情況:剛剛創(chuàng)建的新進(jìn)程使用exec系統(tǒng)調(diào)用裝載一個(gè)新的程序運(yùn)行將一個(gè)文件(或部分) 到進(jìn)程地址空間中當(dāng)用戶堆棧不夠用的時(shí)候,擴(kuò)展堆棧對(duì)應(yīng)的線性區(qū)……第三章第三章01:進(jìn)程的虛擬空間棧的增長(zhǎng)由高地址向低地址堆的增長(zhǎng)則由低向高01:進(jìn)程的虛擬空間線性區(qū)(Memory

Area)比如0x08048000——0x0804C000這段線性地址空間被分配給了一個(gè)進(jìn)程,進(jìn)程就可以 這段地址空間進(jìn)程只能 某個(gè)有效的memory

area。如果進(jìn)程試圖 一個(gè)有效的area之外的地址或者用不正確的方式訪問(wèn)一個(gè)有效的area,內(nèi)核將通過(guò)段異常(segmentation

fault)殺死這個(gè)進(jìn)程,即程序

。第三章第三章01:進(jìn)程的虛擬空間gdb調(diào)試信息:Program

received

signal

SIGSEGV,

Segmentation

fault.decode_4

(in=in@entry=0x2c615760

<Address

0x2c615760

outofbounds>,

inlen=inlen@entry=4096,

outp=outp@entry=0xbfffd4cc,outleft=outleft@entry=0xbfffd49c)

at

lib/base64.c:417分析結(jié)果:程序嘗試內(nèi)存地址0x2c615760,就是.text

section01:進(jìn)程的虛擬空間線性區(qū)中可以包含各種內(nèi)容可執(zhí)行文件代碼段的內(nèi)存,.data

section用來(lái)包含未初始化的全局變量,.bsssection器附加的代碼、數(shù)據(jù)、bss段數(shù)據(jù)段的內(nèi)存zero

page的內(nèi)存為庫(kù)函數(shù)和文件的內(nèi)存共享內(nèi)存的內(nèi)存區(qū)域的,比如通過(guò)malloc()函數(shù)申請(qǐng)的內(nèi)存區(qū)域第三章第三章01:進(jìn)程的虛擬空間01:進(jìn)程的虛擬空間進(jìn)程地址空間中所有有效的線性地址都確定的存在于一個(gè)area中memory

areas不進(jìn)程中每個(gè)單獨(dú)的area對(duì)應(yīng)一個(gè)不同內(nèi)存區(qū):堆棧、二進(jìn)制代碼、全局變量、文件 等等第三章內(nèi)核使用內(nèi)存描述符來(lái)描述進(jìn)程的整個(gè)地址空間(即進(jìn)程的全部線性區(qū))01:進(jìn)程的虛擬空間第三章內(nèi)存描述符內(nèi)存描述符包含了跟進(jìn)程地址空間相關(guān)的所有信息mm_u比mmmap和mm_rb是兩個(gè)不同的數(shù)據(jù)結(jié)構(gòu),但是包含了相同的東西:進(jìn)程地址空間中所有的memory

areas前者使用鏈表

areas后者用

樹(shù)

areas所有的mm_struct結(jié)構(gòu)通過(guò)mmlist域在一個(gè)雙向鏈表上。這個(gè)鏈表的第一個(gè)元素是idle進(jìn)程的mm_struct結(jié)構(gòu)01:進(jìn)程的虛擬空間vm_flags域描述有關(guān)這個(gè)線性區(qū)全部頁(yè)的信息。例如,進(jìn)程

每個(gè)頁(yè)的權(quán)限是什么。還有一些標(biāo)志描述線性區(qū)自身,例如它應(yīng)該如何增長(zhǎng)VM_READ,

VM_WRITE,

VM_EXECVM_SHAREDVM_VM_GROWSUP在

利用過(guò)程中經(jīng)常會(huì)采取通過(guò)篡改內(nèi)存頁(yè)面讀寫(xiě)執(zhí)行權(quán)限來(lái)達(dá)到利用目的。第三章01:進(jìn)程的虛擬空間缺頁(yè)異常如前所述,內(nèi)核只是通過(guò)mmap()等調(diào)用分配了一些線性地址空間給進(jìn)程,并沒(méi)有真正的把實(shí)際的物理頁(yè)框分配給進(jìn)程,當(dāng)進(jìn)程試圖這些分配給它的地址空間時(shí),比如一段線性地址空間的是二進(jìn)制代碼,則進(jìn)程被調(diào)度執(zhí)行的時(shí)候會(huì)跳轉(zhuǎn)到這個(gè)地址上去執(zhí)行。但此時(shí),并沒(méi)有物理頁(yè)框?qū)?yīng)于這些線性地址,從而會(huì)一個(gè)缺頁(yè)異常。第三章01:進(jìn)程的虛擬空間Linux內(nèi)核中通過(guò)缺頁(yè)異常處理程序do_page_fault處理缺頁(yè)異常。它可以判斷出這是不是一個(gè)合法的缺頁(yè)異常,如果是,則負(fù)責(zé)給這段線性地址分配一些物理頁(yè)框并把磁盤(pán)中對(duì)應(yīng)的文件寫(xiě)入這些物理頁(yè)框,這樣進(jìn)程得以正常運(yùn)行。對(duì)于的缺頁(yè)異常,內(nèi)核將通過(guò)段異常(segmentationfault)殺死該進(jìn)程。第三章第三章02:從源碼到可執(zhí)行文件發(fā)生了什么?在Linux下使用GCC將源碼編譯成可執(zhí)行文件的過(guò)程可以分解為4個(gè)步驟,分別是預(yù)處理、編譯、匯編和 。第三章02:?過(guò)程的本質(zhì)就是要把多個(gè)不同目標(biāo)文件粘一個(gè)整體,目標(biāo)文件之間相互拼合實(shí)際上是目標(biāo)文件之間對(duì)地址的

,即對(duì)函數(shù)和變量的地址的 。在鏈接中, 函數(shù)和變量統(tǒng)稱為符號(hào)(Symbol),函數(shù)名和變量名就是符號(hào)名(Symbol

Name), 可以將符號(hào)看做是

中的粘合劑,整個(gè) 過(guò)程正是基于符號(hào)才能夠正確完成。每個(gè)目標(biāo)文件都會(huì)有一個(gè)符號(hào)表(Symbol

Table),即.symtab段,這個(gè)表里記錄了目標(biāo)文件所用到的所有符號(hào)。每個(gè)定義的符號(hào)有一個(gè)對(duì)應(yīng)的值,叫做符號(hào)值(SymbolValue),對(duì)于變量和函數(shù)來(lái)說(shuō),符號(hào)值就是它們的地址。 可以通過(guò)readelf工具來(lái)查看符號(hào)表中所有的符號(hào)信息:第三章02:?readelf-s`whichcat`第三章02:程序的

方式1.

靜態(tài)方式(Static

Linking)裝入時(shí)動(dòng)態(tài)

(Loadtime

Dynamic

Linking)運(yùn)行時(shí)動(dòng)態(tài)

(Run-time

Dynamic

Linking)第三章02:1.

靜態(tài)方式(Static

Linking)第三章02:裝入時(shí)動(dòng)態(tài)

(Loadtime

Dynamic

Linking)優(yōu)點(diǎn):便于修改和更新。便于實(shí)現(xiàn)對(duì)目標(biāo)模塊的共享。缺點(diǎn):符號(hào)解析過(guò)程繁瑣第三章02:3.

運(yùn)行時(shí)動(dòng)態(tài)(Runtime

Dynamic

Linking)對(duì)模塊的

執(zhí)行時(shí)才執(zhí)行,即在執(zhí)行過(guò)程中,當(dāng)發(fā)現(xiàn)一個(gè)被調(diào)用模塊尚未裝入內(nèi)存時(shí),立即由OS去找到該模塊并將之裝入內(nèi)存,

把它

到調(diào)用者模塊上。凡在執(zhí)行過(guò)程中未被用到的目標(biāo)模塊,都不會(huì)被調(diào)入內(nèi)存和被到裝入模塊上,這樣不僅可加快程序的裝入過(guò)程,而且可節(jié)省大量的內(nèi)存空間。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)如何解決模塊間的數(shù)據(jù)以及調(diào)用、跳轉(zhuǎn)?objdump

-R

`which

cat`Linux

ELF的做法是通過(guò)在數(shù)據(jù)段中建立一個(gè)指向變量、目標(biāo)函數(shù)地址的指針數(shù)組,當(dāng)代碼需要引用該變量或者調(diào)用該函數(shù)時(shí),可以通過(guò)該數(shù)組中對(duì)應(yīng)的項(xiàng)進(jìn)行間接引用,該數(shù)據(jù)成為全局偏移表

(GlobalOffset

Table,

GOT)。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)模塊間函數(shù)的

執(zhí)行時(shí)才執(zhí)行,稱之為“延遲綁定

(Lazy

Binding)”。也程序開(kāi)始執(zhí)行時(shí),模塊間的函數(shù)調(diào)用都沒(méi)有進(jìn)行綁定,而是在需要用到的時(shí)候才由動(dòng)態(tài)器來(lái)負(fù)責(zé)綁定。這樣的做法可以大大加快程序的啟動(dòng)速度,特別有利于一些有大量函數(shù)和大量模塊的程序。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)ELF采用PLT(procedurelinkagetable)機(jī)制來(lái)實(shí)現(xiàn)延遲綁定,這種方法使用了很多精巧的指令序列來(lái)完成。在Linux中,動(dòng)態(tài)在掃描可執(zhí)行文件時(shí),一旦需要進(jìn)行模塊間外部函數(shù)的調(diào)用,則會(huì)啟用綁定函數(shù)_dl_runtime_resolve(mod,func)來(lái)確定模塊mod中的func函數(shù)址,并完成對(duì)對(duì)應(yīng)GOT表項(xiàng)的填充工作。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)PLT(Procedure

Linkage

Table)在GOT表基礎(chǔ)又做了一次間接跳轉(zhuǎn)。即模塊內(nèi)關(guān)于外部函數(shù)的地址 ,并不直接通過(guò)GOT跳轉(zhuǎn),而是通過(guò)一個(gè)叫做PLT項(xiàng)的結(jié)構(gòu)來(lái)進(jìn)行,每個(gè)外部函數(shù)的一個(gè)表項(xiàng),比如read()函數(shù)在PLT表中的表項(xiàng)稱為re都對(duì)應(yīng)PLT表中l(wèi)t,實(shí)現(xiàn)如下:re

lt:jmp

*(read@GOT)push

npush

link_mapjump

_dl_runtime_resolve第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)首先跳轉(zhuǎn)到GOT表,但此時(shí)GOT表中填充的為

plt+0x6的地址,因此,相當(dāng)于順序執(zhí)行。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)這個(gè)0x10是read函數(shù)在重定位表”.rel.plt”中的下標(biāo)。第三章第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)這個(gè)0x10是read函數(shù)在重定位表”.rel.plt”中的下標(biāo)。重定位表偏移0x10處的地址恰好為read函數(shù)在

got表中的位置。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)Link_map=*(GOT+4)該結(jié)構(gòu)包含符號(hào)表symtab、字符串表strtab等。在參數(shù)入棧之后,進(jìn)入dl_runtime_resolve。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)dl_runtime_resolve函數(shù)返回后,read@got的內(nèi)存已經(jīng)被替換為真實(shí)的read函數(shù)地址。這樣,在后續(xù)調(diào)用read函數(shù)時(shí),可以直接跳轉(zhuǎn)到 址。第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)既然GOT表的權(quán)限為R/W,那是不是可以搞點(diǎn)事情呢?第三章03:深入理解運(yùn)行時(shí)動(dòng)態(tài)演示手動(dòng)劫持GOT表第四章01:信息收集熟練掌握使用*nix系統(tǒng)的coreutils&binutils工具進(jìn)行初步的信息收集ELF文件格式64bitX86-64架構(gòu)動(dòng)態(tài)stripped其它工具:readelf/objdump/hexdump/size等第四章01:信息收集第四章02:靜態(tài)分析第四章函數(shù)枚舉窗體函數(shù)控制流圖窗體Python交互窗體第四章02:靜態(tài)分析IDA

pro自動(dòng)化分析IDA

pro的具有強(qiáng)大的擴(kuò)展能力,其提供了IDC(IDA

的 語(yǔ)言)和SDK(讓開(kāi)發(fā)者擴(kuò)展方便IDA

插件)以便用戶可以根據(jù)自己需要定制插件。2004

年Gergely

和Ero

Carrera

開(kāi)發(fā)了

IDAPython

插件,將強(qiáng)大的Python和IDA結(jié)合起來(lái),使得自動(dòng)化分析變得異常簡(jiǎn)單。而如今IDAPython被廣泛的使用于各種商業(yè)產(chǎn)品(比如BinNavi)和開(kāi)源工程(比如PaiMei

)中。第四章02:靜態(tài)分析IDA

python常見(jiàn)接口SegByName(

string

SegmentName

)通過(guò)段名字返回段基址,比如,如果調(diào)用.text

作為參數(shù),就會(huì)返回程序中代碼段的開(kāi)始位置SegName(

long

Address

)通過(guò)段內(nèi)的某個(gè)地址,獲得段名Functions(

long

StartAddress,

long

EndAddress

)返回一個(gè)列表,包含了從StartAddress

到EndAddress

之間的所有函數(shù)LocByName(

string

FunctionName

)通過(guò)函數(shù)名返回函數(shù)的地址CodeRefsTo(

long

Address,

bool

Flow

)返回一個(gè)列表,告訴

Address

處代碼被什么地方 了,F(xiàn)low

告訴IDAPython是否要這些代碼DataRefsTo(

long

Address

)返回一個(gè)列表,告訴

Address

處數(shù)據(jù)被什么地方常用于 全局變量。了。第四章02:靜態(tài)分析演示使用IDApython進(jìn)行自動(dòng)化分析尋找用的函數(shù)。比如(memcpy)等。bug

的時(shí)候,首先會(huì)找一些常用的而且容易被錯(cuò)誤使的字符串拷貝函數(shù)(strcpy,sprintf),內(nèi)存拷貝函數(shù)那么如何通過(guò)IDA

python自動(dòng)識(shí)別這些函數(shù)在哪里被調(diào)用的,即

函數(shù)調(diào)用自動(dòng)化識(shí)別?第四章02:動(dòng)態(tài)調(diào)試命令行調(diào)試工具GDB圖形化調(diào)試工具EDB,類似于windows的Ollydbg第四章02:動(dòng)態(tài)調(diào)試第四章02:動(dòng)態(tài)調(diào)試第四章02:動(dòng)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論