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():