From 161dcef4980acfb0fcb3af77cefa11e85433f40e Mon Sep 17 00:00:00 2001 From: nativy Date: Mon, 23 Jun 2014 22:26:52 +0300 Subject: [PATCH] Updating to v0.43 - minor fixes --- README.md | 13 +- conf/database.xml | 649 ------------------------------------ imports/eula_handler.py | 4 +- imports/terminal_handler.py | 323 ++++++++++-------- imports/updatehandler.py | 3 +- theZoo.py | 20 +- 6 files changed, 203 insertions(+), 809 deletions(-) delete mode 100644 conf/database.xml diff --git a/README.md b/README.md index 1e9a264..4930a8e 100644 --- a/README.md +++ b/README.md @@ -102,14 +102,15 @@ The repository holding all files is currently - [x] Separate between database and application. - [x] UI improvements. +## Change Log for v0.43: +- [X] Verify argv to be working properly. (fixes in v0.5) +- [X] Virus-Total upload and indexing module. - Not possible due to restrictions of VT. +- [X] Automatic reporting system for malwares which are not indexed in the framework. + ##Predicted Change Log for v1.0 - [ ] Fix auto-complete for malware frameworks. - [ ] Better UI features. -- [X] Verify argv to be working properly. (fixes in v0.5) -- [ ] Virus-Total upload and indexing module. -- [ ] Automatic reporting system for malwares which are not indexed in the framework. - -Stuff which are in the making: +- [ ] Consider changing DB to XML or SQLite3. -If you have any suggestions or malware that you have indexed as in the documentations please send it to us to yuvaln210 [at] your most popular mail server so we can add it for every one's enjoyment. \ No newline at end of file +If you have any suggestions or malware that you have indexed as in the documentations please send it to us to yuval[]morirt [dot]com so we can add it for every one's enjoyment. \ No newline at end of file diff --git a/conf/database.xml b/conf/database.xml deleted file mode 100644 index 5a00a1c..0000000 --- a/conf/database.xml +++ /dev/null @@ -1,649 +0,0 @@ - - - 190220141439 - - - "Source/Original/Dokan_Dec2008/Dokan_Dec2008" - "botnet" - "Dokan" - "unknown" - "unknown" - - - - "c" - "00/12/2008" - "x86" - - - - "Source/Original/ShadowBotv3_March2007/ShadowBotv3_March2007" - "botnet" - "ShadowBot" - "3" - "unknown" - - - - "cpp" - "03/2007" - "x86" - - - - "Source/Original/rBot0.3.3_May2004/rBot0.3.3_May2004" - "botnet" - "rBot" - "0.3.3" - "unknown" - - - - "cpp" - "00/05/2004" - "x86" - - - - "Source/Original/ZeuS2.0.8.9_Feb2013/ZeuS2.0.8.9_Feb2013" - "botnet" - "ZeuS" - "2.0.8.9" - "unknown" - - - - "c" - "02/2013" - "x86" - - - - "Source/Original/X0R-USB_Jan2009/X0R-USB_Jan2009" - "virus" - "X0R-USB-Virus" - "unknown" - "unknown" - - - - "c" - "00/01/2009" - "x86" - - - - "Source/Original/LoexBot1.3_Sep2008/LoexBot1.3_Sep2008" - "botnet" - "LoexBot" - "1.3" - "unknown" - - - - "cpp" - "00/09/2008" - "x86" - - - - "Source/Original/ZunkerBot1.4.5_Sep2007/ZunkerBot1.4.5_Sep2007" - "botnet" - "ZunkerBot" - "1.4.5" - "unknown" - - - - "php" - "09/2007" - "x86" - - - - "Source/Original/DopeBotv0.22_UnCrippled_Feb2007/DopeBotv0.22_UnCrippled_Feb2007" - "botnet" - "DopeBot-UnCrippled" - "0.22" - "unknown" - - - - "cpp" - "00/02/2007" - "x86" - - - "Source/Original/vbBot_Jan2007/vbBot_Jan2007" - "botnet" - "vbBot" - "unknown" - "unknown" - - - - "vb" - "01/2007" - "x86" - - - "Source/Original/xTBot0.0.2_2Feb2002/xTBot0.0.2_2Feb2002" - "botnet" - "xTBot" - "0.0.2" - "unknown" - - - - "cpp" - "02/2002" - "x86" - - - "Source/Original/VBS.Win32.Vabian/VBS.Win32.Vabian" - "VBS-Worm" - "VBS.Win32.Vabian" - "botnet" - "unknown" - - - - "vb" - "unknown" - "x86" - - - "Source/Original/DopeBotv0.22_CrippledFeb2007/DopeBotv0.22_CrippledFeb2007" - "botnet" - "DopeBot-Crippled" - "0.22" - "unknown" - - - - "cpp" - "00/02/2007" - "x86" - - - "Source/Original/Win32.MiniPig_Nov2006/Win32.MiniPig_Nov2006" - "Worm" - "Win32.MiniPig" - "virus" - "unknown" - - - - "c" - "00/11/2006" - "x86" - - - "Source/Original/HellBotv3.0_10June2005/HellBotv3.0_10June2005" - "botnet" - "Hellbot" - "3.0" - "unknown" - - - - "cpp" - "00/06/2005" - "x86" - - - "Source/Original/Win32.ogw0rm_Nov2008/Win32.ogw0rm_Nov2008" - "Worm" - "Win32.ogwOrm" - "unknown" - "unknown" - - - - "cpp" - "00/11/2008" - "x86" - - - "Source/Original/DopeBot.B_Dec2004/DopeBot.B_Dec2004" - "botnet" - "DopeBot.B" - "unknown" - "unknown" - - - - "cpp" - "00/12/2004" - "x86" - - - "Source/Original/LiquidBot_May2005/LiquidBot_May2005" - "botnet" - "LiquidBot" - "unknown" - "unknown" - - - - "cpp" - "00/05/2005" - "x86" - - - "Source/Original/SpazBot2.12_June2007/SpazBot2.12_June2007" - "botnet" - "SpazBot" - "2.12" - "unknown" - - - - "vb" - "00/06/2007" - "x86" - - - "Source/Original/DBotv3.1_March2007/DBotv3.1_March2007" - "botnet" - "DBot" - "3.1" - "unknown" - - - - "c" - "00/03/2007" - "x86" - - - "Source/Original/CyberBotv2.2_October2006/CyberBotv2.2_October2006" - "botnet" - "CyberBot" - "2.2" - "unknown" - - - - "cpp" - "00/10/2006" - "x86" - - - "Source/Original/DopeBot.A_Dec2004/DopeBot.A_Dec2004" - "botnet" - "DopeBot.A" - "unknown" - "unknown" - - - - "cpp" - "00/12/2004" - "x86" - - - "Source/Original/MyDoom.A_Jan2004/MyDoom.A_Jan2004" - "virus" - "MyDoom.A" - "unknown" - "unknown" - - - - "c" - "00/01/2004" - "x86" - - - "Source/Original/ShadowBot_Sep2008/ShadowBot_Sep2008" - "botnet" - "ShadowBot" - "unknown" - "unknown" - - - - "cpp" - "00/09/2008" - "x86" - - - "Binaries/CryptoLocker20Nov2013/CryptoLocker20Nov2013" - "ransomeware" - "CryptoLocker" - "Unknown" - "Unknown" - - - - "bin" - "20/12/2013" - "x86" - - - "Binaries/CryptoLocker_10Sep2013/CryptoLocker_10Sep2013" - "ransomeware" - "CryptoLocker" - "Unknown" - "Unknown" - - - - "bin" - "10/12/2013" - "x86" - - - "Binaries/IllusionBot_May2007/IllusionBot_May2007" - "botnet" - "Illusion Bot" - "Unknown" - "Unknown" - - - - "bin" - "00/05/2007" - "x86" - - - "Source/Original/NBot_July2008/NBot_July2008" - "botnet" - "nBot" - "0.32" - "Unknown" - - - - "c" - "00/05/2008" - "x86" - - - "Binaries/Trojan.Dropper.Gen/Trojan.Dropper.Gen" - "trojan" - "Dropper" - "Unknown" - "Unknown" - - - - "bin" - "00/01/2014" - "x86" - - - "Binaries/Trojan.NSIS.Win32/Trojan.NSIS.Win32" - "trojan" - "NSIS" - "Unknown" - "Unknown" - - - - "bin" - "00/01/2014" - "x86" - - - "Binaries/Trojan.Win32.Bechiro.BCD/Trojan.Win32.Bechiro.BCD" - "trojan" - "Bechiro" - "BCD" - "Unknown" - - - - "bin" - "00/01/2014" - "x86" - - - "Binaries/AndroRat_6Dec2013/AndroRat_6Dec2013" - "botnet" - "AndroRat" - "Dec2013" - "Unknown" - - - - "java" - "06/12/2013" - "x86" - - - "Binaries/CryptoLocker_22Jan2014/CryptoLocker_22Jan2014" - "ransomeware" - "CryptoLocker" - "Jan2014" - "Unknown" - - - - "bin" - "22/01/2014" - "x86" - - - "Binaries/njRAT-v0.6.4/njRAT-v0.6.4" - "botnet" - "njRAT" - "0.6.4" - "Unknown" - - - - "bin" - "00/09/2013" - "x86" - - - "Binaries/ZeusBankingVersion_26Nov2013/ZeusBankingVersion_26Nov2013" - "botnet" - "Zeus - zBot" - "Nov2013" - "Unknown" - - - - "bin" - "23/11/2013" - "x86" - - - "Source/Original/NullBot_Dec2006/NullBot_Dec2006" - "botnet" - "NullBot" - "Dec2006" - "Unknown" - - - - "cpp" - "00/12/2006" - "x86" - - - "Binaries/Artemis" - "trojan" - "Artemis" - "Unknown" - "Unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Somoto" - "apt" - "Somoto" - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Variant.Kazy" - "trojan" - "Variant.Kazy" - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Win32/Brontok.W" - "Worm" - "Brontok.FE" - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Trojan.Loadmoney.1" - "trojan" - "LMclicker.1" - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Win32Dircrypt.Trojan.Ransom.ABZ" - "ransomeware" - "Trojan.Ransom" - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/TrojanWin32.Duqu.Stuxnet" - "botnet" - "Trojan.Win32.Duqu.Aoq ." - "unknown" - "unknown" - - - - "bin" - "00/00/0000" - "x86" - - - "Binaries/Win32.Botnet.Stuxnet.B" - "apt" - "Stuxnet Duqu" - "Realtek Signed B" - "Unknown" - - - - "bin" - "00/00/2007" - "x86" - - - "Binaries/Win32.Botnet.Stuxnet.A" - "apt" - "Stuxnet Duqu" - "C-Media Electronics Incorporation Signature - A" - "Unknown" - - - - "bin" - "00/00/2009" - "x86" - - - "Binaries/Skywiper-A.Flame" - "apt" - "Skywiper AKA Flame" - "A" - "Unknown" - - - - "bin" - "00/00/2012" - "x86" - - - "Binaries/Careto_Feb2014" - "apt" - "Careto aka The Mask" - "A" - "Unknown" - - - - "bin" - "15/02/2014" - "x86" - - - "Binaries/ZeusGamever_Feb2014" - "botnet" - "Zeus" - "Gamever" - "Unknown" - - - - "bin" - "19/02/2014" - "x86" - - - "Binaries/Android.Spy.49_iBanking_Feb2014" - "botnet" - "Android Spy 29" - "Banking Version" - "Unknown" - - - - "apk" - "19/02/2014" - "arm" - - - "Binaries/Win32.Cridex" - "worm" - "Cridex" - "B" - "Unknown" - - - - "bin" - "00/02/2014" - "x86" - - \ No newline at end of file diff --git a/imports/eula_handler.py b/imports/eula_handler.py index d27f74e..3a7b2e2 100644 --- a/imports/eula_handler.py +++ b/imports/eula_handler.py @@ -51,10 +51,10 @@ class EULA: print '|infect you machines will live and dangerous malwares!. |' print '|___________________________________________________________________________|' print globals.bcolors.WHITE - eula_answer = raw_input('Type YES in captial letters to accept this EULA.\n >') + eula_answer = raw_input('Type YES in captial letters to accept this EULA.\n > ') if eula_answer == 'YES': new = open(globals.vars.eula_file, 'a') new.write(eula_answer) else: print 'You need to accept the EULA.\nExiting the program.' - sys.exit(1) \ No newline at end of file + sys.exit(0) \ No newline at end of file diff --git a/imports/terminal_handler.py b/imports/terminal_handler.py index 51f6f53..4d90cdf 100644 --- a/imports/terminal_handler.py +++ b/imports/terminal_handler.py @@ -8,163 +8,204 @@ from imports.updatehandler import Updater class Controller: - def __init__(self): - self.modules = None - self.currentmodule = '' - self.commands = [ ("search", "searching for malwares using given parameter with 'set'."), - ("list all", "lists all available modules"), - ("set", "sets options for the search"), - ("get", "downloads the malware"), - ("update-db", "updates the databse"), - ("back", "removes currently chosen malware"), - ("help", "displays this help..."), - ("exit", "exits...")] + def __init__(self): + self.modules = None + self.currentmodule = '' + self.commands = [("search", "searching for malwares using given parameter with 'set'."), + ("list all", "lists all available modules"), + ("set", "sets options for the search"), + ("get", "downloads the malware"), + ("report-mal", "report a malware you found"), + ("update-db", "updates the databse"), + ("back", "removes currently chosen malware and filters"), + ("help", "displays this help..."), + ("exit", "exits...")] - self.searchmeth = [ ("arch","which architecture etc; x86, x64, arm7 so on..."), - ("plat","platform: win32, win64, mac, android so on..."), - ("lang","c, cpp, vbs, bin so on..."), - ("vip", "1 or 0")] + self.searchmeth = [("arch", "which architecture etc; x86, x64, arm7 so on..."), + ("plat", "platform: win32, win64, mac, android so on..."), + ("lang", "c, cpp, vbs, bin so on..."), + ("vip", "1 or 0")] - self.modules = self.GetPayloads() + self.modules = self.GetPayloads() - #print 'im at init' - self.plat = '' - self.arch = '' - self.lang = '' - self.type = '' - self.vip = '' + self.plat = '' + self.arch = '' + self.lang = '' + self.type = '' + self.vip = '' - def GetPayloads(self): - m = [] - csvReader = csv.reader(open(globals.vars.main_csv_file, 'rb'), delimiter=',') - for row in csvReader: - m.append(row) - return m + def GetPayloads(self): + m = [] + csvReader = csv.reader(open(globals.vars.main_csv_file, 'rb'), delimiter=',') + for row in csvReader: + m.append(row) + return m - def MainMenu(self): - if len(self.currentmodule) > 0: - g = int(self.currentmodule) - 1 - just_print = self.modules[int(g)][int(globals.vars.column_for_name)] - cmd = raw_input( - globals.bcolors.GREEN + 'mdb ' + globals.bcolors.RED + str(just_print) + globals.bcolors.GREEN + '#> ' + globals.bcolors.WHITE).strip() - else: - cmd = raw_input(globals.bcolors.GREEN + 'mdb ' + globals.bcolors.GREEN + '#> ' + globals.bcolors.WHITE).strip() + def MainMenu(self): + # This will give you the nice prompt you like to much + if len(self.currentmodule) > 0: + g = int(self.currentmodule) - 1 + just_print = self.modules[int(g)][int(globals.vars.column_for_name)] + cmd = raw_input( + globals.bcolors.GREEN + 'mdb ' + globals.bcolors.RED + str( + just_print) + globals.bcolors.GREEN + '#> ' + globals.bcolors.WHITE).strip() + else: + cmd = raw_input( + globals.bcolors.GREEN + 'mdb ' + globals.bcolors.GREEN + '#> ' + globals.bcolors.WHITE).strip() - try: - while cmd == "": - #print 'no cmd' - self.MainMenu() + try: + while cmd == "": + #print 'no cmd' + self.MainMenu() - if cmd == 'help': - print " Available commands:\n" - for (cmd, desc) in self.commands: - print "\t%s\t%s" % ('{0: <12}'.format(cmd), desc) - print '' - self.MainMenu() + if cmd == 'help': + print " Available commands:\n" + for (cmd, desc) in self.commands: + print "\t%s\t%s" % ('{0: <12}'.format(cmd), desc) + print '' + self.MainMenu() - if cmd == 'search': - ar = self.modules - manySearch = manysearches.MuchSearch() + if cmd == 'search': + ar = self.modules + manySearch = manysearches.MuchSearch() - # function to sort by arch - if len(self.arch) > 0: - ar = manySearch.sort(ar, globals.vars.column_for_arch, self.arch) - # function to sort by plat - if len(self.plat) > 0: - ar = manySearch.sort(ar, globals.vars.column_for_plat, self.plat) - # function to sort by lang - if len(self.lang) > 0: - ar = manySearch.sort(ar, globals.vars.column_for_pl, self.lang) - if len(self.type) > 0: - ar = manySearch.sort(ar, globals.vars.column_for_type, self.type) - if len(self.vip) > 0: - ar = manySearch.sort(ar, globals.vars.column_for_vip, self.vip) - printController = manysearches.MuchSearch() - printController.PrintPayloads(ar) - self.MainMenu() + # function to sort by arch + if len(self.arch) > 0: + ar = manySearch.sort(ar, globals.vars.column_for_arch, self.arch) + # function to sort by plat + if len(self.plat) > 0: + ar = manySearch.sort(ar, globals.vars.column_for_plat, self.plat) + # function to sort by lang + if len(self.lang) > 0: + ar = manySearch.sort(ar, globals.vars.column_for_pl, self.lang) + if len(self.type) > 0: + ar = manySearch.sort(ar, globals.vars.column_for_type, self.type) + if len(self.vip) > 0: + ar = manySearch.sort(ar, globals.vars.column_for_vip, self.vip) + printController = manysearches.MuchSearch() + printController.PrintPayloads(ar) + self.MainMenu() - if re.match('^set', cmd): - try: - cmd = re.split('\s+', cmd) - print cmd[1] + ' => ' + cmd[2] - if cmd[1] == 'arch': - self.arch = cmd[2] - if cmd[1] == 'plat': - self.plat = cmd[2] - if cmd[1] == 'lang': - self.lang = cmd[2] - if cmd[1] == 'type': - self.type = cmd[2] - except: - print 'Need to use the set method with two arguments.' - cmd = '' - self.MainMenu() + if re.match('^set', cmd): + try: + cmd = re.split('\s+', cmd) + print cmd[1] + ' => ' + cmd[2] + if cmd[1] == 'arch': + self.arch = cmd[2] + if cmd[1] == 'plat': + self.plat = cmd[2] + if cmd[1] == 'lang': + self.lang = cmd[2] + if cmd[1] == 'type': + self.type = cmd[2] + except: + print 'Need to use the set method with two arguments.' + cmd = '' + self.MainMenu() - if cmd == 'show': - if len(self.currentmodule) == 0: - print "No modules have been chosen. Use 'use' command." - if len(self.currentmodule) > 0: - print 'Currently selected Module: ' + self.currentmodule - print '\tarch => ' + str(self.arch) - print '\tplat => ' + str(self.plat) - print '\tlang => ' + str(self.lang) - print '\ttype => ' + str(self.type) - print '' - self.MainMenu() + if cmd == 'show': + if len(self.currentmodule) == 0: + print "No modules have been chosen. Use 'use' command." + if len(self.currentmodule) > 0: + print 'Currently selected Module: ' + self.currentmodule + print '\tarch => ' + str(self.arch) + print '\tplat => ' + str(self.plat) + print '\tlang => ' + str(self.lang) + print '\ttype => ' + str(self.type) + print '' + self.MainMenu() - if cmd == 'exit': - sys.exit(1) + if cmd == 'exit': + sys.exit(1) - if cmd == 'update-db': - updateHandler = Updater() - updateHandler.get_maldb_ver() - self.MainMenu() + if cmd == 'update-db': + updateHandler = Updater() + updateHandler.get_maldb_ver() + self.MainMenu() - if cmd == 'get': - updateHandler = Updater() - try: - updateHandler.get_malware(self.currentmodule, self.modules) - self.MainMenu() - except: - print globals.bcolors.RED + '[-]' + globals.bcolors.WHITE + 'Error getting malware.' - self.MainMenu() + if cmd == 'report-mal': + rprt_name = raw_input("Name of malware: ") + rprt_type = raw_input("Type of malware: ") + rprt_version = raw_input("Version: ") + rprt_lang = raw_input("Language: ") + rprt_src = raw_input("Source / Binary (s/b): ") + rprt_arch = raw_input("Win32, ARM etc. ? ") + rprt_reporter = raw_input("Your name for a thanks note on theZoo.\nPlease notice that this will be public!\n\nName: ") + rprt_comments = raw_input("Comments? ") - if re.match('^use', cmd): - try: - cmd = re.split('\s+', cmd) - self.currentmodule = cmd[1] - cmd = '' - except: - print 'The use method needs an argument.' - self.MainMenu() + report = ("//%s//\n" % rprt_name) + report += ("///type/%s///\n" % rprt_type) + report += ("///ver/%s///\n" % rprt_version) + report += ("///lang/%s///\n" % rprt_lang) + report += ("///src/%s///\n" % rprt_src) + report += ("///arch/%s///\n" % rprt_arch) + report += ("//reporter/%s//\n" % rprt_reporter) + report += ("//comments/%s//\n" % rprt_comments) - if cmd == 'back': - print 'im at back - WTF?' - self.arch = '' - self.plat = '' - self.lang = '' - self.type = '' - self.currentmodule = '' - self.MainMenu() + # Just to avoid bots spamming us... + email = "info" + email += "\x40" + email += "morirt\x2ecom" + print "-------------- Begin of theZoo Report --------------" + print report + print "-------------- Ending of theZoo Report --------------" + print "To avoid compromising your privacy we have chose this method of reporting." + print "If you have not stated your name we will not write a thanks in our README." + print "Your email will remain private in scenario and will not be published." + print "" + print "Please create an archive file with the structure as in the README file" + print "And attach it to the email. " + print("Please send this report to %s" % email) - if cmd == 'list all': - print "\nAvailable Payloads:" - array = self.modules - i = 0 - print "ID\tName\tType" - print '-----------------' - for element in array: - answer = array[i][globals.vars.column_for_uid] - answer += '\t%s' % ('{0: <12}'.format(array[i][globals.vars.column_for_name])) - answer += '\t%s' % ('{0: <12}'.format(array[i][globals.vars.column_for_type])) - print answer - i=i+1 - self.MainMenu() + self.MainMenu() - if cmd == 'quit': - print ":(" - sys.exit(1) + # 'get' command. Not yet fully operational + if cmd == 'get': + updateHandler = Updater() + try: + updateHandler.get_malware(self.currentmodule, self.modules) + self.MainMenu() + except: + print globals.bcolors.RED + '[-]' + globals.bcolors.WHITE + 'Error getting malware.' + self.MainMenu() - except KeyboardInterrupt: - print ("i'll just go now...") - sys.exit() + # If used the 'use' command + if re.match('^use', cmd): + try: + cmd = re.split('\s+', cmd) + self.currentmodule = cmd[1] + cmd = '' + except: + print 'The use method needs an argument.' + self.MainMenu() + + # Rests all current data + if cmd == 'back': + self.arch = '' + self.plat = '' + self.lang = '' + self.type = '' + self.currentmodule = '' + self.MainMenu() + + if cmd == 'list all': + print "\nAvailable Payloads:" + array = self.modules + i = 0 + print "ID\tName\tType" + print '-----------------' + for element in array: + answer = array[i][globals.vars.column_for_uid] + answer += '\t%s' % ('{0: <12}'.format(array[i][globals.vars.column_for_name])) + answer += '\t%s' % ('{0: <12}'.format(array[i][globals.vars.column_for_type])) + print answer + i = i + 1 + self.MainMenu() + + if cmd == 'quit': + print ":(" + sys.exit(1) + + except KeyboardInterrupt: + print ("i'll just go now...") + sys.exit() diff --git a/imports/updatehandler.py b/imports/updatehandler.py index e666a48..970a5cf 100644 --- a/imports/updatehandler.py +++ b/imports/updatehandler.py @@ -39,11 +39,12 @@ class Updater: return 0 curr_maldb_ver = f - response = urllib2.urlopen(globals.vars.giturl+ globals.vars.maldb_ver_file) + response = urllib2.urlopen(globals.vars.giturl + 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) + # Write the new DB version into the file f = open(globals.vars.maldb_ver_file, 'w') f.write(new_maldb_ver) diff --git a/theZoo.py b/theZoo.py index b8543a4..b05c8e9 100755 --- a/theZoo.py +++ b/theZoo.py @@ -15,7 +15,17 @@ #You should have received a copy of the GNU General Public License #along with this program. If not, see . + + +import sys +import csv +import os +from optparse import OptionParser +from imports.updatehandler import Updater from imports import muchmuchstrings +from imports.eula_handler import EULA +from imports.globals import vars +from imports.terminal_handler import Controller __version__ = "0.5.0 Citadel" __codename__ = "Citadel" @@ -25,16 +35,6 @@ __licensev__ = "GPL v3.0" __maintainer = "Yuval Nativ" __status__ = "Beta" -import sys -import getopt -import csv -import os -from optparse import OptionParser -from imports.updatehandler import Updater -from imports.eula_handler import EULA -from imports.globals import vars -from imports.terminal_handler import Controller - def main():