汇编文件加密大作业

来源:互联网 编辑: 张倩 手机版

; 本程序通过编译,运行正确4102Code Segment Assume CS:Code,DS:Code; --1653---------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addr push dx lea dx,Str_Addr mov ah,9 int 21h pop dx EndM; -----------------------------------------; 功能:打开指定路径下的文件。若打开成功,保存文件代号,设置进位标志;; 否则,建立文件,保存文件代号,清进位标志; 入口参数:dx=文件名地址,bx=文件代号保存地址Open_File Proc Near mov ax,3d02h ;以读写方式打开文件 int 21h jc @@Error mov [bx],ax ;成功打开,保存文件代号 stc ;设置进位标志 ret@@Error: Output Open_Error xor cx,cx ;新建文件属性Create_File:mov ah,3ch ;建立文件 int 21h jc Create_File ;建立不成功,尝试再建 mov [bx],ax ;成功建立,保存文件代号 clc ;清进位标志 retOpen_File EndP; -----------------------------------------; 功能:对字符串缓冲区中的内容逐个字符加密; 入口参数:si=字符串地址,cx=字符数Encode_Str Proc Near push si push cx lea di,Handle_File mov al,[di][88] ;读取密钥@@Encoding: xor byte ptr [si],al ;异或,第一步加密 push cx mov cx,188 rol byte ptr [si],cl ;循环左移188位,第二步加密 pop cx inc si ;下一个字符地址 loop @@Encoding ;处理下一个字符 pop cx pop si retEncode_Str EndP; -----------------------------------------; 功能:对字符串缓冲区中的内容逐个字符加密; 入口参数:si=字符串地址,cx=字符数Uncode_Str Proc Near push si push cx lea di,Handle_File mov al,[di][88] ;读取密钥@@Uncoding: push cx mov cx,188 ror byte ptr [si],cl ;循环右移188位,第一步解密 pop cx xor byte ptr [si],al ;异或,第二步解密 inc si ;下一个字符地址 loop @@Uncoding ;处理下一个字符 pop cx pop si retUncode_Str EndP; -----------------------------------------Handle_File dw ?,?,? ;文件代号File_Name1 db 'c:\masm\rory00.txt',0 ;未加密的文本文件File_Name2 db 'c:\masm\rory01.txt',0 ;加密后的文本文件File_Name3 db 'c:\masm\rory02.txt',0 ;解密后的文本文件Open_Error db 'Open file error,creat a new file.',13,10,13,10,7,'$'Input_New db 'Input the new information:',13,10,'$'Press_Key db 13,10,13,10,'The Encode and Uncode have been completed.',7 db 13,10,13,10,'Press any key to exit...$' Start: push cs pop ds push cs pop es ;使数据段、附加段与代码段同段; -----------------------------------------; 打开或建立三个文件 lea dx,Buffer ;文本内容处理缓冲区 mov cx,0ffc0h ;预留32个字的堆栈空间 sub cx,dx ;设置读写一次文件内容的字节数 mov bp,cx ;暂存 lea dx,File_Name2 ;文件名地址 lea bx,Handle_File[2] ;文件代号保存地址 call Open_File ;打开指定路径下的文件。若打开成功,保存文件代号;否则,建立文件,保存文件代号 lea dx,File_Name3 ;文件名地址 lea bx,Handle_File[4] ;文件代号保存地址 call Open_File lea ax,@@jump000 push ax call @@Locate_01@@Locate_00:lea dx,File_Name1 ;文件名地址 lea bx,Handle_File ;文件代号保存地址 call Open_File jc Read_File; -----------------------------------------; 若是新建文件,输入文件内容,实施加密,写到另一个文件Input_Str: Output Input_New ;提示输入新信息 lea dx,Buffer ;文本内容处理缓冲区 mov ah,0ah ;键盘输入字符串 int 21h lea si,Buffer[1] ;实际输入的字符个数地址 lodsb ;读取实际输入的字符数 test al,0ffh jz Input_Str ;若直接回车,未输入任何字符,再次提示输入新信息 mov dx,si ;数据缓冲区地址 mov cl,al ;实际输入的字符数 xor ch,ch mov bx,Handle_File ;读取未加密的文本文件代号Write_Uncod:mov ah,40h int 21h jc Write_Uncod ;写入失败,尝试再写 call Encode_Str ;逐个字符加密 mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中 mov bx,Handle_File[2] ;文件代号Write_Coded:mov ah,40h int 21h jc Write_Coded ;写入失败,尝试再写 jmp @@Uncode@@Locate_01:pop ax ret; -----------------------------------------; 若成功打开文件,读取文件内容,实施加密,写到另一个文件Read_File: lea dx,Buffer ;文本内容处理缓冲区 mov cx,bp mov bx,Handle_File ;读取未加密的文本文件代号 mov ah,3fh ;读文件内容 int 21h jc Read_File ;读文件失败,尝试再读 test ax,0ffffh jz @@Uncode ;若实际读取的字节数为0,结束读写操作 lea si,Buffer mov cx,ax call Encode_Str ;逐个字符加密 mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中 mov bx,Handle_File[2] ;读取目标文件代号Write_File: mov ah,40h ;写文件 int 21h jc Write_File ;写文件失败,尝试再写 jmp Read_File; -----------------------------------------; 修改子程序Encode_Str和Encode_Str中的循环移位次数@@jump000: mov byte ptr Encode_Str[13],6 mov byte ptr Uncode_Str[11],6 lea ax,@@Locate_00 push ax call @@Locate_01; -----------------------------------------; 将加密完的内容解密,写入第三个文本文件@@Uncode: xor dx,dx xor cx,cxLoca_Seek1: mov bx,Handle_File[4] ;读取解密后的文本文件代号 mov ax,4200h ;移动文件指针至文件头 int 21h jc Loca_Seek1Loca_Seek2: mov bx,Handle_File[2] ;读取加密后的文本文件代号 mov ax,4200h ;移动文件指针至文件头 int 21h jc Loca_Seek2 lea dx,Buffer ;文本内容处理缓冲区Read_File1: mov cx,bp mov bx,Handle_File[2] ;读取加密后的文本文件代号 mov ah,3fh ;读文件内容 int 21h jc Read_File1 ;读文件失败,尝试再读 test ax,0ffffh jz Close_File1 ;若实际读取的字节数为0,结束读写操作,关闭文件 lea si,Buffer mov cx,ax call Uncode_Str ;逐个字符解密 mov dx,si ;数据缓冲区地址,要写入的字符数已在cx中 mov bx,Handle_File[4] ;读取解密后的文本文件代号Write_File1:mov ah,40h ;写文件 int 21h jc Write_File1 ;写文件失败,尝试再写 jmp Read_File1Close_File1:mov bx,Handle_File ;读取未加密的文本文件代号 mov ah,3eh ;关闭文件 int 21h jc Close_File1Close_File2:mov bx,Handle_File[2] ;读取加密后的文本文件代号 mov ah,3eh ;关闭文件 int 21h jc Close_File2Close_File3:mov bx,Handle_File[4] ;读取解密后的文本文件代号 mov ah,3eh ;关闭文件 int 21h jc Close_File3 Output Press_Key ;提示操作完成,按任意键结束程序 mov ah,1 int 21hExit_Proc: mov ah,4ch ;结束程序 int 21hALIGN 10h ;节对齐Buffer db 255 ;文本内容处理缓冲区Code ENDS END Start ;编译到此结束来自:求助得到的回答,哦,又是老汤www.07swz.com防采集请勿采集本网。

因转码可能存在排版等问题,敬请谅解!以下文字仅供您参考:

很复杂,要用反汇编软件!

文件加密系统

如果你的程序核心模块不希望被第3方知道,可以在代码里直接加密,用时解密,或者你有汇编实力,直接将功能模块写成SHELLCODE,加密SHELLCODE,需要调用时动态解密。都整个文件加密的可行性比较低

1、 简介 文件加密是一种根据要求在操作系统层对写入储存介质的 数据进行加密的技术,而汇编语言作为面向机器的语言是 学习程序设计必不可少的基础,在这里我们将这两者结合 于是就有了基于汇编语言的文件加密系统. 2、 小组成员及具体分工 本小组有姬文军和孟星宇组成,其中姬文军负责代码框架 的编写,孟星宇负责功能模块的实现. 3、 需求分析与设计 无论是国外的电话窃听丑闻,还是国内的如家汉庭等大批 酒店开房记录泄露以及最近的腾讯群关系数据泄漏都让人 们意识到隐私保护的重要性,在学习了本学期的汇编语言 设计后我们想到了做一个基于汇编语言的文件加密系统, 算是为隐私保护事业做一个小小的贡献吧! 本系统开始要求选择要加密或者解密的文件,然后可以对 其进行相应的加密或者解密操作,可以实现对普通文件的 加密甚至对图片音频的加密操作.

可以设置鼠标反右击屏蔽效果 让鼠标右键点击不显示属性 不过在怎么弄别人懂点的查看源文件还是能找到 让别人复制你的能增加你网站知名度啊 权重也可以啊

程序设计的大致框图如下:

加密就是将数据以另一种形式表现,将原始数据带入某个函数,得出结果就是另一种形式,但这个函数可能是很复杂的,这是数学家关心的。关于花指令就是误导反汇编软件的,不知道上述生成啥汇编啊?我不太了解

开始 显示欢迎词 退出 选择操作 输入文件名 查找错误 提示输入文件名 1为加密2为解密其他退出 NO 打开文件成功? YES 加密或者解密成功

硬件加密更安全,因为硬件更复杂,一般不能通过网络解密。硬件加密涉及到具体的硬件板子

4、 代码及分析

fopen macro filename,type,handle mov al,type mov ah,3dH lea dx,filename int 21H mov handle,ax endm pianyi macro handle mov ah,42h mov bx,handle mov dx,-1 mov cx,-1 mov al,1 int 21h endm fwrite macro handle,buffer,size mov ah,40H mov bx,handle mov cx,size lea dx,buffer int 21H endm fread macro handle,buffer,size mov mov mov lea int endm

ah,3fH bx,handle cx,size dx,buffer 21H

fclose macro handle mov ah,3eH mov bx,handle int 21H endm pause macro mov ah,07H int 21H endm quit mov int endm macro ax,4c00H 21H

print macro msg mov dx,offset msg mov ah,09H int 21H endm gets macro msg lea dx,msg mov ah,0AH int 21H endm data segment ask db 'Input the times:$' buffer db ? finptr db 20,? fname_in db 20 dup(?),? handle_in dw ? error1 db "open file error!",0dH,0aH,'$' quit_msg db "press any key to continue...$" in_msg1 db "input the source name:",0DH,0AH,'$' succmsg1 db "encry successfully!",0DH,0AH,'$' succmsg2 db "decry successfully!",0DH,0AH,'$' op_msg1 db 0DH,0AH db "*******------ encry and decry ---*************",0DH,0AH db "*| 1-encry,2-decry,other-quit *|",0DH,0AH db "*| *|",0DH,0AH db "*| Please Choice *|",0DH,0AH db"*Your choice :",'$' lines db 0DH,0AH,'$' oprand db ? data ends code segment assume cs:code,ds:data,es:data start: main proc far mov ax,data mov ds,ax mov es,ax start_loop: print op_msg1 mov ah,01H int 21H mov oprand,al print lines cmp oprand,'1' jz input_src_fnamefile cmp oprand,'2' jz input_src_fname jmp exit input_src_fname: print in_msg1 gets finptr lea bx,fname_in mov al,finptr[1] mov ah,0 add bx,ax mov byte ptr [bx],0 print lines fopen fname_in,2,handle_in jnc lg print error1 jmp start_loop lg: cmp oprand,'2' jz start_decry start_encry: call encryex jmp start_loop start_decry: call decryex jmp start_loop exit: print quit_msg pause quit main endp ;加密模块 encryex proc near encryex_start: fread handle_in,buffer,1 cmp ax,cx jb encryex_end pianyi handle_in call encry fwrite handle_in,buffer,1 jmp encryex_start

encryex_end: print lines fclose handle_in print succmsg1 ret encryex endp decryex proc near decryex_start: fread handle_in,buffer,1 cmp ax,cx jb decryex_end pianyi handle_in call decry fwrite handle_in,buffer,1 jmp decryex_start decryex_end: print lines fclose handle_in print succmsg2 ret decryex endp ;加密算法子程序 encry proc near mov bl,0aah lea si,buffer encry_start: mov bh,[si] add bh,bl mov [si],bh inc si ret encry endp ;解密算法子程序 decry proc near mov bl,0aah lea si,buffer decry_start: mov bh,[si] sub bh,bl mov [si],bh inc si ret decry endp code ends end start

5、 运行结果

1、文件加密前:

加密操作: 加密后:

2、 图片加密前: 加密操作:加密后: 3、 视频加密后: 六、总结 通过大作业的实验设计才发现汇编的强大,对于基 层设计汇编的重要性凸显,而且通过实验对于汇编语言 设计的原理也有了进一步的理解,同时通过课程设计也 对汇编提高了兴趣. 最后感谢老师的悉心指导!

去掉5261了那个中断部分。; 本程序通4102过编译,运行正确Code Segment Assume CS:Code,DS:Code; --1653---------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM; -----------------------------------------Encode db '7846302951'Prompt_Str1 db 'Please input the orical code: $' Prompt_Str2 db 7,13,10,13,10,'The encode: $' Prompt_Str3 db 13,10,13,10,'Please record the encode and than press any key to continue...$' String db 20,?,20 dup(?) ;明码输入缓冲区Start: push cs pop ds push cs pop es Output Prompt_Str1 ;提示输入明码 cld lea di,String ;明码字符串地址 mov cx,20 ;明码数字个数,可以不到20个数字,回车键结束明码输入Read_Encode:mov ah,1 int 21h cmp al,13 ;回车? jz Disp_Encode cmp al,'0' jb Read_Encode cmp al,'9' ja Read_Encode stosb loop Read_Encode Disp_Encode:mov cx,di sub cx,offset String ;实际输入的明码数字个数 lea si,String ;明码字符串地址 lea bx,Encode ;密码地址Encoding: lodsb ;读入1位明码 and al,0fh xlat ;查表,取得对应的密码 mov [si-1],al ;写密码 loop Encoding mov byte ptr [si],'$' ;显示字符串采用DOS调用,9号功能,要求字符串以“$”结尾 Output Prompt_Str2 ;提示显示密码 Output String ;显示密码 Output Prompt_Str3 ;提示用户记录密码 mov ah,1 int 21hExit_Proc: mov ah,4ch ;结束程序 int 21hCode ENDS END Start ;编译到此结束 补充回答:未知楼主要怎样的原创,这个是我百分之百的原创。此前提供的连接,也是我百分之百的原创。不知楼主用什么方法来判断回答者的答案是否原创,只有C++的,期待达人来转2113换:用vs2008查看程序反汇编代码5261的方法4102 先打开vs2008 单击 文件→打开→项目/解决方1653案 ,选择自己要反汇编的exe文件 然后单击 调试→逐语句 或者 调试→逐过程 然后代码编辑区就会显示程序的反汇编代码 31.文件简单加密//#include <string>using std::string;string s(%%1);char sep='/';#ifdef _WIN32sep='\\';#endifsize_t sz=s.rfind(sep,s.length());if(sz!=string::npos){ CFile Out,In; int nFIlesize; char *lpMsgBuf; CString strFilename(s.substr(i+1,s.length()-i)); if(!in.Open(%%1,CFile::modeRead)){ //不能打开输入文件 return; } if(!Out.Open(%%2+"//enc_%22+strfilename,cfile::modewrite/ | CFile::modeCreate)){ //不能打开输出文件 return;}nFilesize=In.GetLength();lpBuffer=new char[nFilesize];if(lpBuffer==NULL){ //不能分配复制缓存 return;}CFileStatus rStatus;In.GetStatus(%%1,rStatus);try{ In.Read(cbBuffer,nFilesize);}catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return;}for(int i=0;i<nFilesize;i++){ int ibt=lpBuffer[i]; ibt+=100; ibt%=256; bpBuffer[i]=(char)ibt;}try{ Out.Write(cbBuffer,nFilesize);}catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return;}Out.Close();//In.Close();CFile::SetStatus(%%2+"//enc_%22+strfilename,rstatus); delete[] lpBuffer;} 32.文件简单解密//#include <string>using std::string;string s(%%1);char sep='/';#ifdef _WIN32sep='\\';#endifsize_t sz=s.rfind(sep,s.length());if(sz!=string::npos){ CFile Out,In; int nFIlesize; char *lpMsgBuf; CString strFilename(s.substr(i+1,s.length()-i)); if(!in.Open(%%2+"//enc_%22+strfilename,cfile::moderead)){ //不能打开输入文件 return;}if(!Out.Open(%%1,CFile::modeWrite | CFile::modeCreate)){ //不能打开输出文件 return;}nFilesize=In.GetLength();lpBuffer=new char[nFilesize];if(lpBuffer==NULL){ //不能分配复制缓存 return;}CFileStatus rStatus;In.GetStatus(%%2+"//enc_%22+strfilename,rstatus); try{ In.Read(cbBuffer,nFilesize);}catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return;}for(int i=0;i<nFilesize;i++){ int ibt=lpBuffer[i]; ibt-=100;ibt+=256; ibt%=256; bpBuffer[i]=(char)ibt;}try{ Out.Write(cbBuffer,nFilesize);}catch(CFileException *e){ char *lpMsgBuf; if(FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&lpMsgBuf,0,NULL)>0){ AfxMessageBox(lpMsgBuf); LocalFree(lpMsgBuf); } e->Delete(); return;}Out.Close();//In.Close();CFile::SetStatus(%%1,rStatus);delete[] lpBuffer;},复杂内容来自www.07swz.com请勿采集。

  • 部编人教版语文三年级下册第八单元复习PPT课件(单
  • 部编人教版语文三年级下册第八单元复习PPT课件(单
  • 部编人教版语文二年级下册第四单元复习资料PPT课件
  • 部编人教版语文二年级下册第四单元复习资料PPT课件
  • 中心小学规范汇编文件大全
  • 中心小学规范汇编文件大全
  • 【习作范文】精选小、初、高语文经典例文·汇编:(写
  • 【习作范文】精选小、初、高语文经典例文·汇编:(写
  • 大学物理课件汇编-ch7 567 上课用第二次20
  • 大学物理课件汇编-ch7 567 上课用第二次20
  • 大学物理课件汇编-ch8 1234 上课第一次
  • 大学物理课件汇编-ch8 1234 上课第一次
  • 大学物理课件汇编-ch7 567 上课用第二次20
  • 大学物理课件汇编-ch7 567 上课用第二次20
  • 2019-2020年整理人教版六年级语文上册期中考
  • 2019-2020年整理人教版六年级语文上册期中考
  • 求一汇编语言所写简单数据加密程序(求急,加分)
  • 用汇编语言编写 简易加密解密程序
  • 如何用od反汇编语言给EXE文件加密
  • 求一下用汇编语言编写的对输入的一段文本数据进行简单加密的程序……好的话我追加,求……
  • 怎样破解大智慧的加密文件
  • 怎么给自己写的程序加密啊?
  • 有点没明白 ,麻烦再问你下,能不能在源文件里加密,防止别人反汇编
  • 关于加密的和反汇编的
  • 硬件加密和软件加密哪个更安全,有什么区别?
  • 被加密的光盘如何解密?如图.
  • 加密大作业
  • 汇编大作业
  • 作业文件汇编
  • 技术作业文件汇编
  • 汇编语言期末大作业
  • 最新推荐
    热门推荐