引用 | 编辑
upside
2006-12-09 18:19 |
楼主
|
||
x0
最完整的 DOS 6.22 磁区备份程式;Origin:............本..程..式..开..始......................; ;┌───────────────────────────┐; ;│格式宣告区--------------------------------------------│; ;└───────────────────────────┘; TITLE Sky Wing System Universal Utility Tool Box ;标题,天翼系统万用多用途工具箱 字元长度限 60 字 ; INCLUDE PASSWORD.H ; 引入密码标头档 Password.H ; INCLUDELIB PASSWORD.LIB ; 指定与密码程式库 Password.LIB 连结 ; INCLUDELIB MUSIC.LIB ; 指定与音乐程式库 Music.LIB 连结 INCLUDE WINDOWS.H ; 引入视窗标头档 Windows.H INCLUDELIB WINDOWS.LIB ; 指定与视窗程式库 Windows.LIB 连结 INCLUDE BIOS.INC ; 引入 BIOS.INC 公用巨集定义模组 INCLUDE DOS.INC ; 引入 DOS.INC 公用巨集定义模组 INCLUDE DOS.MAC ; 引入 DOS.H 公用巨集定义模组 .MODEL SMALL ;宣告一个小型模组 定义记忆体模式 ; .286 ; .STACK 100h ; ;─> ───────────────────────────────────── .DATA ; 资料节段 ;─> ───────────────────────────────────── MyPSP DW ? ; 本程式执行时的 PSP 节段值 VirFile_C DB 7,7,0Ah,0Dh,' 请注意!! 你的档案可能遭到病毒修改 !!',0Ah,0Dh,'$' VirFile_E DB 7,7,0Ah,0Dh,' Warring!! SKY.EXE maybe encounter Virus modifyed',0Ah,0Dh,'$' Not_Parameter DB 7,0Ah,0Dh,' Warring!! SKY.EXE Not_Parameter$' ; 没有参数 ;─────────────────────────────────────── Buffer DB 512 DUP (0) ;缓冲区起始偏移址 Buffer1 DB 512 DUP (0) ;缓冲区起始偏移址 Buffer2 DW 0 ; DW 5 DUP (?) ; PATH_1 DW ? ; HANDLE DW ? ;存放档案代号 DW 0 , DB 0 Part_sav DB 'Partit.PAT',0 ; 档名 Boot_Sav DB 'BOOT.BOT',0 ; 档名 Par_Msg DB 11,'姹迋迋迋迋迋迋迋迋迋迋迋迋迋迋? DB 0FFh,11,'? Partition table Check V1.00 ',11,'? DB 0FFh,11,'? Copyright (C) By:upside. ',11,'? DB 0FFh,11,'迋迋迋迋迋迋迋迋迋迋迋迋迋迋?' Boot_Msg DB 11,'姹迋迋迋迋迋迋迋迋迋迋迋迋迋迋? DB 0FFh,11,'? Boot area table Check V1.00 ',11,'? DB 0FFh,11,'? Copyright (C) By: upside. ',11,'? DB 0FFh,11,'迋迋迋迋迋迋迋迋迋迋迋迋迋迋?' Chk_Err DB 7,0Ah,0Dh,'WARNING !! Your System Table had been modifyed$' Chk_Ok DB 7,0Ah,0Dh,' System Table Check Ok !!$' Reput_OK DB 7,0Ah,0Dh,' System Table Reput Ok !!$' ;─────────────────────────────────────── FileName_1 DB 'SKY.EXE',0 ; 档案名称 ;─────────────────────────────────────── Import_Password DB 7,0Ah,0Dh,'请输入密码:$' ; 输入密码 Import_err DB 7,10,13,'你输入错误的密码!!$' ; 错误的密码 Password DB ' ; 内建密码 ;─────────────────────────────────────── Wnd01_Data DB '╔═════════════════╗' ;视窗资料内容 DB '║ 天 翼 工 作 室 ║' DB '╠════════╤════════╣' DB '║A 硬碟分割表备份│F 启动磁区表备份║' ;功能表选项内容 DB '║B 硬碟分割表回存│G 启动磁区表回存║' DB '║C │H ║' DB '║D │I ║' DB '║E │J 全能系统加速 ║' DB '╠════════╧════════╣' DB '║制作者: upside <02/17/1999>║' DB '╟─────────────────╢' DB '║ < 敬 请 尊 重 智 慧 财 产 权 > ║' DB '║ ║' DB '╚═════════════════╝' Wnd01 Window <Wnd01_Data,20,06,38,14,3Fh,SHADOW_ON,19h> ;视窗结构体变数 ; 视窗资料内容 X Y 宽 高 属 阴影状态 阴影属性 Menu01 Menu <22,09,02,05,10,16,01,02,00,4fh,3Fh,00,01,01,00,00,POPUP> ; 行 个 选 选 起 ; 行 始 Task_table Label Word DW SavePart,SaveBoot,RePart_1,ReBoot_1,NullTask ; 1 A 6 F 2 B 7 G 3 C DW NullTask,NullTask,NullTask,NullTask,Quicken ; 8 H 4 D 9 I 5 E 10 J ; 音乐 DW NullTask,_play_music,NullTask,NullTask,NullTask ;─────────────────────────────────────── SavePart_OK DB ' < 硬 碟 分 割 表 备 份 成 功 > ' SavePart_WIN Window <SavePart_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ; 显 行 ;─────────────────────────────────────── REPART_OK DB ' < 硬 碟 分 割 表 回 存 成 功 > ' REPART_WIN Window <REPART_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ;─────────────────────────────────────── SaveBoot_OK DB ' < 启 动 磁 区 表 备 份 成 功 > ' SaveBoot_WIN Window <SaveBoot_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ;─────────────────────────────────────── ReBoot_OK DB ' < 启 动 磁 区 表 回 存 成 功 > ' ReBoot_WIN Window <ReBoot_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ;─────────────────────────────────────── Quicken_OK DB ' < 系 统 加 速 程 式 成 功 > ' Quicken_WIN Window <Quicken_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ;─────────────────────────────────────── Joking_OK DB ' < 敬 请 尊 重 智 慧 财 产 权 > ' Joking_WIN Window <Joking_OK,22,17,34,01,0DFh,SHADOW_Off,NULL> ;─────────────────────────────────────── Screen DD 00000h ; 萤幕 ;─────────────────────────────────────── MSG DB 'Made By SY BF ' ; 秀出作者ID Save DB 30 DUP (0) ; 存放字型码,因为可重覆使用 所以只要 30 byte ET_FILE DB 'C:\ET3\STDFONT.15',00h ; 倚天 16*15 字型档 NO_Chinese_C DB 0h,0h,'本程式需倚天中文系统' ; End_Chinese DB 0h,0h,'天翼工作室感谢您' ; 里面的中文在程式中乃是以Big-5码的型式存放 ;─> ───────────────────────────────────── .CODE ; 程式节段 .STARTUP ; 程式初始化 ;─> ───────────────────────────────────── ;┌───────────────────────────┐; ;│防止DEBUG的单步追踪功能-------------------------------│; ;└───────────────────────────┘; ; ; 玩过组合的人都知道电脑有个旗标 ,俗称 TF 旗标 ,将此旗标关掉 ,就不会有 ; 单步执行的功能了。 ; 因为当此位元为 1 时 ,电脑每执行一个指令都会触动 INT_01 ,而 DEBUG 就 ; 是利用它来达到单步执行 ,在 BIOS 内无法下中断点(INT_03) ,所以在要侦错 ; BIOS 下只能靠 TF 来追踪程式执行过程了。 ; ; 如何关闭此旗标呢 ? ; 我们知道旗标有 16Bit , Bit8 即为TF旗标 : ; PUSHF ; ┐将旗标状态传回到 AX 内 ; POP AX ; ┘ ; AND AX,0FEFFh ; ─ 清掉 TF 旗标 ; PUSH AX ; ┐将新旗标写回 ; POPF ; ┘ ; ; INT 1h ; 中断 1h 防 DEBUG 单步追踪 ; INT 3h ; ; INT 7h ; 中断 7H 防 S-ICE 单步追踪 ; 最后甚至当掉使用者的键盘 ,将键盘指向自己的程式 ,或是关掉键盘 , ; 有的程式设计师为了省功 ,都用最简单的方法当掉键盘。 ; ; Then I'm re-assembling with INT 3h squeezed in there: ; ; MOV AX,5Ah ; sample code to break into ; DB 0CCh ; or INT 3h, whatever. ; OUT 82551pa,AL ; ; And this would be the INT 3h handler (simple crude sample) : ;─────────────────────────────────────── ; MOV AH,2Ah ; 取得系统时间 (CX=年 1980~2099 , DH=月, DL=日) ; MOV DX,0520h ; ; INT 21h ; DOS功能中断 ; ; CMP DX,0520h ; 比较是否为10月10日 ; JE ChkPart ; 是...... 不是,跳至下一行程式码执行.... ;┌───────────────────────────┐; ;│档案长度侦测------------------------------------------│; ;└───────────────────────────┘; MOV AH,3Dh ; 开档AX > AH 2bytes MOV DX,OFFSET FileName_1 ; FileName_1 SKY.EXE INT 21h ; ; XCHG AX,BX ; MOV BX,AX MOV AX,4202h ; 移动档案的写指标 XOR CX,CX ; 位移的低位元组 CWD ; 位移的高位元组 INT 21h ; ;─> $$$─────────────────────────────────── CMP AX,1E55h ; 测试本 .. 访客只能看到部份内容,免费 加入会员 x0
|