华中科技大学汇编语言程序设计实验报告(七)_第1页
华中科技大学汇编语言程序设计实验报告(七)_第2页
华中科技大学汇编语言程序设计实验报告(七)_第3页
华中科技大学汇编语言程序设计实验报告(七)_第4页
华中科技大学汇编语言程序设计实验报告(七)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程实验报告课程名称:实验名称:汇编语言程序设计实验实验四中断与反跟踪实验时间:2017-4-26, 14: 30-17: 30实验地点: 南一楼804室45号实验台指导教师:李专专业班级:计算机科学与技术201502班学 号: u201414596姓 名:卢振兴同组学生:洪豆报告日期: 2017年4月26 li原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的 引用己经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体己 经公开发表的作品或成果,不存在剽窃、抄袭行为。特此声明!学生签名:卢振兴日期:2017. 4. 19成绩评定实验完成质最

2、得分(70 分)(实验步骤清晰详细深 入,实验记录真实完整等)报告撰写质量得分(30 分)(报告规范、完整、通 顺、详实等)总成绩(100分)指导教师签字:1实验目的与要求(1)学握中断矢量表的概念;(2)熟悉i/o访问,bios功能调用方法;(3)掌握实方式下屮断处理程序的编制与调试方法;(4)熟悉跟踪与反跟踪的技术;(5)提升对计算机系统的理解与分析能力。2. 实验内容任务1:用三种方式获取中断类型码16h对应的中断处理程序的入口地址。要求:首先要进入虚拟机状态,然后(1)直接运行调试工具(td.exe),观察中断矢量表中的信息。(2)编写程序,用16h功能调用方式获取(16h的使用可查阅

3、教材附录),观察功能调 用相应的出口参数少“(1)”看到的结果是否相同(便用td观看出口参数即町)。(3)编写程序,直接读取相应内存单元,观察读到的数据与“(1)”看到的结果是否 相同(使用td观看程序的执行结果即可)。任务2:编写一个接管键盘中断的中断服务程序并驻留内存,要求在程序返回dos 操作系统后,键盘上的小写字母都变成了大写字母。要求:(1)在dos虚拟机或dos窗口下执行程序,屮断服务程序驻留内存。(2)在dos命令行卜键入小写字母,屏幕显示为大写,键入人写时不变。执行td, 在代码区输入指令“mov ax,0”看是否能发生变化。(3)选作:另外编写一个中断服务程序的卸载程序,将键

4、盘小断服务程序恢复到 原来的状态(也就是还原中断欠虽表的信息,先前驻留的程序可以不退出内存)。任务3:读取cmos内指定单元的信息,按照16进制形式显示在屏幕上。要求:(1)先输入待读取的cmos内部单元的地址编号(可以只处理编号小于10的地址 单元)。再使川in/out指令,读取cmos内的指定单元的信息。(2)将读取的信息用16进制的形式显示在屏幕上。若是时间信息,可以人工判断- 下是否正确。3. 实验过程3/1任务13.1.1实现思想用方法一渣看时,将ds段置零,找到16h中断所在位置。由于在实方式下,每个中断 表项占4个字节,那么16h的物理地址就是00000+16hm=00058ho

5、在数据段中使用goto, 到达ds: 0058h,即可査看到中断类型码16h对应的中断处理程序的人口地址。用方法二查看时,用到了 35h取中断信息的功能。将3516h参数传送到ax (相当于 ah二35, al二16),在调用35h功能号后,bx和es中将分别保存中断类型码16h入口地 址的信息,即ip和cs。用方法三查看时,直接用bx和cx读取相应的内存单元的段值和偏移地址,即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,进入界面后,在寄存器区域中将ds置0。在数据段中,使 用goto转到oo58h,查看前4个比特中存放的值,前两个比特(16位)存放的是段值,后 两个比特(16位)存放的是偏移地址。2. 在notepad+中录入源程序中方法二所示的程序,进行编译连接,并在td中运行。 使丿ij单步调试,观察出口参数中bx和es中的值。3. 在notepad+'|录入源程序屮方法三所示的程序,进行编译连接,并在td中运行, 使用单步调试,分别观察bx和cx小的值。4. 用td将中断矢量表中的值改为任意值,观察程序发牛:的现象。3.1.4实验记录与分析1. 实验环境条件:2.60ghz,

8、2gb 内存;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的信息,发现该中断的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将方法二的源程序录入,进行单步调试,执行调川35h的功能查看es和bx中存放的数据。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执行35h调用后寄存器和es段中的结果f0005. 将方法三的源程序录入,进行单步调试。在执行完mov cx,ds:5ah后,查看bx寄存器和cx寄存器中的内容。bx中存放的是ip值11e0, cx中存放的是cs值f000,这与方法一和方法二得到的结果相同。如图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执行完movcx,ds:(5ah|后的结果6. 尝试修改中断矢量表中的值后,运行程序。发现,程序无法中断,接连不断地运行着。如图4.4所示。图4.4程序无法中断3.2任务23.2.1设计思想及存储单元分配对16h对应的中断处理程序进行接管,首先需要将旧指令的偏移地址和段值保存在一 个双字中,并将新指令加入到当前段中,并在新段中通过jmp dword ptr old_1nt和 pushf;call dword ptr old int两种方式来调用i口的屮断功能。00h和10h两

12、个功能号表示从键盘读入字符,因此,可对ah中的值进行判断(是否 等于00h或01h)实现输入字符时就能调用修改后的中断服务的目的。当系统接收键盘开 始读入字符的信息时(ah等于00h或10h时),就开始执行实现将小写字母转化为大写字 母的功能。字母的转化需要判定输入值的ascii码。若输入字符(al)的ascii码在61h到7ah z间,那么将该字符减i 20h,从而实现小写字母到大写字母的转换。存储单元的分配:al, ah用于系统调用赋予参数ax用丁临时存储关于屮断服务程序的卸载程序,首先将修改屮断所在的cs段的段值传送给es,接着禁止屮断(cli)将被修改的小断原屮断的值重新覆盖,即将es

13、:o赋值给ds:16hm,es:赋值给ds:16h*4+2,执行完毕后开中断(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 ;将小写转换为人写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冲断程序恢复.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进行编译和连接,如有报错返冋 修改,如连接成功,则继续下-步。2. 向屏幕中输入字符,观察小写字母是否能被转化为大写字母。3. 同时打开另一个虚拟dos窗口,观察键盘的大小写会被替代。4 .找到其他确定口己编写的程序被调用的方法。3.2.5实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;windows 1()下 dosbox().74; td.exe 5.()。2. 在源代码屮,运川了两种方法进入原來的屮断程序,如图4.6所示。在jmpdword ptr

17、old_1nt这种方式中,调用了原來的中断程序后会直接退出中断处理程序。而在 pushf;call dword ptr old int这种方式屮,在现有程序屮遇到了 iret才算真正地 退出程序。jmp dword ptr old_int pushfcall dword ptr old int图4.6调用原中断程序的两种方式3. 录入源代码,用dosbox进行编译和连接,并运行该程序。4. 运行程序,dos能够正常工作,输入字符abcabcxyzlo#s ,字符变为abcabcxyz10#s,即小写字母都变为了大写,如图4.7所示。:>sixc:>abcabcxyz10#$图4.7

18、调用了修改后的中断程序5打开另一个dosbox,键盘小写没有被取代为大写。这说明修改后的中断处理程序只对当前虚拟机起作用。如图4.8所示。图4.8不影响其他虚拟机6.在原虚拟机中,用td对-修改后中断程序进行调试。单步调试,在中断号16h处,可以用alt+f7进入中断程序。发现16h屮断屮的内容已经成功被修改。这是除了肓接看小写字母被改为人写字母外的确定屮断程序被调川的方法。如图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.在中断服务卸载程序中,从ds:16h*4+2中获取原cs段

20、,从原cs段的0和处分别获 得原中断程序的ip和cs,并将原來中断程序的1p和cs分别存入ds:i6h4j和ds:l16*4+2j 屮,实现覆盖修改麻屮断程序的目的。调用屮断服务卸载程序。发现小写功能恢复。如图 4.10所示。c:>sixcc:>ssssdds11 legal command: ssssdds.c:>sixrecoc:dddd图4.10成功卸载修改后的中断程序3.3任务33.3.1设计思想及存储单元分配首先调用2号dos指令,读取键盘信息,将读取的信息与q比较,若为c,则退出。若不是q,则将al中的数字转化为十进制的0-9。将al的倍息取出到端口 70h,再从

21、端口 71h中读入cmos中的数据。将al中的高4位转入ah,仅保阳低4位(将al与0fx相 与)。将ah中的值右移4位,即将压缩bcd码中的高四位传入ah的低四位。再用将ax 的值赋给bx,输il! bx中的数,此数即为cmos中指定单元的信息。3.3.2流程图图4.11读取cmos内指定单元信息流程图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;转化为10进制09out 70h, al;将信息取出in al,71h;读入信息mov ah, aland al, ofhshrah,4add ax, 3o3oh;

23、转化为ascll码mov bx, axd0s2 oahdos2 odhdos2 bh;输出信息dos2 bldos2 oahdos2 odhjmp lopa;循环执行quit: mov ah, 4chint21hcode endsend start3.3.4实验步骤1. 用notepad+录入源程序所示的代码,用dosbox进行编译和连接,如有报错返回修改,如连接成功,则继续下一步。2. 调用该程序,观察向屏幕输入09时的,系统输出的情况。3. 分析系统输出的悄况,并用相应的时间信息对输出进行检验。3.3.5实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;windows 10

24、 下 dosboxo.74; td.exe5.0。2. 将源程序所示的代码用notepad+录入,并用dosbox进行编译连接,运行程序。3. 输入4,读取小时;输入2,读取2读取分钟,输入6,读取一周的第儿日,输入7读取ii期,输入8读取月份,输入9读取年份。结果与客观时间相符介。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数据取出的输出4. 在cmos中,压缩bcd码存放在

25、一个字节中,以两个10进制8421码的形式存在(高4位1个,低4位1个)。5. 打开td,在代码区中直接输入三行代码:moval,4;out70h,al;inal,71h。小时的结果成功地被放入al屮,如图所示。图4.13在td中使用in/out指令获取cmos数据3.4任务43.4.1设计思想在本反跟踪的设计屮,使丿ij 了通过计时方法來抵制动态调试跟踪通过检查堆栈來抵制动态调试跟踪。增加冗余项目干扰视线在人工单步调试时,指令执行的间隔往往容易达到秒级,而在连续执行的程序屮的指令 一般不会达到毫秒级别。因此,通过计算几条指定指令所耗费的时间就町以知道该程序是否 被调试。可以在指定的执行指令前

26、获取一下当前时间,然后再执行这几句指令。计算这两条 语旬的时间差值,若差值为0或55ms就说明没有被跟踪。在动态调试的过程屮会产生单步的小断,该屮断响应过程会使用被调试程序的堆栈,即 调试程序栈顶以上儿个字的存储区内容会被中断响应过程修改。所以,预先在程序中执行压 栈和出栈操作,即可设定栈顶以上几个字的内容;再次获取这些内容,判断它们是否为先前 压栈的内容,即町判断是否被调试。此外,在代码中增加进栈、出栈以及定义语句等兀余项1=1,可以起到干扰视线的作用, 这也就进步增加了破解的困难。342流程图图4.14反跟踪设计流程3.4.3源程序.386data segment use16nequ3nl

27、eng equ 10;个学生名字的长度sdata equ 14;个学生数据的长度buf db n xor xor 昭 xor *s7 dup(o);学生姓名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*;系统的密码pwd db 4 xor c;密码串的长度为4,采用与常数43h界或的方式编码成密文db (丁29h严3滇实密码为joy!0采用函数(x-29h)*3对保存的密码进行编码。db ('()

30、9; 29h)*3db ('y -29h)*3db (t -29h)*3db 5fh,0d3h ;用随机数填充密码区到6个字符,防止破解者猜到密码长度in_pwd db7;使用者输入的密码区,最大长度6个字符db?db 7 dup(o)crlf db 0dh,0ah,'$poin dw 0pldwpass1eldwoverp2dwpass2data ends;地址表(用于间接转移反跟踪)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;如果计时不同,则把转移地址偏离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的地址)取到jmp bx;如果被跟踪,将不会转移到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;当密码不等时,通过地址表计算出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;读入学生姓名mov ah, 10int21hmov cx,n;读入学生的个数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;姓名结束,说明查找成功了。jegrade ;查找成功后跳入grade,对分数进行评判cmp dh,dl ;比较该缓冲区域的姓名和用户输入的姓名字符jne loopa ;如果不相等返m loopainc sidec di ;10个字符,如果归零就跳入成绩段je grad

37、ejne loopbgrade: mov bp, nsub bp, cximulbp, sdataadd bp, nlengmov poin, bp ;将该学生的起始偏移地址存入poin屮callcalgrmov al, ds:bp+3;lea dx, granot;显示输出的分数提示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;输出继续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;下面计算所有学生的成绩calgrprocpush bpmovcx,nmovbp,ngralp: subbrcximulbrsdataaddbp, nlengmovdx,0movax,0moval,ds:bp;开始计算平均成绩xoral,in_pwd+2 ;将密文转化成明

40、文sal ax jmovdl, ds:bp + ixordl,in_pwd+3 ;将密文转化成明文addax, dxmovdl, ds:ibp+2jxordl,in_pwd+4 ;将密文转化成明文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+,并保存进行编译和连接。2. 若连接岀错,返回修改代码;若无错误,进行下一步。3. 运行程序,输入正确密码时,能够进行正常的查询工作。4. 输入错误密码时,程序终止。3.4.5实验记录与分析1实验环境条件:2.60ghz, 2gb 内存;windows 1()下 dosbox().74; td.exe 5.()。2. 在dosbox屮对录入好的程序进行编译,并运行。3. 输入正确的密码,如图4.15所示。c:>seuenplease gntgr the password?图4.15输入正确的密码4成功进入正常程序部分,输入实验者姓名,显示实验者成绩信息。如图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进行单步调试,则会提前退出,从而能达到反跟踪的效果。如图4.17所示。a a a j1/m vuwx i im图4.17成功退出uax ii uo3.5任务53.5.1设计思想用td対待破解的程序进行反汇编。首先,在数据段中找到数据开始存储的位置,即找 一大串'()'后出现密集字符的位置,并记下数据段的开始位置。接着

43、,寻找10号dos调 用相关的语句,缩小寻找密码存储位置的范围。在10号dos调用相关语句周围,找到字符 比较的相关语句,通过这些语句找到存储密码的数据段位置。找到存储密码的数据段,记录 下相应的暗文。再从td反汇编的语句中,找到这些暗文的加密方式,并用该加密方式的反 方式将结果算出。3.5.2实验记录与分析1. 实验环境条件:2.60ghz, 2gb 内存;windows 10 f dosboxo.74; td.exe5.0。2. 用td对待破解程序进行反编译,并观察代码,发现通过检查中断欠量表来反跟踪的代码段。如图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调用,相关偏移地址是0080h,查看数据段,数据段的开始是ds:o1doh, 0

45、1 doh加上0080h为0285h,找到数据段ds中的0250h,发现恰好是输入提示语。如图4.19所示。ds:0250 50 50 02 61 73 65 z0 69 ppsase i图4.19 0285语句为提示语句4找到10号调用相关语句,发现输入密码存储的位置从00dch开始。如图4.20所示。图4.20 10号调用找到密码存储的起始位置5找到相关的比较语句,是和ooddh所在处比较,这川以确定是在比鮫字符串长度。从而了解密码存放处的位置是00b5o如图4.21所示。movxormouceeoodd cl,4b be0ob5cmpclbl图4.21比较字符串长度语句6. 将00b5h

46、加上01d0h,得到存放密码处在ds段屮的位査,即0285h。在存放数据 的区块中,跳转到ds:0285h,可以观察到密码存储处的内容密码长度的密文为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在代码段中找到界或的语句,发现是和4bh进行异或。如图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在代码段中找到比较相关的语句,如图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. 观察相关代码,可以得到算式(ax-22h)*2=4ch ©( ax-33h)*3=93h (ax-22h)*2=44ho解得密码的ascii码值分别为48h、64h和44h。对应的字符是hdd11. 运行程序,输入密码hdd,查找学生hongdou (学生姓名直接用暴力破解即可),成 功找到该

50、学纶成绩,如图4.26所示。c:>taskzplease input the password:hdd entering.inpu t th name (or inpu tto qui t):hongdoumassage found ?图4.26查询到学生洪豆的信息12. 继续观察代码段,观察到计算平均值的位置,如图4.27所示。发现数据是用ds:()()a()l-ds:00a2的3个字符抑或加密的。这三个字母的ascii码分别是43h,68h和65holx,010x0aetbx+ooao00a3j,almovmoumov mou mou add mou xor mou shl inc图

51、4.27找到分数的加密方法13. 在数据段屮找到存放hongdou分数所在处。即ds:ll4*2+10o发现密文分别是01h, 30h和35h。如图4.28所示。:01ee 1c1516id077z7z7z:01f6 qi303590496e7o75-mfv *747q*74argg7aava1图4.28 3个分数的密文14. 对密文分别川43h、68h和65h进行异或,得到hongdou的三门课程的分数分别为:66 分(42h), 88 分(58h), 80 分(50h)。15. 若密码是以明文存储在数据段的,那么直接找到相应的数据段进行读取即可(相应 数据段的获取方法:观察代码段中冇关比较密码的部分,在其中找到冃标数据段的偏移地 址)。若学生姓名是以明文的形式储存的,可以肯接用td在内存中观看;另外,可用二进制编辑文件打开进行观察。16. 在使川暴力破解时,可以先确定密码的位数,再使丿ij穷举法生成该位数的所冇组合, 在生成组合的同时,进行密码的一一尝试,直到破解成功。4. 总结与体会任务总结与体会在本次实验中,实验者掌握了中断矢量表的概念,并使用3种方式查看了中断欠量表; 学握了实方式下中断处理程序的编制与调试的方法,以及学握了实方式下物理地址的访问以 及bios的调用方法。中断欠量表是中断类型码和对应的中断程序之间的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论