def cmd_open(self, *args): def usage(): print("usage: open [-h] [-f] [-u] [-t] <target>") def help(): usage() print("") print("Options:") print("\t--help (-h)\tShow this help message") print("\t--file (-f)\tThe target is a file") print("\t--url (-u)\tThe target is a URL") print("\t--tor (-t)\tDownload the file through Tor") print("") print("You can also specify a SHA256 hash to a previously stored") print("file in order to open a session on it.") print("") try: opts, argv = getopt.getopt(args, 'hfut', ['help', 'file', 'url', 'tor']) except getopt.GetoptError as e: print(e) usage() return is_file = False is_url = False use_tor = False for opt, value in opts: if opt in ('-h', '--help'): help() return elif opt in ('-f', '--file'): is_file = True elif opt in ('-u', '--url'): is_url = True elif opt in ('-t', '--tor'): use_tor = True if len(argv) == 0: usage() return else: target = argv[0] # If it's a file path, open a session on it. if is_file: target = os.path.expanduser(target) if not os.path.exists(target) or not os.path.isfile(target): print_error("File not found") return __session__.set(target) # If it's a URL, download it and open a session on the temporary # file. elif is_url: data = download(url=target, tor=use_tor) if data: tmp = tempfile.NamedTemporaryFile(delete=False) tmp.write(data) tmp.close() __session__.set(tmp.name) # Otherwise we assume it's an hash of an previously stored sample. else: target = argv[0].strip().lower() path = get_sample_path(target) if path: __session__.set(path)
def cmd_tags(self, *args): def usage(): print("usage: tags [-h] [-a=tags] [-d=tag]") def help(): usage() print("") print("Options:") print("\t--help (-h)\tShow this help message") print("\t--add (-a)\tAdd tags to the opened file (comma separated)") print("\t--delete (-d)\tDelete a tag from the opened file") print("") try: opts, argv = getopt.getopt(args, "ha:d:", ["help", "add=", "delete="]) except getopt.GetoptError as e: print(e) usage() return arg_add = None arg_delete = None for opt, value in opts: if opt in ("-h", "--help"): help() return elif opt in ("-a", "--add"): arg_add = value elif opt in ("-d", "--delete"): arg_delete = value # This command requires a session to be opened. if not __session__.is_set(): print_error("No session opened") return # If no arguments are specified, there's not much to do. # However, it could make sense to also retrieve a list of existing # tags from this command, and not just from the "find" command alone. if not arg_add and not arg_delete: print_error("You need to specify an option, either add or delete") return if arg_add: # Add specified tags to the database's entry belonging to # the opened file. db = Database() db.add_tags(__session__.file.sha256, arg_add) print_info("Tags added to the currently opened file") # We refresh the opened session to update the attributes. # Namely, the list of tags returned by the "info" command # needs to be re-generated, or it wouldn't show the new tags # until the existing session is closed a new one is opened. print_info("Refreshing session to update attributes...") __session__.set(__session__.file.path) if arg_delete: # TODO pass