DOS Windows汇编语言程序设计教程_课件 第四章.pptVIP

DOS Windows汇编语言程序设计教程_课件 第四章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DOS Windows汇编语言程序设计教程_课件 第四章

(4) 因为在MOV DX,136H 指令设字符串从136H开始,故用F命令从该处开始添加字符串。也可以用命令E逐个添加字符。 (5) 写入的长度由寄存器CX决定,程序被修改后变长了,要修改到新的值。计算从100H到字符串的最后程序占用50H字节,用命令R CX修改要写入的字节数。 (6) 使用W指令保存。W命令后可以带明确的写入开始地址,也可以不带。装入时,开始位置为100H,所以此处的缺省开始位置为100H。 * * 4.9 加密一个EXE文件 我们用简单的方法加密,对字符串和显示字符串的代码分别进行异或,让静态反汇编者看不到直接的字符串和代码。但是程序运行时必须先将字符串和代码再异或一次,以恢复本来的状态。 * 加密方法的实现 ;文件名:Crypto.asm .MODEL SMALL .DATA STRING DB I AM A STUDENT!,0DH,0AH,$ LEN EQU $-STRING ;LEN 为字符串长度 .CODE .STARTUP ;与78H异或,解密字符串 MOV BX, OFFSET STRING MOV CX,LEN AGAIN1: XOR BYTE PTR[BX],78H INC BX LOOP AGAIN1 * ;与78H异或,解密显示字符串的代码 MOV BX,ADDR1 MOV CX,ADDR2-ADDR1 AGAIN2: XOR BYTE PTR[BX],78H INC BX LOOP AGAIN2 ADDR1 EQU $ ;ADDR1等于当前的偏移地址 MOV DX, OFFSET STRING MOV AH,9 INT 21H ADDR2 EQU $ ;ADDR2等于当前的偏移地址 .EXIT 0 END * 加密EXE文件中的代码与字符串 生成Crypto.exe后反汇编,首先要找到字符串和显示字符串代码在文件中的位置,记下相应的16进制串 WinHex是一款二进制编辑工具。运行WinHex.exe,查找对应的16进制代码,找到在文件偏移中对应的位置 选中要异或的数据部分,运行菜单“编辑”?“数据修改”,在异或的值中添入78H,选择确定,即所有选中字节与78H进行了异或,保存该文件即可 * 读磁盘扇区数据到内存缓冲区 AH = 2 ; AL = 要读的扇区数; CH = 柱面号(低8位); CL = 扇区号(0-5位);6-7位为柱面号; DH = 磁头号; DL = 驱动器号,软盘A,B为0,1,对第一块硬盘80H,第二块81H,……; ES:BX = 数据缓冲区的地址。 输出信息: CF=0,操作成功,AH=0 ,AL=读出的扇区数; CF=1,操作失败,AH=出错状态,同前。 * 内存缓冲区内容写入磁盘 输入信息:同读盘; 输出信息:同读盘。 检验指定扇区 输入信息:不要求ES:BX,其它同读盘; 输出信息:同读盘。 格式化磁盘 输入信息:ES:BX=格式化参数首址,其它同读盘; 输出信息:同读盘。 * 设计一个简单钥匙软盘程序 设计程序key.exe,在它运行时只有软驱上插有钥匙盘才能正确运行,否则提示错误信息。其原理是在软盘上设置一个特殊的信息,如特殊的扇区、坏扇区等办法。我们这里是利用引导扇区的空域设置密码,程序key.exe执行时会读该密码,正确则顺利执行,否则出错。 * 观察软盘引导扇区 * 程序将软盘的0面0磁道1扇区(面和道从0开始排,扇区从1开始排,这里是引导扇区)。可见,在4000:4020处有几个字节为0,我们用这段空间来存放密码。设密码为字符串“12345”,用命令E修改内存数据,用D4000:4000再验证修改结果。 * * 命令W行表示将内存4000:4000开始的数据写入0驱(A:)的第0个逻辑扇区(引导扇区)开始共1个扇区。当然也可以编一段程序写入。 为查看修改引导扇区内容后软盘能否正常工作,可以尝试磁盘文件操作,若无误则可以。 * 编写识别程序 .MODEL SMALL,C CMPCODE PROTO ;声明比较字符串的子程序 .DATA SEC_CODE DB 12345,0 COUNT EQU $-OFFSET SEC_CODE-1 ;取密码字符串的长度 ;$表示当前偏移地址 SECTOR DB 512 DUP(0) INF1 DB 读软盘失败,0DH,0AH,$ INF2 DB 请插入钥匙盘,0DH,0AH,$ INF3 DB 密码正确,谢谢使用,0DH,0AH,$‘ .CODE .STARTU

文档评论(0)

beoes + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档