#! /usr/bin/perl # Amnesia v1.0 # Testato su FreeBSD 4.5 e Linux Red Hat 8.0 # coded by cers # - cers labs software - www.cers.tk - admin@cers.tk menu: print "\n -- Amnesia v1.0 -- 1) Crypta file 2) Decrypta file 3) Crypta directory 4) Decrypta directory 6) Esci Scelta: "; $scelta = <STDIN>; if ($scelta == 1) { goto crypta; } if ($scelta == 2) { goto decrypta; } if ($scelta == 3) { goto crypta_dir; } if ($scelta == 4) { goto decrypta_dir; } if ($scelta == 6) { exit; } system(clear); goto menu; # Acquisizione ed elaborazione delle password sub genera_key { crypta_pass1: print "\nInserisci la password n.1: "; system('stty -echo'); $pass1 = <STDIN>; chop $pass1; print "\n-Ridigita la password n.1: "; $controllo_pass1 = <STDIN>; chop $controllo_pass1; if ($pass1 ne $controllo_pass1) { print "\nLa password digitata e' diversa dalla precedente.\n"; goto crypta_pass1; } crypta_pass2: print "\n\nInserisci la password n.2: "; $pass2 = <STDIN>; chop $pass2; print "\n-Ridigita la password n.2: "; $controllo_pass2 = <STDIN>; chop $controllo_pass2; if ($pass2 ne $controllo_pass2) { print "\nLa password digitata e' diversa dalla precedente."; goto crypta_pass2; } crypta_pass3: print "\n\nInserisci la password n.3: "; $pass3 = <STDIN>; chop $pass3; print "\n-Ridigita la password n.3: "; $controllo_pass3 = <STDIN>; chop $controllo_pass3; if ($pass3 ne $controllo_pass3) { print "\nLa password digitata e' diversa dalla precedente."; goto crypta_pass3; } system('stty echo'); # password -> 13 bits # Personalizzabile per aumentare il livello di sicurezza $salto = 'cers'; # Il tool utilizzato per il decrypt deve avere lo stesso identico salto del # tool utilizzato per il crypt. $passcrypt[1] = crypt($pass1,$salto); $passcrypt[2] = crypt($pass2,$salto); $passcrypt[3] = crypt($pass3,$salto); ## password 13 bits -> 3 key numeriche 39 bits ## @passcry = split ("",$passcrypt[1]); @passcry2 = split ("",$passcrypt[2]); @passcry3 = split ("",$passcrypt[3]); $passcrypt2[1] = $passcry[0]; $passcrypt2[1] .= $passcry2[12]; $passcrypt2[1] .= $passcry3[0]; $passcrypt2[1] .= $passcry[1]; $passcrypt2[1] .= $passcry2[11]; $passcrypt2[1] .= $passcry3[1]; $passcrypt2[1] .= $passcry[2]; $passcrypt2[1] .= $passcry2[10]; $passcrypt2[1] .= $passcry3[2]; $passcrypt2[1] .= $passcry[3]; $passcrypt2[1] .= $passcry2[9]; $passcrypt2[1] .= $passcry3[3]; $passcrypt2[1] .= $passcry[4]; $passcrypt2[2] = $passcry2[8]; $passcrypt2[2] .= $passcry3[4]; $passcrypt2[2] .= $passcry[5]; $passcrypt2[2] .= $passcry2[7]; $passcrypt2[2] .= $passcry3[5]; $passcrypt2[2] .= $passcry[6]; $passcrypt2[2] .= $passcry2[6]; $passcrypt2[2] .= $passcry3[6]; $passcrypt2[2] .= $passcry[7]; $passcrypt2[2] .= $passcry2[5]; $passcrypt2[2] .= $passcry3[7]; $passcrypt2[2] .= $passcry[8]; $passcrypt2[2] .= $passcry2[4]; $passcrypt2[3] = $passcry3[8]; $passcrypt2[3] .= $passcry[9]; $passcrypt2[3] .= $passcry2[3]; $passcrypt2[3] .= $passcry3[9]; $passcrypt2[3] .= $passcry[10]; $passcrypt2[3] .= $passcry2[2]; $passcrypt2[3] .= $passcry3[10]; $passcrypt2[3] .= $passcry[11]; $passcrypt2[3] .= $passcry2[1]; $passcrypt2[3] .= $passcry3[11]; $passcrypt2[3] .= $passcry[12]; $passcrypt2[3] .= $passcry2[0]; $passcrypt2[3] .= $passcry3[12]; $numero_pass = 1; while ( $numero_pass < 4 ) { @Apass1 = split("","$passcrypt2[$numero_pass]"); $n = 0; while ($n < 13) { # standard 3 bits $temp1 = ord $Apass1[$n]; if (length($temp1) < 3) { $temp1 = "0"."$temp1"; } # $elabpass[$numero_pass] .= $temp1; $n += 1; } $numero_pass += 1; } # 3 key numeriche 39 bits > 6 key numeriche 117 bits $key1 = "$elabpass[1]"."$elabpass[2]"."$elabpass[3]"; $key2 = "$elabpass[1]"."$elabpass[3]"."$elabpass[2]"; $key3 = "$elabpass[2]"."$elabpass[1]"."$elabpass[3]"; $key4 = "$elabpass[2]"."$elabpass[3]"."$elabpass[1]"; $key5 = "$elabpass[3]"."$elabpass[1]"."$elabpass[2]"; $key6 = "$elabpass[3]"."$elabpass[2]"."$elabpass[1]"; # key finale numerica a 702 bits $key0 = "$key1"."$key2"."$key3"."$key4"."$key5"."$key6"; # Frammentazione in blocchi cifratura da 3 bits @key0 = split("",$key0); $numero_shift = 0; while ( $numero_shift < 234 ) { $blocco[$numero_shift] = shift @key0; $blocco[$numero_shift] .= shift @key0; $blocco[$numero_shift] .= shift @key0; $numero_shift += 1; } } # CRYPTA crypta: print "\n\nInserisci nome file da cryptare: "; $file = <STDIN>; print "\nInserisci nome file output: "; $file_ris = <STDIN>; genera_key; sub crypta { open (LEGGO,"<$file"); open (SCRIVO,">$file_ris"); while (!eof(LEGGO)) { $riga = <LEGGO>; @dati = split ("",$riga); $numero_caratteri = 0; $numero_shift = 0; $numero_unshift = 0; while ( $numero_caratteri < @dati ) { $converti = $dati[$numero_caratteri]; $convertito = ord $converti; if ($convertito < 3) { $convertito = "0"."$convertito"; } $cifratura1 = shift @blocco; $cifratura2 = shift @blocco; push @blocco,$cifratura1; push @blocco,$cifratura2; $convertito2 = "$cifratura1" + "$convertito"; $cryptato = log($cifratura2)^$convertito2; $offuscato = chr($cryptato); syswrite SCRIVO,$offuscato; $numero_caratteri += 1; } } } crypta; print "\nOperazione terminata\n"; sleep 2; system(clear); goto menu; decrypta: print "\n\nInserisci il nome file da decryptare: "; $file_crypt = <STDIN>; print "\nInserisci il nome file output: "; $file_ris = <STDIN>; genera_key; sub decrypta { open (LEGGO,"<$file_crypt"); open (SCRIVO,">$file_ris"); while (!eof(LEGGO)) { $riga = <LEGGO>; @dati = split ("",$riga); $numero_caratteri = 0; while ($numero_caratteri < @dati) { $converti = $dati[$numero_caratteri]; $convertito = ord $converti; if ($convertito < 3) { $convertito = "0"."$convertito"; } $cifratura2 = shift @blocco; $cifratura1 = shift @blocco; push @blocco,$cifratura2; push @blocco,$cifratura1; $convertito2 = log($cifratura1)^$convertito; $decryptato = "$convertito2" - "$cifratura2"; $chiaro = chr($decryptato); syswrite SCRIVO,$chiaro; $numero_caratteri += 1; } } } decrypta; print "\n\nOperazione terminata\n"; sleep 2; system(clear); goto menu; crypta_dir: print "\n\nInserisci il nome della directory: "; $directory = <STDIN>; print "\nInserisci il nome del file output: "; $file_ris = <STDIN>; genera_key; $cmd = "tar -cf crstempxxx.tar $directory"; system($cmd); $file = 'crstempxxx.tar'; crypta; $cmd3 = "rm -f crstempxxx.tar"; system($cmd3); print "\n\nOperazione terminata con successo\n"; sleep 2; system(clear); goto menu; decrypta_dir: print "\n\nInserisci il nome della dir cryptata: "; $file_crypt = <STDIN>; genera_key; $file_ris = 'crstempxxxx.tar'; decrypta; $cmd1 = "tar -xf crstempxxxx.tar"; system($cmd1); $cmd3 = "rm -f crstempxxxx.tar"; system($cmd3); print "\nOperazione terminata\n"; sleep 2; system(clear); goto menu;