import urllib, os, sys, socket, _winreg, string, psyco
psyco.full()
# Change the user agent to SpySweeper to avoid detection
class AppURLopener(urllib.FancyURLopener):
def __init__(self, *args):
self.version = "SpySweeper"
urllib.FancyURLopener.__init__(self, *args)
urllib._urlopener = AppURLopener()
# Set a few defaults
default_path = "C:\\Program Files\\Webroot\\Spy Sweeper"
host = "www.webroot.com"
force = False
# Process command line arguments
if len(sys.argv) > 0:
for x in sys.argv:
x = string.lower(x)
if x == "-f" or x == "-force":
force = True
elif x == string.lower(sys.argv[0]):
pass
else:
print "\nInvalid command line argument,", x
os._exit(1)
# Set up screen
os.system('cls')
print "Updating Webroot SpySweeper\n"
# Get SpySweeper location
try:
hkey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\Webroot\SpySweeper')
ssID = _winreg.QueryValueEx(hkey, 'id')
ssPath = ssID[0]
except WindowsError, (errno, strerror):
if errno == 2:
if not os.path.exists(default_path + "\\SpySweeper.exe"):
print "Error: SpySweeper not found in registry"
sys.exit(1)
else:
ssPath = default_path
else:
print "Error: ", (errno, strerror)
sys.exit(1)
# Verify that masters.mst is where it's supposed to be.
mstPath = ssPath + '\\masters\\'
if not os.path.exists(mstPath + 'masters.mst') and not force:
print "Error: SpySweeper definitions not found!"
os._exit(1)
# Get installed mst version number
try:
if not os.path.exists(ssPath + '\\Version\\version.ver'):
print "Unable to determine verion! Please reinstall SpySweeper."
sys.exit(1)
else:
f = file(ssPath + '\\Version\\version.ver', 'r')
current_version = string.strip(f.read())
print "Installed mst version ......", current_version
f.close()
except WindowsError, (errno, strerror):
if errno == 2:
print "Error: SpySweeper not found in registry"
sys.exit(1)
else:
print "Error: ", (errno, strerror)
exit(1)
try:
# Connect to webroot server
print "Server's mst version .......",
response = urllib.urlopen("
http://www.webroot.com/php/disp0201.php?oc=49&pc=64000")
data = response.read()
server_version = data
print data
# Download if newer or if forced
if data > current_version or force:
print "Downloading update ......... ",
response = urllib.urlopen("
http://www.webroot.com/php/disp0201.php?pc=64000&oc=50")
length = int(response.info()["Content-Length"])
amt = (length/10) + 10
data = ""
while True:
print '%s' % (chr(8) + '#'),
dl = response.read(amt)
if dl == "":
break
data += dl
print chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+chr(8)+"OK "
f = file(ssPath + '\\version\\version.ver', 'w')
f.write(server_version)
f.close()
else:
print "\nLatest update already installed"
os._exit(0)
if os.path.exists(mstPath + 'masters.mst'):
print "Backing up old file ........",
if os.path.exists(mstPath + 'masters.bak'):
os.unlink(mstPath + 'masters.bak')
os.rename(mstPath + 'masters.mst', mstPath + 'masters.bak')
print "OK"
print "Updating masters file ......",
f = file(mstPath + 'masters.mst', 'wb')
f.write(data)
f.close()
print "OK"
print "\nSpySweeper successfuly updated"
except KeyboardInterrupt:
print "\n\nCanceled by user"
sys.exit(1)
except socket.gaierror:
print "Unable to resolve host"
sys.exit(1)
except socket.error:
print "Unable to connect:", sys.exc_info()[1]
sys.exit(1)
except:
print "Unexpected error:", sys.exc_info()
raise