Alvo

 

Is a tiny DOS stand alone application, with only 30 KBytes size, which encrypt/decrypt any kind of files. It uses a very safe and fast csprng algorithm on stream cipher, and erase files permanently.  Bellow is an explanation how it works. From the left to right, the first column is the list with the filenames, the second is the extension, and the right one is the correspondent file sizes in Bytes. Grey lines are the files not encrypted; white line is the file selected to encrypt; bright red line is the file selected to decrypt. Red lines are files already encrypted by Alvo. This application uses 2^157 key.

 

  C:\DOCUME~1\ADM\OSMEUS~1

 

  00DOCUM   DOC        2,053,842

  01DOCUM   DOC        2,053,842

  06MB70    TXT            3,165

  070209    TXT               28

  090209    TXT               50

  0TMB71    TXT              810

  10N2A1    TXT               24

  12N12A3   TXT              144

  13-01-20  TXT            2,619

  TEST      TXT            1,944

  14N13A3   TXT              156

  15-01-20  TXT            1,458

  150109    TXT              990

  15MB70    TXT            3,555

  15N3A1    TXT               36

  160109    TXT            1,950

  170109    TXT              200

  18N8A2    TXT               96

AASAB     XLS          626,628

 

ALVO 

 

 

 

Up arrow - Move Up one file

Down arrow - Move Down one file

Insert - Show/Hide password

PageUp - Move Up 19 files

PegeDw - Move Down 19 files

Home - Go to first file

End - Go to last file

Any character - Alphabetic selection

Enter - Choose the file

Del - Delete a file permanently

Esc - Backward until exit

 

 

  C:\DOCUME~1\ADM\OSMEUS~1

 

  00DOCUM   DOC        2,053,842

  01DOCUM   DOC        2,053,842

  06MB70    TXT            3,165

  070209    TXT               28

  090209    TXT               50

  0TMB71    TXT              810

  10N2A1    TXT               24

  12N12A3   TXT              144

  13-01-20  TXT            2,619

  TEST      TXT            1,944 ************************

  14N13A3   TXT              156

  15-01-20  TXT            1,458

  150109    TXT              990

  15MB70    TXT            3,555

  15N3A1    TXT               36

  160109    TXT            1,950

  170109    TXT              200

  18N8A2    TXT               96

AASAB     XLS          626,628

 

ALVO 

 

 

 

Select a file using the above keys and press Enter on the bright line, e.g. TEST.TXT. After that you can write your key to encrypt/decrypt the selected file.

 

Write the key, simply by pressing the characters. The key must have 24 characters long. As you write it you will see only (*). To show or hide the password use Insert. After that press Enter and the file will be start to encrypt/decrypt. On the right of the file size, is showed the encrypt/decrypt evolution process.

 

 

 

  C:\DOCUME~1\ADM\OSMEUS~1

 

  00DOCUM   DOC        2,053,842

  01DOCUM   DOC        2,053,842

  06MB70    TXT            3,165

  070209    TXT               28

  090209    TXT               50

  0TMB71    TXT              810

  10N2A1    TXT               24

  12N12A3   TXT              144

  13-01-20  TXT            2,619

  TEST      TXT            1,944 |||||||||||||||||||||||||||||||||||

  14N13A3   TXT              156

  15-01-20  TXT            1,458

  150109    TXT              990

  15MB70    TXT            3,555

  15N3A1    TXT               36

  160109    TXT            1,950

  170109    TXT              200

  18N8A2    TXT               96

AASAB     XLS          626,628

 

ALVO 

 

 

 

After the encrypt process the white line will be changed to bright red, meaning the file was encrypted by Alvo. To decrypt the file, do the same way with the original key. To decrypt a file, choose a red line, and press Enter. Write the original key and press Enter Again. After that, and if the key is correct, the file is decrypted.

 

 

  C:\DOCUME~1\ADM\OSMEUS~1

 

  00DOCUM   DOC        2,053,842

  01DOCUM   DOC        2,053,842

  06MB70    TXT            3,165

  070209    TXT               28

  090209    TXT               50

  0TMB71    TXT              810

  10N2A1    TXT               24

  12N12A3   TXT              144

  13-01-20  TXT            2,619

  TEST      TXT            1,944

  14N13A3   TXT              156

  15-01-20  TXT            1,458

  150109    TXT              990

  15MB70    TXT            3,555

  15N3A1    TXT               36

  160109    TXT            1,950

  170109    TXT              200

  18N8A2    TXT               96

AASAB     XLS          626,628

 

ALVO 

 

 

 

To erase a file, press Del and confirm pressing Del again. This way will be delete the files for ever, with no chances to be restored. If you want not to erase the file press Esc after the first Del.

Warning: The key is case sensitive, and before encrypt a file, memorize it, on contrary, you loose it for ever.

 

 

Download

 

  C:\DOCUME~1\ADM\OSMEUS~1

 

  00DOCUM   DOC        2,053,842

  01DOCUM   DOC        2,053,842

  06MB70    TXT            3,165

  070209    TXT               28

  090209    TXT               50

  0TMB71    TXT              810 Del

  10N2A1    TXT               24

  12N12A3   TXT              144

  13-01-20  TXT            2,619

  TEST      TXT            1,944

  14N13A3   TXT              156

  15-01-20  TXT            1,458

  150109    TXT              990

  15MB70    TXT            3,555

  15N3A1    TXT               36

  160109    TXT            1,950

  170109    TXT              200

  18N8A2    TXT               96

AASAB     XLS          626,628

 

ALVO 

 

Here is the source code in PowerBasic:

 

 

SCREEN 0

CLS

 

COLOR 11,3

FOR i%=1 to 3

LOCATE i%,1:PRINT SPACE$(80);

LOCATE 22+i%,1:PRINT SPACE$(80);

NEXT

LOCATE 2,3:print LEFT$(CURDIR$,78)

LOCATE 24,75:print "ALVO";

 

DEFQUD n ,s

DEFEXT x,c,b

mt%=4000

DIM nomefich$(mt%),w%(mt%),nomefich2$(mt%),size(mt%)

ph%=16384

 

FINDFILES: '-----------------------------------------------------------

pf%=1:pa%=1

LOCATE 24,3,0:PRINT "Reading files...";

COLOR 7,0

 

 

fa$=DIR$ ("*.*")

DO WHILE NOT fa$=""

OPEN fa$ FOR BINARY AS #1

 

IF LOF(1)>7 THEN

INCR mf%

nomefich$(mf%)=fa$

size(mf%)=LOF(1)

pn%=0

 

SEEK #1,LOF(1)-4

GET$ #1,4,ww$

IF ww$="Alvo" THEN w%(mf%)=1:DECR size(mf%),4

 

pn%=INSTR(fa$,".")-1

 

IF pn%>0 THEN

ex$=RIGHT$(fa$,LEN(fa$)-pn%-1)

nm%=3-LEN(ex$)

ex$=ex$+SPACE$(nm%)

END IF

 

IF pn%>0 THEN nomefich2$(mf%)=LEFT$(fa$,pn%)+SPACE$(10-LEN(LEFT$(fa$,pn%)))+ex$ ELSE nomefich2$(mf%)=fa$+SPACE$(13-LEN(fa$))

nomefich2$(mf%)=nomefich2$(mf%)+USING$("#,###,###,###,###",size(mf%))

 

IF mf%<19 THEN lim%=mf%-1 ELSE lim%=18

if mf%<20 THEN COLOR ,0:GOSUB lista

END IF

 

CLOSE #1

fa$=DIR$

LOOP

 

COLOR ,3:LOCATE 24,3,0:PRINT SPACE$(17);

pf%=1:pa%=1

 

NOVO: '--------------------------------------------------------------------

COLOR ,0

IF mf%=0 THEN nofiles

GOSUB LISTA

DO

DO

K$=UCASE$(INKEY$)

LOOP UNTIL K$<>""

IF K$=CHR$(27) THEN CLS:COLOR 15,0:LOCATE ,,0:END

 

COLOR ,3:LOCATE 24,3:PRINT SPACE$(20);:COLOR,0

 

IF LEN(k$)=2 THEN

ky$=RIGHT$(k$,1)

IF Ky$="S" THEN GOSUB DELETA

IF Ky$="H" THEN decr pa%

IF Ky$="P" THEN incr pa%

if pa%>lim%+1 then pa%=lim%+1:incr pf%

if pa%<1 then pa%=1:decr pf%

IF Ky$="G" THEN pf%=1:pa%=1

IF Ky$="O" THEN pf%=mf%-lim%:pa%=lim%+1

IF Ky$="I" THEN DECR pf%,lim%+1

IF Ky$="Q" THEN INCR pf%,lim%+1

IF pf%>mf%-lim%-1 THEN pf%=mf%-lim%

IF pf%<1 THEN pf%=1

'IF ky$="S" THEN NOVO

END IF

 

IF ASC(k$)>13 AND ASC(k$)<123 THEN GOSUB ALFA

GOSUB LISTA

 

IF k$=CHR$(13) THEN

CLOSE #1

OPEN nomefich$(pf%+pa%-1) FOR BINARY AS #1

GOSUB VALOR

GOTO CHAVE

END IF

LOOP

 

CHAVE: '-------------------------------------------------------------------

pc%=0

keyy$=""

keyys$=""

mostra%=-1

CHAV:

COLOR cor1%:LOCATE PA%+3,34,1:PRINT keyys$;

DO

DO

K$=INKEY$

LOOP UNTIL K$<>""

 

IF LEN(K$)=2 THEN

IF RIGHT$(K$,1)="R" THEN mostra%=mostra%*-1

GOTO MOSTRAR

END IF

 

COLOR ,3:LOCATE 24,3:PRINT SPACE$(20);

COLOR ,0:LOCATE PA%+3,34,1:PRINT keyys$;

 

IF K$=CHR$(27) THEN novo

IF K$=CHR$(13) AND pc%<18 THEN

men$="Short key"

IF pc%=0 THEN men$="No key"

LOCATE 24,3,0:COLOR 11,3:PRINT men$;:COLOR ,0:GOTO CHAV

END IF

IF K$=CHR$(13) THEN

c=(CVQ(LEFT$(keyy$,8))+9223372036854775808)/2^64

x=(CVQ(MID$(keyy$,9,8))+9223372036854775808)/2^64

b=(CVQ(RIGHT$(keyy$,8))+9223372036854775808)/2^64

keyy$=SPACE$(24):keyy$=""

GOTO crypta

END IF

 

IF ASC(K$)>31 AND ASC(K$)<127 AND pc%<24 THEN keyy$=keyy$+k$

IF ASC(K$)=8 AND pc%>0 THEN keyy$=LEFT$(keyy$,pc%-1)

 

MOSTRAR:

pc%=LEN(keyy$)

IF mostra%=-1 then keyys$=STRING$(pc%,"*") ELSE keyys$=keyy$

 

LOCATE ,34,1:PRINT keyys$;" ";

LOCATE ,34,1: PRINT keyys$;

LOOP

 

CRYPTA: '--------------------- encripta/decripta -----------------

COLOR cor1%

LOCATE ,34,0

PRINT SPACE$(45);

FOR n=0 TO tf2-1 STEP ph%

LOCATE ,34:PRINT STRING$(INT(n/q),"|");

GET$ #1,ph%,z$

FOR m%=1 to ph% STEP 8

x=.9999*FRAC(x*(x+m%+b)+c)

MID$(z$,m%,8)=MKQ$(CVQ(MID$(z$,m%,8)) XOR INT(x*18446744073709551616-9223372036854775808))

NEXT

ON ERROR RESUME NEXT

SEEK #1,n

PUT$ #1, z$

IF ERR=75 THEN GOSUB ERRO

 

NEXT

 

GET$ #1,f%+1,z$

FOR m%=1 TO f%+1

LOCATE ,34:PRINT STRING$(INT((n+m%)/q),"|");

x=.9999*FRAC(x*(x+m%+b)+c)

MID$(z$,m%,1)=CHR$(ASC(MID$(z$,m%,1)) XOR INT(x*256))

NEXT

SEEK #1,tf2

PUT$ #1,z$

IF w%(pf%+pa%-1)=0 THEN PUT$ #1,"Alvo":w%(pf%+pa%-1)=1:GOTO sai

 

FOR i%=1 TO 4

PUT$ #1,""

NEXT

w%(pf%+pa%-1)=0

SAI:

CLOSE #1

GOTO novo:

 

ALFA: '-----------------------------------------------------------------

FOR ial%=1 TO mf%

IF LEFT$(nomefich$(ial%),1)=k$ THEN

IF ial%<=lim% THEN pf%=1:pa%=ial%:RETURN

IF ial%>lim% THEN pf%=ial%-lim%:pa%=lim%+1:RETURN

END IF

NEXT

RETURN

 

LISTA: ' ----------------------------------------------------------------

FOR i%=0 TO lim%

IF w%(pf%+i%)=1 THEN cor%=4 ELSE cor%=8

IF i%+1=pa% THEN cor%=15:cor1%=15:IF w%(pf%+i%)=1 THEN cor%=12:cor1%=12

LOCATE i%+4,2,0:PRINT SPACE$(78);

COLOR cor%:LOCATE i%+4,3:PRINT nomefich2$(pf%+i%);

NEXT

IF lim%<18 THEN

FOR i%=lim%+5 TO 22

LOCATE i%,2:PRINT SPACE$(50);

NEXT

END IF

RETURN

 

DELETA: ' ----------------------------------------------------------------

IF mf%=0 THEN NOFILES

CLOSE #1

OPEN nomefich$(pf%+pa%-1) FOR BINARY AS #1

GOSUB VALOR

LOCATE ,35:PRINT "Del";

DO

K$=RIGHT$(UCASE$(INKEY$),1)

IF K$="S" THEN EXIT LOOP

IF k$<>"" THEN RETURN

LOOP

 

IF f%>0 THEN

FOR n=0 TO tf2-1 STEP ph%

LOCATE ,35+INT(n/q):PRINT "|";

 

ON ERROR RESUME NEXT

PUT$ #1,SPACE$(ph%)

IF ERR=75 THEN GOSUB ERRO

NEXT

END IF

PUT$ #1,SPACE$(ph%)

CLOSE #1

KILL nomefich$(pf%+pa%-1)

LOCATE ,3:PRINT SPACE$(77);

DECR mf%

IF mf%=0 THEN NOFILES

FOR i%=pf%+pa%-1 TO mf%

nomefich$(i%)=nomefich$(i%+1)

nomefich2$(i%)=nomefich2$(i%+1)

size(i%)=size(i%+1)

w%(i%)=w%(i%+1)

NEXT

IF mf%<lim%+1 THEN DECR lim%

IF pf%+pa%=mf%+2 THEN DECR pf%

RETURN novo

 

VALOR: '-------------------------------------------------------------------

LOCATE pa%+3,,0

COLOR cor1%

nfl=size(pf%+pa%-1)

tf=nfl-1

tf2=INT(tf/ph%)*ph%

f%=tf-tf2

q=tf/45

RETURN

 

NOFILES: '---------------------------------------------------------------

COLOR ,3

LOCATE 24,2,0:PRINT " No files. Esc to exit";

DO

K$=INKEY$

LOOP UNTIL K$=CHR$(27)

COLOR 15,0

CLS

END

 

ERRO:

IF ERR=75 THEN

men$="File already open"

LOCATE 24,3,0:COLOR 11,3:PRINT men$;:COLOR ,0:GOTO novo

END IF

RETURN

 

 

October 2009 - Ribeiro Alvo