華中科技大學(xué)匯編語言程序設(shè)計實驗報告(七)_第1頁
華中科技大學(xué)匯編語言程序設(shè)計實驗報告(七)_第2頁
華中科技大學(xué)匯編語言程序設(shè)計實驗報告(七)_第3頁
華中科技大學(xué)匯編語言程序設(shè)計實驗報告(七)_第4頁
華中科技大學(xué)匯編語言程序設(shè)計實驗報告(七)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程實驗報告課程名稱:實驗名稱:匯編語言程序設(shè)計實驗實驗四中斷與反跟蹤實驗時間:2017-4-26, 14: 30-17: 30實驗地點: 南一樓804室45號實驗臺指導(dǎo)教師:李專專業(yè)班級:計算機(jī)科學(xué)與技術(shù)201502班學(xué) 號: u201414596姓 名:盧振興同組學(xué)生:洪豆報告日期: 2017年4月26 li原創(chuàng)性聲明本人鄭重聲明:本報告的內(nèi)容由本人獨(dú)立完成,有關(guān)觀點、方法、數(shù)據(jù)和文獻(xiàn)等的 引用己經(jīng)在文中指出。除文中已經(jīng)注明引用的內(nèi)容外,本報告不包含任何其他個人或集體己 經(jīng)公開發(fā)表的作品或成果,不存在剽竊、抄襲行為。特此聲明!學(xué)生簽名:盧振興日期:2017. 4. 19成績評定實驗完成質(zhì)最

2、得分(70 分)(實驗步驟清晰詳細(xì)深 入,實驗記錄真實完整等)報告撰寫質(zhì)量得分(30 分)(報告規(guī)范、完整、通 順、詳實等)總成績(100分)指導(dǎo)教師簽字:1實驗?zāi)康呐c要求(1)學(xué)握中斷矢量表的概念;(2)熟悉i/o訪問,bios功能調(diào)用方法;(3)掌握實方式下屮斷處理程序的編制與調(diào)試方法;(4)熟悉跟蹤與反跟蹤的技術(shù);(5)提升對計算機(jī)系統(tǒng)的理解與分析能力。2. 實驗內(nèi)容任務(wù)1:用三種方式獲取中斷類型碼16h對應(yīng)的中斷處理程序的入口地址。要求:首先要進(jìn)入虛擬機(jī)狀態(tài),然后(1)直接運(yùn)行調(diào)試工具(td.exe),觀察中斷矢量表中的信息。(2)編寫程序,用16h功能調(diào)用方式獲取(16h的使用可查閱

3、教材附錄),觀察功能調(diào) 用相應(yīng)的出口參數(shù)少“(1)”看到的結(jié)果是否相同(便用td觀看出口參數(shù)即町)。(3)編寫程序,直接讀取相應(yīng)內(nèi)存單元,觀察讀到的數(shù)據(jù)與“(1)”看到的結(jié)果是否 相同(使用td觀看程序的執(zhí)行結(jié)果即可)。任務(wù)2:編寫一個接管鍵盤中斷的中斷服務(wù)程序并駐留內(nèi)存,要求在程序返回dos 操作系統(tǒng)后,鍵盤上的小寫字母都變成了大寫字母。要求:(1)在dos虛擬機(jī)或dos窗口下執(zhí)行程序,屮斷服務(wù)程序駐留內(nèi)存。(2)在dos命令行卜鍵入小寫字母,屏幕顯示為大寫,鍵入人寫時不變。執(zhí)行td, 在代碼區(qū)輸入指令“mov ax,0”看是否能發(fā)生變化。(3)選作:另外編寫一個中斷服務(wù)程序的卸載程序,將鍵

4、盤小斷服務(wù)程序恢復(fù)到 原來的狀態(tài)(也就是還原中斷欠雖表的信息,先前駐留的程序可以不退出內(nèi)存)。任務(wù)3:讀取cmos內(nèi)指定單元的信息,按照16進(jìn)制形式顯示在屏幕上。要求:(1)先輸入待讀取的cmos內(nèi)部單元的地址編號(可以只處理編號小于10的地址 單元)。再使川in/out指令,讀取cmos內(nèi)的指定單元的信息。(2)將讀取的信息用16進(jìn)制的形式顯示在屏幕上。若是時間信息,可以人工判斷- 下是否正確。3. 實驗過程3/1任務(wù)13.1.1實現(xiàn)思想用方法一渣看時,將ds段置零,找到16h中斷所在位置。由于在實方式下,每個中斷 表項占4個字節(jié),那么16h的物理地址就是00000+16hm=00058ho

5、在數(shù)據(jù)段中使用goto, 到達(dá)ds: 0058h,即可査看到中斷類型碼16h對應(yīng)的中斷處理程序的人口地址。用方法二查看時,用到了 35h取中斷信息的功能。將3516h參數(shù)傳送到ax (相當(dāng)于 ah二35, al二16),在調(diào)用35h功能號后,bx和es中將分別保存中斷類型碼16h入口地 址的信息,即ip和cs。用方法三查看時,直接用bx和cx讀取相應(yīng)的內(nèi)存單元的段值和偏移地址,即mov bs,ds:58h, mov cx,ds:60ho3.1.2源程序方法二源程序:.386stack segment use 16 stackdb 200 dup(o)stack endscode segment

6、 use 16assume cs:codestart:xor ax,axmov ds,axmovax,3516hint21hmov ah,4chint21hcode endsend start方法三源程序:.386stack segment use 16 stackdb 200 dup(o)stack endscode segment use16assume cs:codestart:xor ax,axmov ds,axxor cx,cxmov bx,ds:58h1mov cx,ds:l5ahjmov ah,4chint21hcode endsend start3.1.3實驗步驟1. 在dos

7、box中打開td,進(jìn)入界面后,在寄存器區(qū)域中將ds置0。在數(shù)據(jù)段中,使 用goto轉(zhuǎn)到oo58h,查看前4個比特中存放的值,前兩個比特(16位)存放的是段值,后 兩個比特(16位)存放的是偏移地址。2. 在notepad+中錄入源程序中方法二所示的程序,進(jìn)行編譯連接,并在td中運(yùn)行。 使丿ij單步調(diào)試,觀察出口參數(shù)中bx和es中的值。3. 在notepad+'|錄入源程序屮方法三所示的程序,進(jìn)行編譯連接,并在td中運(yùn)行, 使用單步調(diào)試,分別觀察bx和cx小的值。4. 用td將中斷矢量表中的值改為任意值,觀察程序發(fā)牛:的現(xiàn)象。3.1.4實驗記錄與分析1. 實驗環(huán)境條件:2.60ghz,

8、2gb 內(nèi)存;windows 1()下 dosbox().74; td.exe 5.()。2. 打開 td,將 ds 置為 0,在代碼段中 goto 到 ds:0058h o (0:16h*4)->ip, (0:l16hm+2j)->cs3. 觀察ds段中0058h的信息,發(fā)現(xiàn)該中斷的ip是11e0h, cs是0f000h,如圖4.1 所示。ds 0000es 0aad ss oaad(a)ds段被置0(b) 00058 的 ip 是 e011.cs 是 00f0ds:0g58 e0 11 00 f0 20 12 00 fo « = 1 ds:0g60 co 12 00

9、f0 c0 12 00 f0 lt =lt圖4.1 16h的中斷矢量4將方法二的源程序錄入,進(jìn)行單步調(diào)試,執(zhí)行調(diào)川35h的功能查看es和bx中存放的數(shù)據(jù)。es中存放的是16h的cs值0f000h, bx存放的是1p值11e0h。如圖4.2所示。cs:000z8ed8moudsfax口cs:0004b81635mouax, 35161cs:0007cdz1int21ics:o009m4cmouah,4ccs:000bcdz1irrt21 cs:000d0000addbx+sijal1cs:000f0000addbx+sil,alics:00110000addbx+si1,alics: 00130

10、000addbx+si1,alics:e015 6000addbx+si j.al圖4.2執(zhí)行35h調(diào)用后寄存器和es段中的結(jié)果f0005. 將方法三的源程序錄入,進(jìn)行單步調(diào)試。在執(zhí)行完mov cx,ds:5ah后,查看bx寄存器和cx寄存器中的內(nèi)容。bx中存放的是ip值11e0, cx中存放的是cs值f000,這與方法一和方法二得到的結(jié)果相同。如圖4.3所示。cs :cs :o004 cs:0006 cs:0ood8ed8 mou 33c9 xor 678b1d58000o00 mou 678b0d5ao0000o mouds ,axcxjcxbx,00000058 cxaoooooosai

11、bx 11e0cx f000dx 0000cs:oo14kb44cmouah,4csi 0000 di 0000圖4.3執(zhí)行完movcx,ds:(5ah|后的結(jié)果6. 嘗試修改中斷矢量表中的值后,運(yùn)行程序。發(fā)現(xiàn),程序無法中斷,接連不斷地運(yùn)行著。如圖4.4所示。圖4.4程序無法中斷3.2任務(wù)23.2.1設(shè)計思想及存儲單元分配對16h對應(yīng)的中斷處理程序進(jìn)行接管,首先需要將舊指令的偏移地址和段值保存在一 個雙字中,并將新指令加入到當(dāng)前段中,并在新段中通過jmp dword ptr old_1nt和 pushf;call dword ptr old int兩種方式來調(diào)用i口的屮斷功能。00h和10h兩

12、個功能號表示從鍵盤讀入字符,因此,可對ah中的值進(jìn)行判斷(是否 等于00h或01h)實現(xiàn)輸入字符時就能調(diào)用修改后的中斷服務(wù)的目的。當(dāng)系統(tǒng)接收鍵盤開 始讀入字符的信息時(ah等于00h或10h時),就開始執(zhí)行實現(xiàn)將小寫字母轉(zhuǎn)化為大寫字 母的功能。字母的轉(zhuǎn)化需要判定輸入值的ascii碼。若輸入字符(al)的ascii碼在61h到7ah z間,那么將該字符減i 20h,從而實現(xiàn)小寫字母到大寫字母的轉(zhuǎn)換。存儲單元的分配:al, ah用于系統(tǒng)調(diào)用賦予參數(shù)ax用丁臨時存儲關(guān)于屮斷服務(wù)程序的卸載程序,首先將修改屮斷所在的cs段的段值傳送給es,接著禁止屮斷(cli)將被修改的小斷原屮斷的值重新覆蓋,即將es

13、:o賦值給ds:16hm,es:賦值給ds:16h*4+2,執(zhí)行完畢后開中斷(stl)o3.2.2流程圖圖4.5修改16h中斷的流程圖3.2.3源程序1. 修改中斷程序.386stack segment use 16 stackdb 200 dup(o)stack endscode segment use 16assume cs:code,ss:stackold.int dw ?,?new16h:cmpah,00hje lthcmp ah, 1 ohje lthjmp dword ptr old.1ntlth:pushfcall dword ptr oldjntcmpal,61h ;與 a 的

14、 ascii 碼對比jb quitnext1:cmpal,7ahja quitsub al,20h ;將小寫轉(zhuǎn)換為人寫quit: iret;書上p223start: xor ax,axmov ds,axmovax,ds:16h*4mov oldjnt,ax;保存偏移部分mov ax,ds:16h*4+2mov oldnt+2,ax;保存段值climov word ptr ds: 16hm,offset new16hmov ds:16h*4+2,csstimov dx,offset start+15shr dx,4add dxjohmov al,()mov ah,31hint21hcode en

15、dsend start2沖斷程序恢復(fù).386code segment usei6assume cs:code,ss:stack;書上p223start: xor ax,axmov ds,axclimov es,ds:16h*4+2mov ax, es:omov bx, es:2mov word ptr ds:16h*4|,axmov word ptr ds:i6hm+2j,bxstimov dx,offset start+14shr dx,4add dxjohmov al,0mov ah,31hint21hcode endsstack segment use16 stackdb 200 dup

16、(o)stack endsend start3.2.4實驗步驟1. 用notepad+錄入源程序所示的代碼,用dosbox進(jìn)行編譯和連接,如有報錯返冋 修改,如連接成功,則繼續(xù)下-步。2. 向屏幕中輸入字符,觀察小寫字母是否能被轉(zhuǎn)化為大寫字母。3. 同時打開另一個虛擬dos窗口,觀察鍵盤的大小寫會被替代。4 .找到其他確定口己編寫的程序被調(diào)用的方法。3.2.5實驗記錄與分析1. 實驗環(huán)境條件:2.60ghz, 2gb 內(nèi)存;windows 1()下 dosbox().74; td.exe 5.()。2. 在源代碼屮,運(yùn)川了兩種方法進(jìn)入原來的屮斷程序,如圖4.6所示。在jmpdword ptr

17、old_1nt這種方式中,調(diào)用了原來的中斷程序后會直接退出中斷處理程序。而在 pushf;call dword ptr old int這種方式屮,在現(xiàn)有程序屮遇到了 iret才算真正地 退出程序。jmp dword ptr old_int pushfcall dword ptr old int圖4.6調(diào)用原中斷程序的兩種方式3. 錄入源代碼,用dosbox進(jìn)行編譯和連接,并運(yùn)行該程序。4. 運(yùn)行程序,dos能夠正常工作,輸入字符abcabcxyzlo#s ,字符變?yōu)閍bcabcxyz10#s,即小寫字母都變?yōu)榱舜髮?,如圖4.7所示。:>sixc:>abcabcxyz10#$圖4.7

18、調(diào)用了修改后的中斷程序5打開另一個dosbox,鍵盤小寫沒有被取代為大寫。這說明修改后的中斷處理程序只對當(dāng)前虛擬機(jī)起作用。如圖4.8所示。圖4.8不影響其他虛擬機(jī)6.在原虛擬機(jī)中,用td對-修改后中斷程序進(jìn)行調(diào)試。單步調(diào)試,在中斷號16h處,可以用alt+f7進(jìn)入中斷程序。發(fā)現(xiàn)16h屮斷屮的內(nèi)容已經(jīng)成功被修改。這是除了肓接看小寫字母被改為人寫字母外的確定屮斷程序被調(diào)川的方法。如圖4.9所示。:s:lleofbsti:s:11e1 fedbfe:s:lle2 380fcmpbxhcl:s:lle4 0qcfaddbhcl:s:lle6 90nop:s:lle7 90nopi 1=cpu 8048

19、6(a)修改前=cs:o0o4k80fc0ocmpah,gocs:00o7 740aje0013cs:oo09 80fc10cmpah ,10cs:0q0c 7405je0013cs:go0e zeffzeo000jmpcs:far 0000cs:o013 9cpushfcs:0014 zeff1eo0o0callcs:far 0000cs:o019 3c61cmpal61cs:o01b 7z06jb0023cs:o01d 3c7a cs:g»lf 7702cmpal,7ag023(b)修改后圖4.9修改16h中斷前后對比7.在中斷服務(wù)卸載程序中,從ds:16h*4+2中獲取原cs段

20、,從原cs段的0和處分別獲 得原中斷程序的ip和cs,并將原來中斷程序的1p和cs分別存入ds:i6h4j和ds:l16*4+2j 屮,實現(xiàn)覆蓋修改麻屮斷程序的目的。調(diào)用屮斷服務(wù)卸載程序。發(fā)現(xiàn)小寫功能恢復(fù)。如圖 4.10所示。c:>sixcc:>ssssdds11 legal command: ssssdds.c:>sixrecoc:dddd圖4.10成功卸載修改后的中斷程序3.3任務(wù)33.3.1設(shè)計思想及存儲單元分配首先調(diào)用2號dos指令,讀取鍵盤信息,將讀取的信息與q比較,若為c,則退出。若不是q,則將al中的數(shù)字轉(zhuǎn)化為十進(jìn)制的0-9。將al的倍息取出到端口 70h,再從

21、端口 71h中讀入cmos中的數(shù)據(jù)。將al中的高4位轉(zhuǎn)入ah,僅保陽低4位(將al與0fx相 與)。將ah中的值右移4位,即將壓縮bcd碼中的高四位傳入ah的低四位。再用將ax 的值賦給bx,輸il! bx中的數(shù),此數(shù)即為cmos中指定單元的信息。3.3.2流程圖圖4.11讀取cmos內(nèi)指定單元信息流程圖3.3.3源程序.386data segment use 16output db 'please input 0-9; input q to quit:,0ah,0dh;$,data endsstack segment use 16 stackdb 200 dup(o)stack en

22、dscode segment use 16assume ds:data,ss:stack,cs:codestart:mov ax, datamov ds, axdos2 macro amov dl, amov ah,2int21hendmlea dx,outputmov ah,9int21hlopa: mov ah, 1;讀取指令信息int21hcmp al, qje quitcmpal, q*je quitsub al, 30h;轉(zhuǎn)化為10進(jìn)制09out 70h, al;將信息取出in al,71h;讀入信息mov ah, aland al, ofhshrah,4add ax, 3o3oh;

23、轉(zhuǎn)化為ascll碼mov bx, axd0s2 oahdos2 odhdos2 bh;輸出信息dos2 bldos2 oahdos2 odhjmp lopa;循環(huán)執(zhí)行quit: mov ah, 4chint21hcode endsend start3.3.4實驗步驟1. 用notepad+錄入源程序所示的代碼,用dosbox進(jìn)行編譯和連接,如有報錯返回修改,如連接成功,則繼續(xù)下一步。2. 調(diào)用該程序,觀察向屏幕輸入09時的,系統(tǒng)輸出的情況。3. 分析系統(tǒng)輸出的悄況,并用相應(yīng)的時間信息對輸出進(jìn)行檢驗。3.3.5實驗記錄與分析1. 實驗環(huán)境條件:2.60ghz, 2gb 內(nèi)存;windows 10

24、 下 dosboxo.74; td.exe5.0。2. 將源程序所示的代碼用notepad+錄入,并用dosbox進(jìn)行編譯連接,運(yùn)行程序。3. 輸入4,讀取小時;輸入2,讀取2讀取分鐘,輸入6,讀取一周的第兒日,輸入7讀取ii期,輸入8讀取月份,輸入9讀取年份。結(jié)果與客觀時間相符介。d:>sixdplease input 0-9; input q to quit:1 15z 16、 一em ?f 日期19 3 月份eh 年份17格式周的第一天:短日期:長日期:短時間:酬日17/4/192017年4月19日下午3:16圖4.12 cmos數(shù)據(jù)取出的輸出4. 在cmos中,壓縮bcd碼存放在

25、一個字節(jié)中,以兩個10進(jìn)制8421碼的形式存在(高4位1個,低4位1個)。5. 打開td,在代碼區(qū)中直接輸入三行代碼:moval,4;out70h,al;inal,71h。小時的結(jié)果成功地被放入al屮,如圖所示。圖4.13在td中使用in/out指令獲取cmos數(shù)據(jù)3.4任務(wù)43.4.1設(shè)計思想在本反跟蹤的設(shè)計屮,使丿ij 了通過計時方法來抵制動態(tài)調(diào)試跟蹤通過檢查堆棧來抵制動態(tài)調(diào)試跟蹤。增加冗余項目干擾視線在人工單步調(diào)試時,指令執(zhí)行的間隔往往容易達(dá)到秒級,而在連續(xù)執(zhí)行的程序屮的指令 一般不會達(dá)到毫秒級別。因此,通過計算幾條指定指令所耗費(fèi)的時間就町以知道該程序是否 被調(diào)試??梢栽谥付ǖ膱?zhí)行指令前

26、獲取一下當(dāng)前時間,然后再執(zhí)行這幾句指令。計算這兩條 語旬的時間差值,若差值為0或55ms就說明沒有被跟蹤。在動態(tài)調(diào)試的過程屮會產(chǎn)生單步的小斷,該屮斷響應(yīng)過程會使用被調(diào)試程序的堆棧,即 調(diào)試程序棧頂以上兒個字的存儲區(qū)內(nèi)容會被中斷響應(yīng)過程修改。所以,預(yù)先在程序中執(zhí)行壓 棧和出棧操作,即可設(shè)定棧頂以上幾個字的內(nèi)容;再次獲取這些內(nèi)容,判斷它們是否為先前 壓棧的內(nèi)容,即町判斷是否被調(diào)試。此外,在代碼中增加進(jìn)棧、出棧以及定義語句等兀余項1=1,可以起到干擾視線的作用, 這也就進(jìn)步增加了破解的困難。342流程圖圖4.14反跟蹤設(shè)計流程3.4.3源程序.386data segment use16nequ3nl

27、eng equ 10;個學(xué)生名字的長度sdata equ 14;個學(xué)生數(shù)據(jù)的長度buf db n xor xor 昭 xor *s7 dup(o);學(xué)生姓名db 100 xor t,85 xor *080 xor *y?db t xor 丫 xor 0 ;s* xor rs f xor 0,6 dup(o)db 60 xor 'j;50 xor 0,70 xor 'y;?db t xor xor 口 n xor 空,乂 xor rs6 dup(o);木人名字的拼音db 88 xor 丁,89 xor *095 xor 'y;?in_name db 1()db?db 10

28、dup(0);tempstr db 10 dup(o);notice db 'please input the students name:' ,0dh, oahdb '(enter q to quit)$'granot db 'the grade of the student is:$'continue db 'please enter any key to continue.',0dh,oah,'$'notexist db 'sorry, the name does not exist.' ,0

29、dh,0ah,'$*calsuces db 'successfully calculate all the avarage grade!*,0dh,0ah,'$'out_password db please enter the password!;0dh,0ah,out_ended db 'program ended.',odhah/s*;系統(tǒng)的密碼pwd db 4 xor c;密碼串的長度為4,采用與常數(shù)43h界或的方式編碼成密文db (丁29h嚴(yán)3滇實密碼為joy!0采用函數(shù)(x-29h)*3對保存的密碼進(jìn)行編碼。db ('()

30、9; 29h)*3db ('y -29h)*3db (t -29h)*3db 5fh,0d3h ;用隨機(jī)數(shù)填充密碼區(qū)到6個字符,防止破解者猜到密碼長度in_pwd db7;使用者輸入的密碼區(qū),最大長度6個字符db?db 7 dup(o)crlf db 0dh,0ah,'$poin dw 0pldwpass1eldwoverp2dwpass2data ends;地址表(用于間接轉(zhuǎn)移反跟蹤)stack segment use 16 stackdb 200 dup(o)stack endscode segment use 16assume ds:data,ss:stack,cs:co

31、destart: mov ax,datamov ds,axlea dx,out_passwordmov ah,9int21hlea dx,in_pwd ;輸入密碼串字符mov ah, 10int21h;增加冗余項flmov ah,2push dxmov ah,4pop dxpush axmov dx,axmov dx,0pop ax;計時反跟蹤開始;保存獲取的秒和百分秒;比鮫輸入的串長與密碼長度是否一樣climov ah,2chint 21hpush dxmov cl,in_pwd+1xor cl,csub cl,pwdmovsx bx,cladd bx,offset pl;增加冗余項冃mov

32、 dx,87hpush axmov dx,46hpop axpush dxmov ax,bxmov dx,axmov ax,0pop dxmov dx,0mov ah,2ch;獲取第二次秒與rr分秒int 21hsticmp dxjesp;計時是否相同pop dxjz oki;如果計時相同,通過木次計時反跟蹤mov bx,offset el;如果計時不同,則把轉(zhuǎn)移地址偏離p1oki:mov bxjbxcmp word ptr cs:bx,0b60fh ;是否是pass1處的指令,其實是用于判斷詢而比較的;串長是否相同jz ok2jmp elok2:jmp bxdb there can be m

33、iracle1;db when you believe!1;db there is no failure!1;db 'only feedback!*;定義的兀余信息,擾亂視線pass1: movzx cx,1n_pwd+1cli;堆棧檢查反跟蹤push p2;pass2的地址壓棧mov si,()mov dl,3pop axmov bxjesp-2jsti;把棧頂上面的字(pass2的地址)取到j(luò)mp bx;如果被跟蹤,將不會轉(zhuǎn)移到pass2db 4 do not know!pass2: movzx ax,1n_pwd+21sij;比較密碼是否相同。把輸入的串變成密文,與保存的密文比較

34、sub ax,29hmul dlcmp al,pwd+1ls1jjnz err2inc siloop pass2jmp hinterr2: mov bx,offset pl;當(dāng)密碼不等時,通過地址表計算出over(退出)的位置mov edxjjmp word ptr ebx+edx*2;指向 overdb 'concentrate on what you are doing!*;db do not worry, and be happy*;db tou will be what you believe!*hint: lea dx,notice ;彈出字符串提示輸入mov ah,9int

35、21hlea dx,crlf;回車換行mov ah,9int21hlea dx,1n_name;讀入學(xué)生姓名mov ah, 10int21hmov cx,n;讀入學(xué)生的個數(shù)mov bx, offset in_name ;將 1n.name 的棊址存入 bxadd bx, 2cmp in_name + 2,0dh ;如呆只輸入回車,je hint;則返回開始的輸入cmp in.name + 2,q ;如果輸入的是q,je over;則退出lea dx,crlf ;回車換行mov ah,9int21hinc cxloopa: dec cxje nomatmov bp,nsub bp,cximul

36、besdata ;找到名字的首地址,14*(ncx)mov di,nleng ;向bx '存入一個名字的長度,即10mov si,0loopb: mov dh,ds:bp+ si;將buf段中的名字字符存入dhmov dl, byte ptr ds:bx + si;將輸入的名字存入 dlxor dl;s*cmp dh,0;姓名結(jié)束,說明查找成功了。jegrade ;查找成功后跳入grade,對分?jǐn)?shù)進(jìn)行評判cmp dh,dl ;比較該緩沖區(qū)域的姓名和用戶輸入的姓名字符jne loopa ;如果不相等返m loopainc sidec di ;10個字符,如果歸零就跳入成績段je grad

37、ejne loopbgrade: mov bp, nsub bp, cximulbp, sdataadd bp, nlengmov poin, bp ;將該學(xué)生的起始偏移地址存入poin屮callcalgrmov al, ds:bp+3;lea dx, granot;顯示輸出的分?jǐn)?shù)提示mov ah, 9int21hcmp al,90jge gradeacmp al,80jgegradebcmp al,70jge gradeccmp al,60jge gradedjl gradefnomat: lea dx,notexist;輸出不存在該字符串mov ah,9int21hjmp conticon

38、ti:lea dx,crlf ;回年換行mov ah,9int2ihlea dx,continue;輸出繼續(xù)mov ah,91nt21hnext:mov ah,1int21h;則退出jmp hintgradea: mov dl,41h ;mov ah,2hint21hlea dx,crlf ;回車換行mov ah,9int21hjmp contigradeb: mov dl,42hmov ah,2h1nt21hlea dx,crlf ;回車換行mov ah,9int21hjmp contigradec: mov dl,43hmov ah,2hint21hlea dx,crlf ;回車換行mov

39、 ah,91nt21hjmp contigraded: mov dl,44hmovah,2h1nt21hlea dx,crlf ;回車換行mov ah,9int21hjmp contigradef: mov dl,46hmovah,2hint21hlea dx,crlf ;回車換行mov ah,91nt21hjmp conti;下面計算所有學(xué)生的成績calgrprocpush bpmovcx,nmovbp,ngralp: subbrcximulbrsdataaddbp, nlengmovdx,0movax,0moval,ds:bp;開始計算平均成績xoral,in_pwd+2 ;將密文轉(zhuǎn)化成明

40、文sal ax jmovdl, ds:bp + ixordl,in_pwd+3 ;將密文轉(zhuǎn)化成明文addax, dxmovdl, ds:ibp+2jxordl,in_pwd+4 ;將密文轉(zhuǎn)化成明文sardl, 1addax, dx;sal ax, 1movdl,7idiv dlmovds:bp+3,almovbp,n;decexjne gralppop bpretcalgr endpover:mov dx,offset out_endedmov ah,9int21hmov ah,4ch1nt21hcode endsend start3.4.4實驗步驟1 .將3.4.4所示的源程序錄入notep

41、ad+,并保存進(jìn)行編譯和連接。2. 若連接岀錯,返回修改代碼;若無錯誤,進(jìn)行下一步。3. 運(yùn)行程序,輸入正確密碼時,能夠進(jìn)行正常的查詢工作。4. 輸入錯誤密碼時,程序終止。3.4.5實驗記錄與分析1實驗環(huán)境條件:2.60ghz, 2gb 內(nèi)存;windows 1()下 dosbox().74; td.exe 5.()。2. 在dosbox屮對錄入好的程序進(jìn)行編譯,并運(yùn)行。3. 輸入正確的密碼,如圖4.15所示。c:>seuenplease gntgr the password?圖4.15輸入正確的密碼4成功進(jìn)入正常程序部分,輸入實驗者姓名,顯示實驗者成績信息。如圖4.16所示。c:>

42、;seuenplease evrter the password?please input the students name: (enq to quit) luzxdie grade of th巳 student is:b圖4.16成功顯示實驗者信息5. 若用td進(jìn)行單步調(diào)試,則會提前退出,從而能達(dá)到反跟蹤的效果。如圖4.17所示。a a a j1/m vuwx i im圖4.17成功退出uax ii uo3.5任務(wù)53.5.1設(shè)計思想用td対待破解的程序進(jìn)行反匯編。首先,在數(shù)據(jù)段中找到數(shù)據(jù)開始存儲的位置,即找 一大串'()'后出現(xiàn)密集字符的位置,并記下數(shù)據(jù)段的開始位置。接著

43、,尋找10號dos調(diào) 用相關(guān)的語句,縮小尋找密碼存儲位置的范圍。在10號dos調(diào)用相關(guān)語句周圍,找到字符 比較的相關(guān)語句,通過這些語句找到存儲密碼的數(shù)據(jù)段位置。找到存儲密碼的數(shù)據(jù)段,記錄 下相應(yīng)的暗文。再從td反匯編的語句中,找到這些暗文的加密方式,并用該加密方式的反 方式將結(jié)果算出。3.5.2實驗記錄與分析1. 實驗環(huán)境條件:2.60ghz, 2gb 內(nèi)存;windows 10 f dosboxo.74; td.exe5.0。2. 用td對待破解程序進(jìn)行反編譯,并觀察代碼,發(fā)現(xiàn)通過檢查中斷欠量表來反跟蹤的代碼段。如圖4.18所示。cs:000533coxorax, ax8ec0moues.a

44、x67z6a104imoua3e70omouaxjcs: 00o0000-'e7 , axcs:0oo90:067z6a1g6imouaxjcs: 00000001cs: oo1da3e9i010mou0:0'e9 , axa3edi67z6a1gcia3ebio:o67z6a10eio:omoumoumoumouaxjcs: 0000000(0:0>eb , axaxjcs: 000000010:0'ed , ax圖4.18中斷矢量表來反跟蹤3. 跳過這段反跟蹤的代碼,看到9號dos調(diào)用,相關(guān)偏移地址是0080h,查看數(shù)據(jù)段,數(shù)據(jù)段的開始是ds:o1doh, 0

45、1 doh加上0080h為0285h,找到數(shù)據(jù)段ds中的0250h,發(fā)現(xiàn)恰好是輸入提示語。如圖4.19所示。ds:0250 50 50 02 61 73 65 z0 69 ppsase i圖4.19 0285語句為提示語句4找到10號調(diào)用相關(guān)語句,發(fā)現(xiàn)輸入密碼存儲的位置從00dch開始。如圖4.20所示。圖4.20 10號調(diào)用找到密碼存儲的起始位置5找到相關(guān)的比較語句,是和ooddh所在處比較,這川以確定是在比鮫字符串長度。從而了解密碼存放處的位置是00b5o如圖4.21所示。movxormouceeoodd cl,4b be0ob5cmpclbl圖4.21比較字符串長度語句6. 將00b5h

46、加上01d0h,得到存放密碼處在ds段屮的位査,即0285h。在存放數(shù)據(jù) 的區(qū)塊中,跳轉(zhuǎn)到ds:0285h,可以觀察到密碼存儲處的內(nèi)容密碼長度的密文為48hc 如圖4.22所示。cs:0067 cdz1 cs:0o69 8a0edd0o cs:0o6d 80f14bcs:0070 8a1eb500cs:o074 3acbcs:0076 of85d6o0cs:007a bz03cs:o07c ofb6o6de0083e8zzfecaf6ez3a06b60o0f85c00eintz1mouciaooddxorcl,4bmoubeo0b5cmpcllkljne0150moude03movzxax,b

47、yte ptr subdecdlmuldlcmpaeo0b6jne0150ds:0z7d do go 00 od 0a 24 00 00ds:0z85 48 4c 93 44 b3|fa 02 45 hlod| be ds:0z8d 6e 74 65 7z 69 6e 67 ze ntering. ds:0z95 ze ze od qa z4 57 6f 戊$血(3圖4.22密碼密文存放處7在代碼段中找到界或的語句,發(fā)現(xiàn)是和4bh進(jìn)行異或。如圖4.23所示。將48與4bh異或,得到3,說明密碼長度為3。xor cl,4bmou be00b5cbbl圖4.23與4b異或&記錄下密碼的暗文

48、,分別是4c, 93和44如圖4.24所示。ds:0z85 48 gc 93 44 丈ds:0z8d 6e 74 bb zz 65 百 7f 7f an a 7a圖4.24密碼的暗紋9在代碼段中找到比較相關(guān)的語句,如圖4.25所示。cs:00883a06b6o0cmpae00b6cs:008cjne0150cs:0090ofb6o6df0omouzxax,by七巳 ptr00df1cs:009583e833subaxj0033cs:0098feczincdlcs:009af6ezmuldlcs:009c3ao6b70ocmpaetoob?cs:00a00f85ac0ojne0150cs:00a

49、40fb606e0q0mouzxax,by七巳 ptr00e0cs:00as83e811subaxjoollcs:00ac83e811subaxjoollcs:00affecadecdlcs:00blf6ezmuldlcs:00b33a06b800cmpae00b8圖4.25密碼比較代碼10. 觀察相關(guān)代碼,可以得到算式(ax-22h)*2=4ch ©( ax-33h)*3=93h (ax-22h)*2=44ho解得密碼的ascii碼值分別為48h、64h和44h。對應(yīng)的字符是hdd11. 運(yùn)行程序,輸入密碼hdd,查找學(xué)生hongdou (學(xué)生姓名直接用暴力破解即可),成 功找到該

50、學(xué)綸成績,如圖4.26所示。c:>taskzplease input the password:hdd entering.inpu t th name (or inpu tto qui t):hongdoumassage found ?圖4.26查詢到學(xué)生洪豆的信息12. 繼續(xù)觀察代碼段,觀察到計算平均值的位置,如圖4.27所示。發(fā)現(xiàn)數(shù)據(jù)是用ds:()()a()l-ds:00a2的3個字符抑或加密的。這三個字母的ascii碼分別是43h,68h和65holx,010x0aetbx+ooao00a3j,almovmoumov mou mou add mou xor mou shl inc圖

51、4.27找到分?jǐn)?shù)的加密方法13. 在數(shù)據(jù)段屮找到存放hongdou分?jǐn)?shù)所在處。即ds:ll4*2+10o發(fā)現(xiàn)密文分別是01h, 30h和35h。如圖4.28所示。:01ee 1c1516id077z7z7z:01f6 qi303590496e7o75-mfv *747q*74argg7aava1圖4.28 3個分?jǐn)?shù)的密文14. 對密文分別川43h、68h和65h進(jìn)行異或,得到hongdou的三門課程的分?jǐn)?shù)分別為:66 分(42h), 88 分(58h), 80 分(50h)。15. 若密碼是以明文存儲在數(shù)據(jù)段的,那么直接找到相應(yīng)的數(shù)據(jù)段進(jìn)行讀取即可(相應(yīng) 數(shù)據(jù)段的獲取方法:觀察代碼段中冇關(guān)比較密碼的部分,在其中找到冃標(biāo)數(shù)據(jù)段的偏移地 址)。若學(xué)生姓名是以明文的形式儲存的,可以肯接用td在內(nèi)存中觀看;另外,可用二進(jìn)制編輯文件打開進(jìn)行觀察。16. 在使川暴力破解時,可以先確定密碼的位數(shù),再使丿ij窮舉法生成該位數(shù)的所冇組合, 在生成組合的同時,進(jìn)行密碼的一一嘗試,直到破解成功。4. 總結(jié)與體會任務(wù)總結(jié)與體會在本次實驗中,實驗者掌握了中斷矢量表的概念,并使用3種方式查看了中斷欠量表; 學(xué)握了實方式下中斷處理程序的編制與調(diào)試的方法,以及學(xué)握了實方式下物理地址的訪問以 及bios的調(diào)用方法。中斷欠量表是中斷類型碼和對應(yīng)的中斷程序之間的

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論