|
#!/usr/bin/env ruby |
|
|
|
require 'socket' |
|
require 'openssl' |
|
require "base64" |
|
|
|
server = "some-irc.tld" |
|
port = "6667" |
|
nick = "Nickname#{rand(5000)}" |
|
channel = "#channel" |
|
|
|
module Crypt |
|
def Crypt.ccc(m,k,t,o) |
|
(ccc = OpenSSL::Cipher::Cipher.new(o).send(m)).key = Digest::SHA256.digest(k) |
|
ccc.update(t) << ccc.final |
|
end |
|
|
|
def Crypt.encrypt(mode, key, text) |
|
Crypt.ccc(:encrypt, key, text, mode) |
|
end |
|
|
|
def Crypt.decrypt(mode, key, text) |
|
Crypt.ccc(:decrypt, key, text, mode) |
|
end |
|
end |
|
|
|
modules = ['aes-128-cbc','aes-128-ecb','aes-192-cbc','aes-192-ecb','aes-256-cbc','aes-256-ecb','bf','bf-cbc','bf-cfb','bf-ecb','bf-ofb','camellia-128-cbc','camellia-128-ecb','camellia-192-cbc','camellia-192-ecb','camellia-256-cbc','camellia-256-ecb','cast','cast-cbc','cast5-cbc','cast5-cfb','cast5-ecb','cast5-ofb','des','des-cbc','des-cfb','des-ecb','des-ede','des-ede-cbc','des-ede-cfb','des-ede-ofb','des-ede3','des-ede3-cbc','des-ede3-cfb','des-ede3-ofb','des-ofb','des3','desx','rc2','rc2-40-cbc','rc2-64-cbc','rc2-cbc','rc2-cfb','rc2-ecb','rc2-ofb','rc4','rc4-40','seed','seed-cbc','seed-cfb','seed-ecb','seed-ofb'] |
|
|
|
keyfile = File.open("mah.key").read |
|
circle = keyfile.split("CIRCLE:")[1].split("\n")[0].split(",") |
|
|
|
puts "Read Modes from keyfile..." |
|
circle.each do |c| |
|
puts " > #{c}" |
|
end |
|
|
|
$key = keyfile.split("KEY:")[1] |
|
puts "Read key..." |
|
puts $key |
|
|
|
puts "" |
|
|
|
$s = TCPSocket.open(server, port) |
|
print("addr: ", $s.addr.join(":"), "\n") |
|
print("peer: ", $s.peeraddr.join(":"), "\n") |
|
$s.puts "USER testing 0 * Testing" |
|
$s.puts "NICK #{nick}" |
|
$s.puts "JOIN #{channel}" |
|
$s.puts "PRIVMSG #{channel} :Hello from IRB Bot" |
|
|
|
Thread.new { |
|
until $s.eof? do |
|
msg = $s.gets |
|
msx = msg.split(" ") |
|
mse = msg.split("#{channel} :")[1] |
|
if msx[1] == "PRIVMSG" |
|
if mse.match(/^[~]/) |
|
mse = mse.gsub('[~]','').chomp() |
|
mse = [mse].pack('H*') |
|
puts mse |
|
circle.reverse.each do |co| |
|
mse = Crypt.decrypt(co,$key,mse) |
|
end |
|
end |
|
puts "> #{mse}" |
|
end |
|
if msx[1] == "396" |
|
$s.puts "JOIN #{channel}" |
|
end |
|
end |
|
} |
|
|
|
while true |
|
inp = gets.chomp() |
|
circle.each do |c| |
|
inp = Crypt.encrypt(c,$key,inp) |
|
end |
|
inp = inp.unpack('H*')[0] |
|
$s.puts "PRIVMSG #{channel} :[~]#{inp}" |
|
end |