用汇编语言编写 简易加密解密程序
发布网友
发布时间:2022-04-24 22:47
我来回答
共3个回答
热心网友
时间:2023-10-13 22:20
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output 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 ;清进位标志
ret
Open_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
ret
Encode_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
ret
Uncode_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,cx
Loca_Seek1: mov bx,Handle_File[4] ;读取解密后的文本文件代号
mov ax,4200h ;移动文件指针至文件头
int 21h
jc Loca_Seek1
Loca_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_File1
Close_File1:mov bx,Handle_File ;读取未加密的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File1
Close_File2:mov bx,Handle_File[2] ;读取加密后的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File2
Close_File3:mov bx,Handle_File[4] ;读取解密后的文本文件代号
mov ah,3eh ;关闭文件
int 21h
jc Close_File3
Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
ALIGN 10h ;节对齐
Buffer db 255 ;文本内容处理缓冲区
Code ENDS
END Start ;编译到此结束
热心网友
时间:2023-10-13 22:21
win32的还是控制台的??
热心网友
时间:2023-10-13 22:21
不干,啦啦啦啦,要么在这回答,才不到你QQ邮箱里去
汇编语言写个凯撒密码加密和解密的!
著名的凯撒加密算法就是一种简单的替代加密法,它是将明文中每一个字符用右移3位并以26个字符为模的替代(A由D替代,B由E替代,··…—,W由Z替代,X由A替代,Y由B替代,Z由C替代)。所以你的汇编很简单呀,按1的时候,你用一个寄存器指向明文,然后对寄存器指向的数据做加3,然后mod26的处理...
汇编语言编程:数字加密,数字字符0~9,分别对应小写字母a~g
‘a'的ASCII码是61h 两者差了31h 因此,加密时数字字符加31h,就变成了对应的小写字母字符。解密时小写字母减去31h就成了数字字符。例如:mov al,'1'add al,31h
学解密是否一定要学汇编语言?
我还是建议学学汇编,对解密有很大帮助,不论是动态分析还是静态反汇编,都需要汇编的知识,一点不懂是很麻烦的。
加密解密全攻略目录
第1章深入理解加密解密 1.1 详解加密解密技术基础,包括基本概念和原理。1.2 探索相关术语,掌握常见的汇编语言操作指令。1.3 讨论软件解密策略,以及注册保护机制的解析。1.4 遇到问题时的解决策略与经验分享。1.5 总结关键要点,为后续学习打下基础。第2章代码分析技术详解 2.1 介绍代码分析的基础...
如何用易语言做个EXE文件的加密解密程序 我需要全部的源代码 谢谢 可 ...
你好!如果已经生成了EXE,并且源代码不是自己写的,那么,是无法查看它的源代码的。顶多只能对其进行反汇编,看到的是晦涩难懂的汇编语言。打字不易,采纳哦!
DEC汇编语言
DEC汇编语言中的指令主要用于执行算术减一操作,包括对累加器(A)、寄存器(Rn)、直接地址、和间接RAM的操作。以下是不同类型的DEC指令及其说明:DEC A: 累加器减一,指令长度1字节,周期1个。DEC Rn: 寄存器减一,同样1字节,周期1个。DEC direct: 直接地址减一,需要2字节指令,周期2个。DEC @Ri...
有没有aes的教程,加密解密的
pdf AES算法的识别、跟巧及Crackme实例分析 1 AES算法的判断识别 AES中有自S盒与逆S盒,可以将此作为判别标志,比如:S盒开头为:637C777BF26B6FC53001672BFEDB76CA82C97DFA5947F0...解密过程使用的盒开头为:52096AD53036A538BF40A39E81F3D7FB7CE339829B2FFF87 ...
汇编语言现在应用有哪些
软件破解,加密解密,代码速度优化,底层开发(例如DSP,BIOS,EC,嵌入式开发)等。汇编的优势:代码占用空间小,速度快,代码可硬件定位(上电开机代码都必须用汇编写),对于特定CPU优化好,可以直接使用CPU特性(直接操作IO,memory,MSR寄存器等)。
如何评价《加密与解密》
建议先放一边,等看完王爽那本书之后再决定是否学习这本。此外,你要学汇编解密的话,个人推荐看下《天书夜读:从汇编语言到Windows内核编程》这本书。个人建议的学习顺序是:王爽的《汇编语言》→《天书夜读》→《加密与解密》(与罗云彬那本书同时学习)。
汇编强大吗?
相当强大,运行效率非常高 就拿我熟悉的嵌入式linux 里面的bootloader 开始阶段就是靠汇编来引导起来 单片机的程序很多也是用汇编来写的哦 在高级语言编程里面也会经常看到内嵌汇编的语句 所以汇编很好 很强大 楼主就不好意思给点分以示鼓励嘛,呵呵 开玩笑而已哦 good luck ...