From d0de335fb361dec7cb7a74c40fd9bf36e6d0a7e9 Mon Sep 17 00:00:00 2001 From: Sheksa Date: Tue, 16 Dec 2014 20:59:45 +0200 Subject: [PATCH] A bit more fixes --- conf/maldb.db | Bin 11264 -> 11264 bytes imports/db_handler.py | 19 ++++ imports/globals.py | 18 ++-- imports/terminal_handler.py | 19 ++-- .../{updatehandler.py => update_handler.py} | 82 +++++++++--------- theZoo.py | 2 +- 6 files changed, 81 insertions(+), 59 deletions(-) rename imports/{updatehandler.py => update_handler.py} (61%) diff --git a/conf/maldb.db b/conf/maldb.db index 8b0acc9727c78b047902d69dd84ba6c87bd8f04e..af67de3fd835ebda7485a2fc20169121756333d5 100644 GIT binary patch delta 3309 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. import sys +from os import remove, rename import urllib2 from imports import globals from imports import db_handler @@ -24,6 +25,9 @@ from imports import db_handler class Updater: + def __init__(self): + self.db = db_handler.DBHandler() + def get_maldb_ver(self): ''' Get current malwareDB version and see if we need an update @@ -36,69 +40,62 @@ class Updater: "No malware DB version file found.\nPlease try to git clone the repository again.\n") return 0 - def update_db(self): + def update_db(self, curr_db_version): ''' Just update the database from GitHub :return: ''' - try: - with file(globals.vars.maldb_ver_file) as f: - f = f.read() - except IOError: - print( - "No malware DB version file found.\nPlease try to git clone the repository again.\n") - return 0 - - curr_maldb_ver = f + if globals.vars.DEBUG_LEVEL is 1: + print locals() response = urllib2.urlopen( - globals.vars.giturl_dl_dl + globals.vars.maldb_ver_file) + globals.vars.giturl_dl + globals.vars.maldb_ver_file) new_maldb_ver = response.read() - if new_maldb_ver == curr_maldb_ver: - print globals.bcolors.GREEN + '[+]' + globals.bcolors.WHITE + " No need for an update.\n" + globals.bcolors.GREEN + '[+]' + globals.bcolors.WHITE + " You are at " + new_maldb_ver + " which is the latest version." - sys.exit(1) + if new_maldb_ver == curr_db_version: + print globals.bcolors.GREEN + '[+]' + globals.bcolors.WHITE + " theZoo is up to date :)\n" + globals.bcolors.GREEN + '[+]' + globals.bcolors.WHITE + " You are at " + new_maldb_ver + " which is the latest version." + return + + print globals.bcolors.RED + '[+]' + globals.bcolors.WHITE + " A newer version is available: " + new_maldb_ver + "!" + print globals.bcolors.RED + '[+]' + globals.bcolors.WHITE + " Updating..." + + # Get the new DB and update it + + self.download_from_repo(globals.vars.db_path) + self.db.close_connection() + remove(globals.vars.db_path) + rename("maldb.db", globals.vars.db_path) + self.db.renew_connection() # Write the new DB version into the file + f = open(globals.vars.maldb_ver_file, 'w') f.write(new_maldb_ver) f.close() - - # Get the new CSV and update it - csvurl = globals.vars.giturl_dl_dl + globals.vars.main_csv_file - u = urllib2.urlopen(csvurl) - f = open(globals.vars.main_csv_file, 'wb') - meta = u.info() - file_size = int(meta.getheaders("Content-Length")[0]) - print "Downloading: %s Bytes: %s" % (globals.vars.main_csv_file, file_size) - file_size_dl = 0 - block_sz = 8192 - while True: - buffer = u.read(block_sz) - if not buffer: - break - file_size_dl += len(buffer) - f.write(buffer) - status = r"%10d [%3.2f%%]" % ( - file_size_dl, file_size_dl * 100. / file_size) - status = status + chr(8) * (len(status) + 1) - print status, - f.close() + return def get_malware(self, id): + # get mal location - db = db_handler.DBHandler() - loc = db.query("SELECT LOCATION FROM MALWARES WHERE ID=?", id)[0][0] - print loc + + loc = self.db.query("SELECT LOCATION FROM MALWARES WHERE ID=?", id)[0][0] + + # get from git + self.download_from_repo(loc, '.zip') self.download_from_repo(loc, '.pass') self.download_from_repo(loc, '.md5') self.download_from_repo(loc, '.sha256') - # get from git - def download_from_repo(self, mal_location, suffix): + def download_from_repo(self, filepath, suffix=''): if globals.vars.DEBUG_LEVEL is 1: print locals() - file_name = mal_location.rsplit('/')[-1] + suffix - url = globals.vars.giturl_dl + mal_location + '/' + file_name + file_name = filepath.rsplit('/')[-1] + suffix + + # Dirty way to check if we're downloading a malware + + if suffix is not '': + url = globals.vars.giturl_dl + filepath + '/' + file_name + else: + url = globals.vars.giturl_dl + filepath u = urllib2.urlopen(url) f = open(file_name, 'wb') meta = u.info() @@ -117,3 +114,4 @@ class Updater: status = status + chr(8) * (len(status) + 1) sys.stdout.write('\r' + status) f.close() + print "\n" diff --git a/theZoo.py b/theZoo.py index 69c71ec..29ed640 100644 --- a/theZoo.py +++ b/theZoo.py @@ -20,7 +20,7 @@ import sys import os from optparse import OptionParser -from imports.updatehandler import Updater +from imports.update_handler import Updater from imports import manysearches from imports import muchmuchstrings from imports.eula_handler import EULA