#!/usr/bin/perl =fishy Fishy ist ein Plugin für Xchat2 welches die Kommunikation in einem Channel mit Twofish + base64 verschlüsselt. Dabei wird Twofish im CBC Modus genutzt. Da Twofish nicht mit Zertifikaten funktioniert, muss jeder in dem gewollten Channel das _SELBE_ Passwort kennen! Am besten überbringt ihr den Personen das Passwort ganz privat. Sollte das nicht gehen solltet ihr entweder einen abgesichtern Chat (Jabber mit SSL und OTR) zum überbringen des Passwortes nutzen oder eine PGP/GPG verschlüsselte Mail verwenden. Beim ersten start des Plugins werdet ihr aufgefordert ein Passwort sowie einen Channel anzugeben. Solltet ihr das nicht machen, wird einfach "fishy" als Passwort und #fishy als Channel genommen. Also bitte ändert diese Einstellungen mit dem befehl /fishy-config [PASSWORT] [CHANNEL] Achtung, ihr dürft nicht bereits in dem Channel sein! Denn es wird alles verschlüsselt! Auch dieser String. Deshalb solltet ihr die config in einem anderen Channel oder im Serverreiter vornehmen. FAQ: 1) Werden auch Dateien welche via DCC verschickt werden verschlüsselt? Nein 2) Werden Querys verschlüsselt? Nein. 3) Was wird verschlüsselt?! Ein angegebener Channel (#fishy by default) auf allen Servern! Zum Beispiel seid ihr auf seilen.de unterwegs sowie Freenode, dann wird die Kommunikation in diesem Channel auf beiden Servern verschlüsselt. 4) Warum noch die Base64 kodierung? Manche IRCd's haben Probleme wenn man pures Twofish versendet. Deshalb dieser kleine Umweg. 5) Warum nicht AES?!!!1111 elf elf Ich vertraue AES nicht. Ausserdem hat AES nicht gewonnen weils schwerer zu knacken ist... Man hört auch nie was gutes von AES. Deshalb Twofish FTW! 6) Wie lang muss das Passwort sein? Ich empfehle minumum 20 Stellen. Denn ein Kryptoalgo ist immer nur so stark wie das benutzte Passwort. Wer 123 als PW nimmt, dem hilft die Verschlüsselung auch nicht mehr. 7) Kann ich ein anderes Passwort nehmen als die anderen Leute im Chan? Nein. Denn dann klappt die Entschlüsselung nicht mehr und es regnet Fehler und man kriegt nichts gelesen. Man muss das selbe Passwort haben! 8) Was bedeutet dieser Fehler "Error in print callback Ciphertext does not begin with a valid header for 'salt' header mode"?! Das bedeuted, dass jemand in diesem Channel eine unverschlüsselte Nachricht verschickt hat. Am besten den Typen bannen. Hat bestimmt eh nichts da verloren ;) 9) Ich bekomme nur Kauderwelsch zu Gesicht! Dann hat jemand im Channel das falsche Passwort! 10) Wo oder wie kann man dich kontaktieren? Per mail: unix.virii@gmail.com - bitte PGP benutzen Per XMPP: virii@adamas.ai - bitte OTR benutzen Installation: Perl: sudo apt-get install perl XML::Simple: sudo cpan --> install XML::Simple Crypt::CBC: sudo cpan --> install Crypt::CBC Dann diese Datei als fishy.pl abspeichern. Danach öffnet ihr Xchat und geht auf den Reiter "Window". Dann klickt ihr auf "Plugins and Scripts...". Dort dann den Load Button anklicken und dann einfach dieses Plugin auswählen. Fertig. Greetz: "When cryptography is outlawed only outlaws will have privacy" [*] crypto.is [*] eof-project [*] vx heavens [*] The Xchat2 guys ;) [*] everybody from #virus and #vxnet [*] The dudes from rebirth.sh [*] the hole scene <3 Coded by virii [vxnetw0rk] - adamas.ai - Veritas vos liberabit! =cut use strict; use Crypt::CBC; use MIME::Base64; use XML::Simple; my ($version,$xchatdir,$yournick,$currentchannel,$fishy,$pass,$channel); my ($cipher,$input,$ciphertext,$base64_cipher,$msg,$partner,$plaintext); my ($base64_decode,$newpass,$newchannel); $version = '0.2'; Xchat::register("fishy", $version, "Twofish Plugin by virii [vxnetw0rk]"); $xchatdir = Xchat::get_info('xchatdir'); $yournick = Xchat::get_info('nick'); $currentchannel = Xchat::get_info('channel'); configure() unless -e "$xchatdir/fishy.xml"; $fishy = XMLin("$xchatdir/fishy.xml"); ($pass,$channel) = ($fishy->{pass},$fishy->{chan}); Xchat::print ("Fishy v$version loaded - Twofish encryption now active for $channel"); ######################################################################## ## MAGIC - begins here ;) ######################################################################## $cipher = Crypt::CBC->new( -key => $pass, -cipher => 'Twofish'); Xchat::hook_print('Key Press',\&crypt); Xchat::hook_print('Your Message',\&hideme); Xchat::hook_print('Channel Message',\&decrypt); Xchat::hook_command('fishy-config', \&createconfig); ######################################################################## ## ENCRYPTION ######################################################################## sub crypt { $currentchannel = Xchat::get_info('channel'); if ($currentchannel eq $channel) { $input = Xchat::get_info('inputbox'); if (($_[0][0] == 65293) || ($_[0][0] == 65421)) { $ciphertext = $cipher->encrypt($input); $base64_cipher = encode_base64 $ciphertext; chomp($base64_cipher); Xchat::emit_print ('Channel Message', $yournick, $input); Xchat::command("say $base64_cipher"); Xchat::command("settext "); return Xchat::EAT_ALL; } else { return Xchat::EAT_NONE; } return Xchat::EAT_ALL; } } ######################################################################## ## DECRYPTION ######################################################################## sub decrypt { ($msg,$partner) = ($_[0][1],$_[0][0]); $currentchannel = Xchat::get_info('channel'); if ($partner ne $yournick) { if ($currentchannel eq $channel) { Xchat::print("Nachricht nicht verschlüsselt oder falsches Passwort!") if eval($base64_decode = decode_base64 $msg); Xchat::print("Nachricht nicht verschlüsselt oder falsches Passwort!") if eval($plaintext = $cipher->decrypt($base64_decode)); Xchat::emit_print('Channel Message', $partner, $plaintext); return Xchat::EAT_ALL; } } } ######################################################################## ## HACK AROUND - Hides the actual encrypted string ######################################################################## sub hideme { $currentchannel = Xchat::get_info('channel'); return Xchat::EAT_XCHAT if $currentchannel eq $channel; } ######################################################################## ## HELP ######################################################################## sub configure { Xchat::print("Fishy v$version: Bitte ein neues Passwort für die Verschlüsselung eingeben. \/fishy-config [PASSWORT] [CHANNEL]"); open skonfiguration, '>', "$xchatdir/fishy.xml" || Xchat::print("Cannot write to directory!"); print skonfiguration <<"XML"; fishy #fishy XML close skonfiguration; } ######################################################################## ## CONFIG ######################################################################## sub createconfig { ($newpass,$newchannel) = ($_[0][1],$_[0][2]); open konfiguration, '>', "$xchatdir/fishy.xml" || Xchat::print("Cannot write to directory!"); print konfiguration <<"XML"; $newpass $newchannel XML close konfiguration; $fishy = XMLin("$xchatdir/fishy.xml"); ($pass,$channel) = ($fishy->{pass},$fishy->{chan}); Xchat::print("Konfiguration war erfolgreich!"); Xchat::print ("Fishy v$version loaded - Twofish encryption now active for $channel"); Xchat::command ("settext "); }