[+]Topic: Tools
[+]By: Perforin
[+]Return: Tools
Fishy is a Xchat2 plugin which crypts the communication in a given
channel with Twofish in CBC mode.
To beginn you have to name the channel and a password that everyone in
this channel knows. You can do this by typing this:
/fishy-config [PASSWORD] [CHANNEL]
If you dont do that, fishy uses by default the channel #fishy with
"fishy" as the password.
--> Download <--
#!/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 ");
}