华中科技大学汇编实验报告7.docx
- 文档编号:24453897
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:14
- 大小:91.30KB
华中科技大学汇编实验报告7.docx
《华中科技大学汇编实验报告7.docx》由会员分享,可在线阅读,更多相关《华中科技大学汇编实验报告7.docx(14页珍藏版)》请在冰豆网上搜索。
华中科技大学汇编实验报告7
课程实验报告
课程名称:
汇编语言程序设计实验
实验名称:
实验七跟踪与反跟踪程序设计
实验时间:
2016-5-3,14:
00-17:
30实验地点:
南一楼804室73号实验台
指导教师:
张勇专业班级:
计算机科学与技术201409班
学号:
U*********姓名:
唐礼威
同组学生:
无报告日期:
2016年5月7日
原创性声明
本人郑重声明:
本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。
除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。
特此声明!
学生签名:
日期:
成绩评定
实验完成质量得分(70分)(实验步骤清晰详细深入,实验记录真实完整等)
报告撰写质量得分(30分)(报告规范、完整、通顺、详实等)
总成绩(100分)
指导教师签字:
日期:
1
实验目的与要求
(1)熟悉跟踪与反跟踪的技术;
(1)提升对计算机系统的理解与分析能力。
2实验内容
任务1:
数据加密与反跟踪
在实验二的基础上,增加查询前输入密码的功能,密码不对则程序退出,只有密码正确之后才能完成后续的功能。
密码采用密文的方式存放在数据段中。
各科成绩也以密文方式存放在数据段中。
加密方法自选。
可以采用计时、中断矢量表检查、堆栈检查、间接寻址等方式中的一种或多种方式反跟踪。
成绩表中要有自己的名字和各科成绩(密文存放)。
提示:
为了使源程序的数据段中定义的密码、学生姓名、各科成绩能在汇编之后变成密文,可以使用数值运算符(参见教材P48)对变量的初始值进行变换。
例如,如果想使语文成绩90分变成密文,加密算法是与密钥字符“W”做异或运算,则可写成:
YUWENDB90XOR‘W’
任务2:
跟踪与数据解密
解密同组同学的加密程序,获取该同学的成绩。
注意:
两人一组,每人实现一类加密与反跟踪方法,把执行程序交给对方解密。
如何设计反跟踪程序以及如何跟踪破解的,是本次实验报告中重点需要突出的内容。
3实验过程
3.1任务1
3.1.1设计思想及存储单元分配
此次实验主要是两部分内容:
1.实现正常功能模块(即实验2所做的内容)2.加密模块:
要求提供验证密码功能(加密算法设计:
使用的是简单的算数逻辑运算,具体是将姓名与s异或,成绩与Bat异或,密码为Bat,采用函数(X-29H)*3对保存的密码进行编码;反跟踪功能设计:
在各个模块中穿插反跟踪代码,防止破解人员利用td破解)。
3.1.2流程图
3.1.3源程序
.386
STACKSEGMENTUSE16STACK
DB200DUP(0)
STACKENDS
;
DATASEGMENTUSE16
NUMDD3
RADXDD10
BASEDB10
D1DB0DH,0AH,'STUDENTNAME:
$'
D2DB0DH,0AH,'GRADE:
$'
PROMPTdb0dh,0ah,'pleaseenterpassword:
$'
MSGdb0dh,0ah,'pleaseinputtargetname:
$'
BUFDB'z'XOR's','h'XOR's','a'XOR's',7DUP(0)
DB100XOR'B',85XOR'a',80XOR't',?
DB'l'XOR's','i'XOR's','s'XOR's','i'XOR's',6DUP(0)
DB80XOR'B',98XOR'a',70XOR't',?
PWDDB3XOR'C';密码串的长度为3,采用与常数43H异或的方式编码成密文
DB('B'-29H)*3;真实密码为Bat。
采用函数(X-29H)*3对保存的密码进行编码。
DB('a'-29H)*3
DB('t'-29H)*3
DB0A1H,5FH,0D3H;用随机数填充密码区到6个字符,防止破解者猜到密码长度
;
IN_PWDDB7;输入密码,最大长度6个字符
DB?
DB7DUP(0)
;
INPUTDB11
DB?
DB11DUP(0)
P1DWPASS1;地址表
E1DWOVER
P2DWPASS2
P3DWPASS3
DATAENDS
;
CODESEGMENTUSE16
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
LEADX,PROMPT
MOVAH,9
INT21H
LEADX,IN_PWD;输入密码字符串
MOVAH,10
INT21H
cli;计时反跟踪开始
movah,2ch
int21h
pushdx;保存获取的秒和百分秒
MOVCL,IN_PWD+1;比较输入的串长与密码长度是否一样
XORCL,'C'
SUBCL,PWD
MOVSXBX,CL
ADDBX,OFFSETP1
movah,2ch;获取第二次秒与百分秒
int21h
sti
cmpdx,[esp];计时是否相同
popdx
jzOK1;如果计时相同,通过本次计时反跟踪
movbx,offsetE1;如果计时不同,则把转移地址偏离P1
OK1:
movbx,[bx]
cmpwordptrcs:
[bx],0B60FH;是否是PASS1处的指令,其实是用于判断前面比较的
;串长是否相同
jzOK2
jmpE1
OK2:
jmpbx
db'Howtogo';定义的冗余信息
PASS1:
MOVZXCX,IN_PWD+1
cli;堆栈检查反跟踪
pushP2;PASS2的地址压栈
MOVSI,0
MOVDL,3
popax
movbx,[esp-2];把栈顶上面的字(PASS2的地址)取到
sti
jmpbx;如果被跟踪,将不会转移到PASS2
db'idonotknow!
'
PASS2:
MOVZXAX,IN_PWD+2[SI];比较密码是否相同。
把输入的串变成密文,与保存的密文比较
SUBAX,29H
MULDL
CMPAL,PWD+1[SI]
JNZERR2
INCSI
DECCX
CMPCX,0
JNEPASS2
JMPPASS3
ERR2:
MOVEBX,OFFSETP1
MOVEDX,1
JMPWORDPTR[EBX+EDX*2];指向OVER
db'YES,getit'
;
PASS3:
; 正常功能区
leadx,msg;输出提示信息-请输入姓名
movah,9h
int21h
leadx,input;读入学生姓名,以'$'符号结尾
movah,0ah
int21h
leaesi,input+2
leaedi,buf
xorebx,ebx
xorecx,ecx
search_loop:
cmpecx,num
jgesearch_finish
xoreax,eax
search_inner:
cmpeax,radx
jgesearch_finish
movdl,[esi+eax]
xordl,'s'
cmp[edi+ebx],dl
jnzsearch_next
cmpbyteptr[edi+ebx+1],0
jzsearch_finish
inceax
incebx
jmpsearch_inner
db'thefuturewillbebettertomorrow'
search_next:
incecx
imulebx,ecx,14
jmpsearch_loop
db'welcometohust'
search_finish:
xorebx,ebx
output:
subebx,ecx
imulbx,14;根据目标学生下标值,找到分数缓冲区首地址
movsi,0
movax,0
movdx,0
moval,buf+10[bx+si]
xoral,in_pwd+2[si]
addax,ax
incsi
movdl,buf+10[bx+si]
xordl,in_pwd+2[si]
addax,dx;al=zh*2+ma
incsi
movdl,buf+10[bx+si]
xordl,in_pwd+2[si]
sardl,1
addax,dx;al=zh*2+ma+en/2
salax,1;al=2*al
movdx,7
idivdl;al=al/7
incsi
movbuf+10[bx+si],al;avg=al(al/3.5)
pushax
movdl,0ah
movah,2h
int21h
movdl,0dh
movah,2h
int21h
popax
cmpal,90;switch语句
jgegradea
cmpal,80
jgegradeb
cmpal,70
jgegradec
cmpal,60
jgegraded
jmpgradee
db'mysunshine'
gradea:
movdl,41h
movah,2h
int21h
jmppass3
gradeb:
movdl,42h
movah,2h
int21h
jmppass3
gradec:
movdl,43h
movah,2h
int21h
jmppass3
graded:
movdl,44h
movah,2h
int21h
jmppass3
gradee:
movdl,45h
movah,2h
int21h
jmppass3
OVER:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.1.4实验步骤
1.绘制程序流程图;
2.根据程序流程图,编写shiyan7.asm;
3.编译、链接源程序,生成可执行目标文件shiyan7.exe;
4.运行shiyan7.exe,检查程序具有正常功能;
5.输入正确密码后,键入学生姓名,可以正常查询出成绩;
6.输入错误密码后,程序直接终止运行;。
3.1.5实验记录
(包括实验条件、输入/输出、错误和修改等信息的记录)
1、实验环境条件:
P31GHz,256M内存;WINDOWSXP命令行窗口;EDIT.EXE2.0;MASM.EXE6.0;LINK.EXE5.2;TD.EXE5.0。
2、输入密码Bat后程序运行如下
当输入错误的密码时程序直接停止运行,当破解人员在td里调试时,由于执行两条指令的时间远大于执行程序的时长,通过检测这一时差,若两次计时调用间时长过长,直接结束程序,阻止了破解人员进一步破解;当破解人员利用反汇编工具运行程序时,栈顶数据的值被修改,可通过此检测程序是否是在反汇编环境下执行;若程序在异常环境下运行,则立即终止程序。
3.2任务2
3.2.1设计思想及存储单元分配
在td里单步执行待破解的程序,可以很直观地获得程序的执行流程和完成的操作。
若碰到反跟踪程序段,配合设置断点的方法,绕过反跟踪程序段设置的陷阱。
3.2.2流程图
无
3.2.3源程序
无
3.2.4实验步骤
1.运行TD,开始破解密码;
2.当遇到疑似反跟踪代码时,若其中含有功能代码,则在其尾部设置断点,直接运行过去;
3.当遇到疑似反跟踪代码时,若其中不含功能代码,纯粹为反跟踪代码,则直接修改IP寄存器的值,跳过此段代码的执行;
4.在验证密码与计算成绩处,找出加密手段;在相关数据段,找出暗文数据;
5.利用暴力破解法,编写破解脚本,结合加密手段与暗文,得到明文数据;
6.记录明文数据,并利用源代码进行验证,查看是否成功破密;
4体会
这次实验初步熟悉了一些跟踪与反跟踪手段:
中断向量检测、计时检测、堆栈检测。
提升了自己对计算机系统的理解与分析能力,懂得如何进行简单的数据加密。
这次实验收获很大,相信对今后的编程有很大的帮助。
参考文献
[1]王元珍等.80x86汇编语言程序设计.版本(第1版)
[2]王晓虹等.汇编语言程序设计教程.版本(第1版)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华中科技大学 汇编 实验 报告