华中科技大学汇编实验报告.docx
《华中科技大学汇编实验报告.docx》由会员分享,可在线阅读,更多相关《华中科技大学汇编实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
华中科技大学汇编实验报告
课程实验报告
课程名称:
汇编语言程序设计试验
试验名称:
试验七跟踪与反跟踪程序设计
试验时间:
-5-3,14:
00-17:
30试验地点:
南一楼804室73号试验台
指导老师:
张勇专业班级:
计算机科学与技术09班
学号:
U姓名:
唐礼威
同组学生:
无汇报日期:
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版)