华中科技大学汇编实验报告7Word文档格式.docx
《华中科技大学汇编实验报告7Word文档格式.docx》由会员分享,可在线阅读,更多相关《华中科技大学汇编实验报告7Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
指导教师签字:
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'
a'
7DUP(0)
DB100XOR'
B'
85XOR'
80XOR'
t'
?
DB'
l'
i'
6DUP(0)
DB80XOR'
98XOR'
70XOR'
?
PWDDB3XOR'
C'
;
密码串的长度为3,采用与常数43H异或的方式编码成密文
DB('
-29H)*3;
真实密码为Bat。
采用函数(X-29H)*3对保存的密码进行编码。
-29H)*3
-29H)*3
DB0A1H,5FH,0D3H;
用随机数填充密码区到6个字符,防止破解者猜到密码长度
IN_PWDDB7;
输入密码,最大长度6个字符
DB?
DB7DUP(0)
INPUTDB11
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
cli;
计时反跟踪开始
movah,2ch
int21h
pushdx;
保存获取的秒和百分秒
MOVCL,IN_PWD+1;
比较输入的串长与密码长度是否一样
XORCL,'
SUBCL,PWD
MOVSXBX,CL
ADDBX,OFFSETP1
movah,2ch;
获取第二次秒与百分秒
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
堆栈检查反跟踪
pushP2;
PASS2的地址压栈
MOVSI,0
MOVDL,3
popax
movbx,[esp-2];
把栈顶上面的字(PASS2的地址)取到
jmpbx;
如果被跟踪,将不会转移到PASS2
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
YES,getit'
PASS3:
正常功能区
leadx,msg;
输出提示信息-请输入姓名
movah,9h
leadx,input;
读入学生姓名,以'
符号结尾
movah,0ah
leaesi,input+2
leaedi,buf
xorebx,ebx
xorecx,ecx
search_loop:
cmpecx,num
jgesearch_finish
xoreax,eax
search_inner:
cmpeax,radx
movdl,[esi+eax]
xordl,'
cmp[edi+ebx],dl
jnzsearch_next
cmpbyteptr[edi+ebx+1],0
jzsearch_finish
inceax
incebx
jmpsearch_inner
thefuturewillbebettertomorrow'
search_next:
incecx
imulebx,ecx,14
jmpsearch_loop
welcometohust'
search_finish:
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
sardl,1
al=zh*2+ma+en/2
salax,1;
al=2*al
movdx,7
idivdl;
al=al/7
movbuf+10[bx+si],al;
avg=al(al/3.5)
pushax
movdl,0ah
movah,2h
movdl,0dh
cmpal,90;
switch语句
jgegradea
cmpal,80
jgegradeb
cmpal,70
jgegradec
cmpal,60
jgegraded
jmpgradee
mysunshine'
gradea:
movdl,41h
jmppass3
gradeb:
movdl,42h
gradec:
movdl,43h
graded:
movdl,44h
gradee:
movdl,45h
OVER:
MOVAH,4CH
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里调试时,由于执行两条指令的时间远大于执行程序的时长,通过检测这一时差,若两次计时调用间时长过长,直接结束程序,阻止了破解人员进一步破解;
当破解人员利用反汇编工具运行程序时,栈顶数据的值被修改,可通过此检测
跳过此段代码的执行;
4.在验证密码与计算成绩处,找出加密手段;
在相关数据段,找出暗文数据;
5.利用暴力破解法,编写破解脚本,结合加密手段与暗文,得到明文数据;
6.记录明文数据,并利用源代码进行验证,查看是否成功破密;
4体会
这次实验初步熟悉了一些跟踪与反跟踪手段:
中断向量检测、计时检测、堆栈检测。
提升了自己对计算机系统的理解与分析能力,懂得如何进行简单的数据加密。
这次实验收获很大,相信对今后的编程有很大的帮助。
参考文献
[1]王元珍等.80x86汇编语言程序设计.版本(第1版)
[2]王晓虹等.汇编语言程序设计教程.版本(第1版)