版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程實驗報告課程名稱:計算機系統(tǒng)基礎(chǔ)專業(yè)班級:學(xué)號:姓名:指導(dǎo)教師:報告日期:2016年5月24日計算機科學(xué)與技術(shù)學(xué)院目錄TOC o 1-5 h z實驗1:2實驗2:9實驗3:23 HYPERLINK l bookmark86 o Current Document 實驗總結(jié)32實驗1:數(shù)據(jù)表示1.1實驗概述本實驗的目的是更好地熟悉和掌握計算機中整數(shù)和浮點數(shù)的二進制編碼表示。實驗中,你需要解開一系列編程“難題”使用有限類型和數(shù)量的運算操作實現(xiàn)一組給定功能的函數(shù),在此過程中你將加深對數(shù)據(jù)二進制編碼表示的了解。實驗語言:c;實驗環(huán)境:linux1.2實驗容需要完成bits.c中下列函數(shù)功能,具體分為
2、三大類:位操作、補碼運算和浮點數(shù)操作。1.3實驗設(shè)計源碼如下:/*lsbZero-set0totheleastsignificantbitofxExample:lsbZero(0 x87654321)=0 x87654320Legalops:!&八|+Maxops:5Rating:1*/intlsbZero(intx)/x右移一位再左移一位實現(xiàn)把最低有效位置0 x=x1;x=x1;returnx;/*byteNot-bit-inversiontobytenfromwordxBytesnumberedfrom0(LSB)to3(MSB)Examples:getByteNot(0 x1234567
3、8,1)=0 x1234A978Legalops:!&八|+Maxops:6*Rating:2*/intbyteNot(intx,intn)/x第n個字節(jié)每位都和1異或?qū)崿F(xiàn)取反inty=0 xff;n=n3;y=yn;x=(xy);returnx;/*return0,return0,example:byteXor(0 x12345678,0 x87654321,1)=1byteXor(0 x12345678,0 x87344321,2)=0Legalops:!&八|+Maxops:20Rating:2*/intbyteXor(intx,inty,intn)/把x和y的第n個字節(jié)取出來異或,再轉(zhuǎn)
4、換為邏輯的0和1n=nn;y=yn;x=x&(0 xff);y=y&(0 xff);return!(x”/*logicalAnd-x&yLegalops:!&八|+Maxops:20Rating:3*/intlogicalAnd(intx,inty)/把X和y分別轉(zhuǎn)化為邏輯的0和1,再相與x=(!(!x)&(!(!y);returnX;/*logicalOr-X|yLegalops:!&八|+MaXops:20Rating:3*/intlogicalOr(intX,inty)/把x和y分別轉(zhuǎn)化為邏輯的0和1,再相或X=(!(!X)|(!(!y);returnx;/*rotateLeft-Rot
5、atextotheleftbynCanassumethat0=n=31Examples:rotateLeft(0 x87654321,4)=0 x76543218Legalops:&八|+!Maxops:25Rating:3*/introtateLeft(intx,intn)/先構(gòu)造低n位為1,高(32-n)位為0的數(shù)z,x左移n位后的數(shù)加上x右移(32-n)位的數(shù)&z即可intz;z=(131)(32+(n+1)&z)+(xn);returnx;/*parityCheck-returns1ifxcontainsanoddnumberof1s*Examples:parityCheck(5)=0
6、,parityCheck(7)=1Legalops:!&八|+Maxops:20Rating:4*/intparityCheck(intx)/每次將數(shù)的低半數(shù)位與高半數(shù)位比較,再把y右移31位,最后把y轉(zhuǎn)化為邏輯的0和1inty;y=x16;y=yx;y=y(y8);y=y(y4);y=y(y31;return!(!y);/*mul2OK-Determineifcancompute2*xwithoutoverflowExamples:mul2OK(0 x30000000)=1mul2OK(0 x40000000)=0*Legalops:&八|+Maxops:20Rating:2*/intmul
7、2OK(intx)/把x第31位和30位分別和1做按位與,再異或,再和1異或intm;m=(x31)&0 x1廠(x30)&0 x1);returnm0 x1;/*mult3div2-multipliesby3/2roundingtoward0,*ShouldexactlyduplicateeffectofCexpression(x*3/2),*includingoverflowbehavior.*Examples:mult3div2(11)=16*mult3div2(-9)=-13*mult3div2(1073741824)=-536870912(overflow)Legalops:!&八|
8、+Maxops:12Rating:2*/intmult3div2(intx)/左移一位再+x即x*3,右移一位的時候,當(dāng)y的最高位和最低位都為0時還要+1inty=(x1)+(y31)&1)&(y31)&1);returny;/*subOK-Determineifcancomputex-ywithoutoverflowExample:subOK(0 x80000000,0 x80000000)=1,subOK(0 x80000000,0 x70000000)=0,Legalops:!&八|+Maxops:20Rating:3*/intsubOK(intx,inty)/x的最高有效位和y的最高有
9、效位不同且x和(x-y)的最高位不同才能判斷溢出intm=(x31)&1;intn=(y31)&1;x=(mn)&(m八(x+(y+l)31)&1);return(!x);/*absVal-absolutevalueofxExample:absVal(-1)=1.*Youmayassume-TMax=x=TMaxLegalops:!&八|+Maxops:10Rating:4*/intabsVal(intx)/x最高位為0時就是x,最高位為1時是x+1inty=x31;x=(y&(x+1)+(y)&x);returnx;/*float_abs-Returnbit-levelequivalento
10、fabsolutevalueoffforfloatingpointargumentf.Boththeargumentandresultarepassedasunsignedints,buttheyaretobeinterpretedasthebit-levelrepresentationsofsingle-precisionfloatingpointvalues.WhenargumentisNaN,returnargument.Legalops:Anyinteger/unsignedoperationsincl.|,&.alsoif,whileMaxops:10Rating:2*/unsign
11、edfloat_abs(unsigneduf)intx=uf&(10 x7f800000)returnuf;elsereturnx;/*float_f2i-Returnbit-levelequivalentofexpression(int)fforfloatingpointargumentf.Argumentispassedasunsignedint,but*itistobeinterpretedasthebit-levelrepresentationofa*single-precisionfloatingpointvalue.*Anythingoutofrange(includingNaNa
12、ndinfinity)shouldreturn*0 x80000000u.*Legalops:Anyinteger/unsignedoperationsincl.|,&.alsoif,while*Maxops:30*Rating:4*/intfloat_f2i(unsigneduf)unsignednum=0 x80000000;intx=(uf&0 x007fffff廠0 x00800000;intorder=0;order=(uf&0 x7f800000)23;if(order158)returnnum;if(order31)&1)=1)if(order150)return(x(150-o
13、rder)+1;elseif(order150)returnx(150-order);1.4實驗過程編寫源碼,運行btest,得出實驗結(jié)果。1.5實驗結(jié)果ftangUwel(&esting:-/tangliwelt呂ngliwei(3esting:-$cdtangliwev/tangltwetesting:-/tangllwei$./btestScoreRatingErrorsFunction110IsbZero220byteNot220byteXor330logicalAnd330logicalOr330rotateLeft440parityCheck220muX20K220nult3dtv
14、2330subOK440absVal220floatabs440floatZfZtTotalpoints:35/3StangliweiQesting:-/tangltwei$可見13個函數(shù)全部正確。1.6實驗小結(jié)此次實驗主要考查的是對數(shù)據(jù)的處理,對此需要掌握數(shù)據(jù)在機器中的表示運用合理的位運算來實現(xiàn)相應(yīng)的功能。實驗2:BinaryBombs2.1實驗概述本實驗中,你要使用課程所學(xué)知識拆除一個“binarybombs來增強對程序的機器級表示、匯編語言、調(diào)試器和逆向工程等方面原理與技能的掌握。一個“binarybombs(二進制炸彈,下文將簡稱為炸彈)是一個Linux可執(zhí)行C程序,包含了6個階段(p
15、haselphase6)。炸彈運行的每個階段要求你輸入一個特定的字符串,若你的輸入符合程序預(yù)期的輸入,該階段的炸彈就被“拆除”,否則炸彈“爆炸”并打印輸出BOOM!字樣。實驗的目標(biāo)是拆除盡可能多的炸彈層次。每個炸彈階段考察了機器級語言程序的一個不同方面,難度逐級遞增:*階段1:字符串比較*階段2:循環(huán)*階段3:條件/分支*階段4:遞歸調(diào)用和棧*階段5:指針*階段6:鏈表/指針/結(jié)構(gòu)另外還有一個隱藏階段,但只有當(dāng)你在第4階段的解之后附加一特定字符串后才會出現(xiàn)。為了完成二進制炸彈拆除任務(wù),你需要使用gdb調(diào)試器和objdump來反匯編炸彈的可執(zhí)行文件,并單步跟蹤調(diào)試每一階段的機器代碼,從中理解每一
16、匯編語言代碼的行為或作用,進而設(shè)法“推斷”出拆除炸彈所需的目標(biāo)字符串。這可能需要你在每一階段的開始代碼前和引爆炸彈的函數(shù)前設(shè)置斷點,以便于調(diào)試。實驗語言:C語言實驗環(huán)境:linux2.2實驗容反匯編bomb,得到匯編代碼,根據(jù)匯編代碼完成拆炸彈任務(wù)。2.2.1階段1字符串比較任務(wù)描述:找到與輸入的字符串進行比較的存儲的字符串的首地址,進而得到存儲的字符串,得到結(jié)果。實驗設(shè)計:根據(jù)反匯編代碼一步一步分析,具體見實驗過程。實驗過程:將bomb反匯編輸出到asm.txt文件中,在反匯編代碼中查找phase_1的位置:O8048b9O:8048b9O:83ecsub$0 xlcesp8048b93:c
17、744240404d204movl$0 x804d204,Ox4(9fiesp)8048b9s:088048b9b:8b442420novxzo(?5esp),%esx8048b9f:890424nov%eax,(esp)8048bd2:e823OS0000call80490caing百not已quaL8048ba7:85C0test%eax,94eax8048bd9:7405je|8048bb0phdse_l+0 x20?*8048bdb:e825OS0000call80491d5所需要的兩個變量是存在于ebp所指的堆棧存儲單元里,在main函數(shù)中:8048acf:e878070000cal
18、l804924c8048ad4:890424movKeax,(%esp)得知%eax里存儲的是調(diào)用read_line()函數(shù)后返回的結(jié)果,就是輸入的字符串,所以得知和用戶輸入字符串比較的字符串的存儲地址為0 x804a204,可用gdb查看這個地址存儲的數(shù)據(jù)容:曇碁令tangllweiestln:-/U30H14S135x08043abe104tn/jsr/tncljde/t386-llniJM-gnij/btts/stdtoZ.h(fldb)niWeIconetomyfiendishlittieb?mb+Youhavephaseswith&x&8fl48at3tnprtntf_ffflt=)
19、jt/sr/triclijde/t3fl6-ltriLjK-gAj/btts/stdta2.h:104104In/usr/tnclude/tSSe-ltnuK-gnu/tlts/stdiaZ.h(fldb)niBx08048acfl104in/jsr/include/i386-Iinux-gru/bit5/5tdio2,h(gdb)ntwhichtoblahy&urselfup.HaveantcedyLPlain(argc=l,argv=aKffffdlb4)atbomb.c:7373input工read_lirie();/*Getinput(gdb)rrintnini74phase_l(in
20、put);/*Runthephase(gdb)m/20 xArgumentrequired(stsrtirgdisplayaddress).(gdb)x/26xOK64a264&K84a204:2065605075747566&K772&6572x2S6c6c69&xaMa214t0X6220656265747465&Xfif7420720K72726f6d&Ka04a224:0Xfl02e77fif&K2177fif57&K7SCfS5200X206576279X0043234:0X75&6&564OKZ064&5733X206560740X7Z&36573dx8Q4a244:9X73Z07
21、4650 x656761745x642500210 x26632520(gdb)|翻譯過后的結(jié)果為Thefuturewillbebettertomorrow.實驗結(jié)果:tangliweie5ting:*/li201414313tarigliweiesticdU29141481S/tdngliweiesttng:/U201414ai3$./bombWelcometomyfiendishlittlebomb*Vouhave6phaseswithwhichtoblowyourselfup.Haveaniceday!Thefuturewillbebettertomorrow.Phase1defused
22、.Howabout七hEnex七one?可見結(jié)果正確。2.2.2階段2循環(huán)任務(wù)描述:完成炸彈2的拆除實驗設(shè)計:觀察分析phase_2代碼,使用gdb調(diào)試分析結(jié)果實驗過程:找到phase_2代碼:08048bt)4:S04Sbb4563048bb5538048bb&83SC348048bb98d442418Ba4BbbdB94424348O48bcl8b424408O48bc589&4248048bcSe82f0600SO8048bcd837c2418SO8048bd27S078048bd1337c24lcQI8948bd9了斗If8048bdbe8fS0500SOB64EbeSeb18S048
23、be28b43f8S048be50343fc8048be839&38048bea74058048b&ce&OS00008048bf133c3048048bf439f38048bf675eafi646bfBebOafi64Bbfa8d5c24203048bfe3d742430S948C02ebde8048C0483c434B048C07Sb8O48C0S5eS048C09cSpush9fiesipush%ebxsub$0 x34,?6esplea0K18(%esp)3eaxnow9S&3K,OK(esp)novOxO(9fiesp)nov%eax,(Kesp)call80491fccnplS0
24、x0,0 xl8(%esp)jneSOlSbdbcphase_2+0 x27!cnpl$0 x1,0 xlct?fiesp)jesoisbfacallS0191d5-c&xplode_bombadd$0 x4,9fiebxcmp%est,%ebxjne&048be?jnp8f)48c94cphase_2+Ox50=*leaOx2O(9fiesp)3&bxleaOK3O(9tiesp)jnpsoisbezadd$0 x34,%esppop需ebxpop9fiesiret由read_six_numbers知是要輸入6個數(shù)字,觀察8048bcd:837c2418008048bd2:75078048b
25、d4:837c241C018048bd9:74If8048bdb:e8f5050000cmpljnecmpljecall$0 x0,OxlS(9fiesp)8048bdb$0 x1,0 xlc(9fiesp)8048bfdphase_2+0 x46?*8049Ld5explode_bomb?*可知輸入的第一個和第二個必須依次為0,1804Sbfd:804Sbfe:8048C02:0023422c4e7dddb88e0 x?O(9fiesp),9fiebx0 x3O(9fiesp),9fiesi8048be28048be2:8b43f8nov-Ox8(9iebx),9fieax8048be5:9
26、343fcadd-Ox4(9iebx),9fieax8048be&:3903cmp%eax,(9Sebx)8048bea:7435je8048bf1觀察這兩個循環(huán)可知只有當(dāng)輸入的數(shù)為前兩個數(shù)之和時才不會bomb,故得到序列0,1,1,2,3,54.實驗結(jié)果:輸入上述序列后得:tangliweiestrng:-/U2D1414013gliweiResting:-/11291414813$./bombWelcometonyfiendishLittiebomb.Youhave6phaseswithwhtchtoblowyourselfup.Haveani匚巴day!Thefuturewillbebe
27、ttertomorrow.Phase1defused*Howaboutthenextore?011235Thatsnumber2.Keepgoing可知結(jié)果正確。2.2.3階段3條件/分支任務(wù)描述:完成炸彈3的拆除實驗設(shè)計:觀察分析phase_3代碼,使用gdb調(diào)試分析結(jié)果實驗過程:找到phase_3代碼如下:08048c0a:8048c0a:83ec3csub$0 x3c,%esp8048c0d:8d44242clea0 x2c(%esp),%eax8048c11:89442410mov%eax,0 x10(%esp)8048c15:8d442427lea0 x27(%esp),%eax80
28、48c19:8944240cmov%eax,0 xc(%esp)8048c1d:8d442428lea0 x28(%esp),%eax8048c21:89442408mov%eax,0 x8(%esp)8048c25:c74424044ea204movl$0 x804a24e,0 x4(%esp)由此行代碼查看輸入容:(gdb)x/s0 xS04a24e0 x8O4d24e:,FKd敘臨可知輸入的依次是數(shù)字、字符、數(shù)字8048c43:838048c43:837c2428078048c48:0f87f5000000cmpl$0 x7,0 x28(%esp)ja8048d438048d43:e88
29、d0400008048d43:e88d040000call80491d5可見輸入的第一個數(shù)一定小于78048c4e:8b4424288048c4e:8b442428mov0 x28(%esp),%eax8048c52:ff248560a20408jmp*0 x804a260(,%eax,4)假設(shè)輸入的第一個數(shù)為0,即(%eax)=0,所以:(gdb)p/X*0 xS04a26O$4=0X8O48C598048c59:b876000000mov$0 x76,%eax8048c5e:817c242c040100cmpl$0 x104,0 x2c(%esp)所以第二個字符ascll碼為0 x76,即
30、字符v而第三個數(shù)為0 x104,即260實驗結(jié)果:tdngli-wetesttng:/U2eil414813$,/bonbans.txtWelconetonyftendi&hlittlebomb*Youhave6phaseswithwhich七oblowyourselfup.Haveanl匚呂day1Phase1defused.Howabout七hinex七one?That1snumber2.Kee-pgoing!0v26Halfwoy七here1從實驗結(jié)果來看結(jié)果正確,拆彈成功。2.2.4階段4遞歸調(diào)用和棧任務(wù)描述:拆除炸彈4實驗設(shè)計:觀察分析phase_4代碼,使用gdb調(diào)試分析結(jié)果3實驗
31、過程:08048db98048db9:&3ec2csub$Ox2c,9fiesp8048dbc:&cJ4424lcleaOxlc(%esp),%eax8048dc3:894424OcP1OVKeax,Oxc(%esp)8048dc4:&cJ442418lea0 xl8(%esp),%eax8048dc8:89442498P1OVKeax,0 x8(%esp)8048dcc:c7442494cfa304PlOVl$0 x804d3cf,0 x4(%esp)8048dd3:08用x/sb0 x804a3cf來查詢有幾個輸入以及輸入的類型,如下所示:(gdb)x/sb0 xS&4a3cf9x804a
32、3cfrM(9db)|由此可見輸入是兩個整數(shù)。再由phase_4中:&號7c24lcIf7435eSt703000083C42CC3&948el2:84&el7;&948el2:84&el7;804&C19;8943ele:8943e21;je8048elephase_4+0 xcdll80491d5explode_boradd$0 x2c#%e&p吐知道func4第二個參數(shù)值為If,即37再仔細研究func4函數(shù),發(fā)現(xiàn)其實現(xiàn)了遞歸調(diào)用:08048d5c:8048d5c:56push%esi8048d5d:53push%ebx8048d5e:83ec14sub$0 x14,%esp8048d6
33、1:8b542420mov0 x20(%esp),%edx/ebx是傳遞的參數(shù)/8048d65:8b442424mov0 x24(%esp),%eax8048d69:8b742428mov0 x28(%esp),%esi8048d6d:89f1mov%esi,%ecx8048d6f:29c1sub%eax,%ecx8048d71:89cbmov%ecx,%ebx8048d73:c1eb1fshr$0 xlf,%ebx/ebx右移31位/8048d76:01d9add%ebx,%ecx8048d78:d1f9sar%ecx8048d7a:8d1c01lea(%ecx,%eax,1),%ebx80
34、48d7d:39d3cmp%edx,%ebx8048d7f:7e17jle8048d988048d81:8d4bfflea-0 x1(%ebx),%ecx8048d84:894c2408mov%ecx,0 x8(%esp)8048d88:89442404mov%eax,0 x4(%esp)8048d8c:891424mov%edx,(%esp)8048d8f:e8c8ffffffcall8048d5c8048d94:01d8add%ebx,%eax8048d96:eb1bjmp8048db38048d98:89d8mov%ebx,%eax8048d9a:39d3cmp%edx,%ebx8048
35、d9c:7d15jge8048db38048d9e:89742408mov%esi,0 x8(%esp)8048da2:8d4301lea0 x1(%ebx),%eax8048da5:89442404mov%eax,0 x4(%esp)8048da9:891424mov%edx,(%esp)8048dac:e8abffffffcall8048d5c8048db1:01d8add%ebx,%eax8048db3:83c414add$0 x14,%esp8048db6:5bpop%ebx8048db7:5epop%esi8048db8:c3ret下面就來剖析func4,這個函數(shù)在確定棧之后,首先取
36、出來傳遞給它的參數(shù),依次放在eax,edx,esi.中,從一個jle和一個jge可以看出,這個遞歸函數(shù)跳出的條件根據(jù)func4的第二個參數(shù)和第二個參數(shù)進過種種運算的結(jié)果等于第一個參數(shù)即可。注意在遞歸過程中第一個參數(shù)是不變的,最后返回值是經(jīng)過運算后的ebx加上第一個參數(shù)。當(dāng)時做實驗時推出了具體的表達式,未記錄下來,只記錄了最后得出fun(ll)=31。運行結(jié)果如下:tangliweiesting:/lab2tangliwetgestingcdlab2tdngliweiestirig:-/lab2$*/bombCS1409_U201414013_禮屍welcometonyflencltshlitt
37、lebopib.youhave&phasesuitthwhichtoblowyourselfup”Haveaniceday1Phase1defused*Flowaboutthenextone?Thatsnunber2+KeepyolngHalfwaytherel1331soyougatthatone+Trythisone.tangllwelestlng:/l3bztangliweiesting:-5cdLab2tangli.weiesti.ng:/lab2$汀bombans.txtwetconetonyfiendishlittlebonb.Youhave5phaseswithwhichtobl
38、oMyourselfup*Haveaniceday!Phase1defused*hdwabodtthenextone?Thatsnumber2.Keepgoing!Halfwaythere!soyougotthatone.T誌thisone.由此可見,phase_4拆除成功!4實驗結(jié)果:給出階段x的實驗結(jié)果和必要的結(jié)果分析2.2.5階段5phase_5任務(wù)描述:拆除一個關(guān)于指針的炸彈。實驗設(shè)計:此階段實驗與指針相關(guān),又根據(jù)靜態(tài)調(diào)試跟蹤可知,需借助gdb的動態(tài)調(diào)試跟蹤來查找相關(guān)地址中存放的數(shù)據(jù)的值,進而分析出最終的拆彈密碼。實驗過程:首先觀察代碼,分析代碼時發(fā)現(xiàn)有多個跳轉(zhuǎn)指令,具體為x15時,b
39、omb;x=l時,取x低4位;)0O48e22;0048&2283ec2cBB4SE258d4424lc0O48e29)0O48e22;0048&2283ec2cBB4SE258d4424lc0O48e29894424DeB648e2d8d4424IBB64fie3189442斗08B64Be35C74424048048S3C8B9ise3d8t)442430S048e418904249048&44e817faff6348&4983f801B343已4匚7f05S048e4ee88203038048538t)442418B048e5783eO0f0O48e5aS94424IB0O48e5e83
40、feOf口7dgsubleanovLenovcf胡&4novinovnovffcallcrnpjgaacallnovandnovcnpTA-Jiti3X,Dxc(espSxl8(Kespl,5&eaxNeax,OxS(ef)OxB04a3cf0 x3O(Kesp)fSeax?ieax,(wesp)808860_tiocSsscanfplt=*$exiJ%eaxSf)4Se5380191d56xl8(%espKax$0 xf,%edxMcexflKlBtKcsp)$Dxf,%eaxfi-rnihJiCa+AVrfi.使用gdb調(diào)試發(fā)現(xiàn),要輸入的是兩個%d數(shù)。由后面的步驟知輸入第一個數(shù)為初始數(shù)組下
41、標(biāo),第二個數(shù)為循環(huán)15次累加求的和。再接著:8048e70:8b048580a20408mov0 x804a280(,%eax,4),%eax,這句就是從(0 x804a280+eax*4)里面拿數(shù)據(jù)出來,加到eax上。8948e53:b900000900movS04Se63:ba0D0D00OOmovOxOjKed8048e6d:33c201add$Oxledx8O4Se70:3b0485S3a20408mov0KBO4a2BD(#%eaxp4),Seax8048077101claddeBX,5Set:K因為eax只能是0F的數(shù),所以0 x804a260這個地址里面存的應(yīng)該是一個數(shù)據(jù)大小為1
42、6的數(shù)組,用gdb看,得到:觀察到果然是一個數(shù)組,然后下面就是把5個輸入對應(yīng)ascll碼的低4位轉(zhuǎn)換的十進制數(shù)對應(yīng)的數(shù)值一個一個的轉(zhuǎn)化為這個數(shù)組,得到累加值ecx。(gdb)p*0 x804a28316$1=10,2t14,7,8,12,15,11,9,41,13,3,9,6,S觀察循環(huán)部分:89442418mov83f8Of匸np742ajeb900000000movba00000000mov83c201add8b048580a20408mov01cladd83f8Of匸np75efjne89442418mov83faOf匸np7506jne3b4c24lc匸np7405jee8430300
43、00call83c42cadd8048e5d8048e5e8048e618048e638048e5d8048e5e8048e618048e638048e688048e6dS048e708048e778048e798048e7c8048e7e8048e828048e858048e87S048e8bS048e8d8048e92$Oxf,%eax8048e8d$OxO,%ecx$OxO,%edx$Oxl,%edxOx804a28O(,%ea|x,4),%ea%eax,%ecx$Oxf,%eax8048e6d%eax,0 xl8(%esp)$Oxf,%edx8048e8dOxlc(%esp),%ecx
44、8048e9280491d5$0 x2c,%esp由此知當(dāng)退出循環(huán)的條件是取出的數(shù)eax為15,而且循環(huán)次數(shù)為15次由于115=12+3+7+11+13+9+4+8+10+1+2+14+6+15二a(5)+a(12)+a(6)最后得到的ecx值是115,輸入的初始數(shù)組下標(biāo)為5。所以答案為:5115實驗結(jié)果:tangliwetgestLngz/lab2$./bombans.txtWelconetonyfiendishlittlebomb”Youhave6phaseswithwhichtoblowyourselfup*Have3niceday!Phase1defused.Howsboutthene
45、xtone?rhatsnumberKeepgoing!HalfwaythereSdyougotthatone*Trythison亡Goodwork!Ontothenext.可知結(jié)果正確。2.2.6階段6phase_6任務(wù)描述:拆除一個關(guān)于鏈表/指針/結(jié)構(gòu)的炸彈。實驗設(shè)計:初步靜態(tài)分析,此階段代碼有些過長,所以單純通過靜態(tài)調(diào)試跟蹤有些困難因此我首先找到幾個循環(huán)體,通過靜態(tài)調(diào)試跟蹤和動態(tài)調(diào)試跟蹤的方法來確認(rèn)循環(huán)體的功能,最后將循環(huán)體結(jié)合起來,拆除此階段炸斷。實驗過程:由于代碼較長,為便于分析,先總結(jié)一下,phase_6分為:參數(shù)讀取,一個雙層循環(huán),三個單層循環(huán)。首先是參數(shù)讀取:=phase_6:5
46、6pushwestafl4Se97:S3push%ebx8048e9&;S3ec44sub$0 x44,Me&p0O4Se9b:Sd442410lea0 x10(Kesp),WeaxB04Me9f:B9442404noveax,3x4(iesp)8b44450novB0iaeiT:&90斗21n&vKeaXj(nesp)8048eaa;eS4d630&00calla049Ifciread-SiX-nuimhE0043eaf:be900000&mov$OxOdSfiesi604Seb4:8b44bl10nov0jclfJ(Kesp,estF4)eaKBOaeba:83es01sub$0 x1BO
47、iaebb:83rs65cnp$oxs,ffieaxBOSebe;7635jbe304Sec5phase_6+0 x2f0048ecO:e8100300&call30491d5explodebomb由此可見,readsix_number所有參數(shù)均小于6且不相等。由于后面代碼部分過多,便采用gdb單步執(zhí)行來了解代碼的功能。在此,觀察到后面:S048efb:ba3ccl0408mov$Ox804cl3c,?6edKSI348fOO:8954b428nov%edx,ox2a(?fiesp,%est,4可以看到輸入六個數(shù)字的初始地址值在0 x804cl3c,再由for循環(huán)中:8048ebf:8b520
48、8mov0 x8(%edx),%edx可以看出六個數(shù)字按8個字節(jié)的順序進行排列,因此分別調(diào)用gdb查看(0 x804c13c)、*(0 x804c13c+0 x8)、*(*(0 x804c13c+0 x8)+0 x8)、*(*(*(0 x804c13c+0 x8)+0 x8)+0 x8)、*(*(*(*(0 x804c13c+0 x8)+0 x8)+0 x8)+0 x8)、*(*(*(*(*(0 x804cl3c+0 x8)+0 x8)+0 x8)+0 x8)+0 x8)的值即可。如圖所示:tangliweiesting:*/lab2tangliweiesting:*/lab2ThereisN
49、OWARRANTS,totheextentperFlittedbylowandshowwarrantyThereisNOWARRANTS,totheextentperFlittedbylowandshowwarrantyHfordetails,ThisGDBwasconfiguredas86_64-Linux-gnu.TvpeMshowconfigurationforconfigurationdetailsForbugreportinginstructions,pleasesee:http:/www*gnu,org/software/gdb/bugs/FindtheGDBmanualandot
50、herdocumentationresourceshttp:/www*gnu”org/software/gdb/documentation/*Forhelp,typehelp,p.TypeaproposwordtosearchforconmandsrelatedtoReadingsynbolsfrombonb.done(gdb)x/3x(0 x8G4cl3c)0 x0O4cl3c:9x30900292(gdb)x/3x*(0 x804cl3c+0 x8)0 x804cl48:OxOOOQ03S5(gdb)x/3x*(*(0 x894cl3c+Ox8)+0 x8)0 x8O4cl54:TypeH
51、showcopyingonlineati0X00O009C69x090000910X0OOOOOOZ0 x09000903Ox00O4cl480 x0S04cl540X0SO4C1&0(gdb)x/3x*(*(*(0 xSB+cl3c+exe)+ex8)+OxB)O?(804cl69:OxO0O0O3db0 x00000004(gdb)x/sx*(*(*(*(ox8a4ci3c+exs)+ax8)4-oxs+oxsO?(804cl69:OxO0O0O3db0 x00000004(gdb)x/sx*(*(*(*(ox8a4ci3c+exs)+ax8)4-oxs+oxs)0?(804cl6c:(g
52、db)x/3x*(*(*(*(*(OxS04cl3c+Ox8)+0 x&)十0 x8)十9x904cl7Scnode6:fnrlh】0X0SO4C1&COxO0OSOO7e0X0000939S0 x090000053X0009900&Ox0S04cL780X00000900在下面檢測鏈表值時,要求鏈表值從大到小排列。由上圖可以看出,鏈表原本各個位置的值按順序排列位:292385c63db7e308。按從小到大順序排列應(yīng)該為:7ec62923083853dbo由此可以看出,用戶應(yīng)該輸入:531624。實驗結(jié)果:tangliweiesting:/lab2tangliweietingicdlab2t
53、angliweigesttng:/Lab2$./bombans*txtWelcometomyfiendishlittlebomb*Youhave6phaseswithwhichtoblowyourselfup*Haveanid已day1Phase1defused*Howaboutthenextone?rhatsnumber2*Keepgoing1Halfwaythere!Soyougotthatone.Trythisone.GoodworklOntothenext*,Congratulations!Youvedefusedthebombltangliweigesttng:/Lab2$|可見結(jié)果
54、正確。1.3實驗小結(jié)本次實驗熟悉了obj、gdb的各種操作,對數(shù)據(jù)在計算機中的存儲有了更加清晰的認(rèn)識,更加加深了對匯編代碼的理解,對循環(huán)、分支、數(shù)組指針結(jié)構(gòu)在機器部的存儲有了更深刻的認(rèn)識。實驗3:緩沖區(qū)溢出攻擊3.1實驗概述本實驗的目的在于加深對IA-32函數(shù)調(diào)用規(guī)則和棧結(jié)構(gòu)的具體理解。實驗的主要容是對一個可執(zhí)行程序“bufbomb實施一系列緩沖區(qū)溢出攻擊(bufferoverflowattacks),也就是設(shè)法通過造成緩沖區(qū)溢出來改變該可執(zhí)行程序的運行存映像,繼而執(zhí)行一些原來程序中沒有的行為,例如將給定的字節(jié)序列插入到其本不應(yīng)出現(xiàn)的存位置等。本次實驗需要你熟練運用gdb、objdump、gc
55、c等工具完成。實驗中你需要對目標(biāo)可執(zhí)行程序BUFBOMB分別完成5個難度遞增的緩沖區(qū)溢出攻擊。5個難度級分別命名為Smoke(level0)、Fizz(level1)、Bang(level2)、Boom(level3)和Nitro(level4),其中Smoke級最簡單而Nitro級最困難。實驗語言:c;實驗環(huán)境:linux3.2實驗容設(shè)法通過造成緩沖區(qū)溢出來改變該可執(zhí)行程序的運行存映像,繼而執(zhí)行一些原來程序中沒有的行為。3.2.0階段0smoke任務(wù)描述:將getbuf函數(shù)執(zhí)行return后執(zhí)行test函數(shù)改為執(zhí)行smoke函數(shù)。2實驗設(shè)計:首先根據(jù)反匯編代碼求得buf離返回地址的字節(jié)距離,
56、確定要填充幾個字節(jié),然后找到smoke函數(shù)的起始地址,把這個地址填入buf末尾,即可實現(xiàn)該功能。實驗過程:首先通過gdb工具對bufbomb文件進行反匯編,查看getbuf的匯編代碼:B6491ec:5580491edB6491ec:5580491ed:&9e5804?lef:83ec38Bfi491fZ:3d45d8S9042480491fS:&S55fbffffBfi491fd:b801000000B649262:匸98049293:C308041ec咗getbufp:push9Sebpmov%esp,%ebpsub$0 x38,%esplea-0 x28(%ebp)mov%eax,(%e
57、sp)call804Sd52cGetsmov$0 x1leaver&t可見lea把buf的指針地址-0 x28(%ebp)傳給了Gets(),所以buf離返回地址有0 x28+4=44個字節(jié)的距離,因此只要在buf處開始填44個字節(jié)的非n數(shù),接下來填寫要返回的地址,因為要返回至smoke,查看smoke函數(shù)的代碼:0804SC90csmoke0804SC90csmoke:8O48C90:55804SC9HS9e5S048c93:93ecIS&048C96:c7042413dl8048c9d:亡&cefcffff8048CS2;C7042400008048ca9:亡&96660OO08848ca
58、eiC704249000&04&cbS:e8d6fcffffpush%ebpmov%esp,?fiebpsub$9x18,9esp04OSmovl$Ox&04日(鮎亡sp)call80489700000novi$0 x0,(%e&p)call8049344cvalidate;*0000movl$0 x0,(%esp)call&048999可見smoke函數(shù)起始地址為0 x08048c90,所以最后四個字節(jié)應(yīng)該填入908c0408,所以輸入的48個字節(jié)為:00000000000000000000000000000000000000000000000000000000000000000000000
59、00000000000000000908c0408實驗結(jié)果:tangliwei&stingt/lab3tangttwetesttng:cdlablobl/lot3/tangliweiesting:cdlab3tangLiueiesttng:/lab3$catsnoke_U201414aiS.txt|./hex2raw|./bufbonb-uU201414813_Userid;U2014148IScookte:a6799ab37Typestring:Smoke!:Youcalledsnoke()WALIDMICEJOBtangLiweie&ttng:/lab3$|可見getbuf成功返回至smo
60、ke。3.2.1階段1fizz1任務(wù)描述:將getbuf函數(shù)執(zhí)行return后執(zhí)行test函數(shù)改為執(zhí)行fizz函數(shù)。實驗設(shè)計:跟階段0類似,多了一個比較cookie環(huán)節(jié),所以要把cookie填入相應(yīng)地址。實驗過程:只是將執(zhí)行的函數(shù)從smoke改為fizz,查看fizz的匯編代碼:08048cbsizz08048cbsizz:8048cba558043cbb89e58043cbd83ec188048CC08b45088048CC33b0520C204088048CC975le8048ccb894斗24048048ccfc70斗242eal048048cd6e8f5fbffff8048cdbC70
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年全球及中國自熱食品行業(yè)盈利模式及營銷推廣策略報告
- 2024-2030年全球及中國無鹵素藥芯焊錫絲行業(yè)發(fā)展動態(tài)及前景規(guī)劃分析報告
- 2024-2030年全球及中國巧克力制造機行業(yè)應(yīng)用前景及投資盈利預(yù)測報告
- 2024-2030年全球及中國地板機器人吸塵器行業(yè)銷售情況及競爭趨勢預(yù)測報告
- 2024-2030年全球健康醫(yī)療大數(shù)據(jù)行業(yè)競爭格局及發(fā)展模式研究報告
- 2024-2030年供水管道(水管)公司技術(shù)改造及擴產(chǎn)項目可行性研究報告
- 2024-2030年中國麻紡織行業(yè)市場競爭格局及未來投資趨勢分析報告
- 2024-2030年中國高端蘇打水行業(yè)競爭策略及投資營銷模式分析報告
- 杠桿零件課程設(shè)計
- 整形醫(yī)院營銷課程設(shè)計
- 電子技術(shù)基礎(chǔ)練習(xí)題庫(含參考答案)
- 語文中考《非連續(xù)性文本閱讀》專題精練(含答案解析)
- 沐足行業(yè)嚴(yán)禁黃賭毒承諾書
- 【課件】第21課《小圣施威降大圣》課件2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 工程計價學(xué)-001-國開機考復(fù)習(xí)資料
- 《孟母三遷》課本劇劇本:環(huán)境對成長的重要性(6篇)
- 《富馬酸盧帕他定口崩片關(guān)鍵質(zhì)量屬性與標(biāo)準(zhǔn)研究》
- 走近非遺 課件 2024-2025學(xué)年湘美版(2024)初中美術(shù)七年級上冊
- 新生兒壞死性小腸結(jié)腸炎臨床診療指南解讀 課件
- 網(wǎng)絡(luò)數(shù)據(jù)安全管理條例
- 2024版2024年【人教版】二年級上冊《道德與法治》全冊教案
評論
0/150
提交評論