def decode_strings(vw, decoding_functions_candidates, min_length, no_filter=False): """ FLOSS string decoding algorithm :param vw: vivisect workspace :param decoding_functions_candidates: identification manager :param min_length: minimum string length :param no_filter: do not filter decoded strings :return: list of decoded strings ([DecodedString]) """ decoded_strings = [] function_index = viv_utils.InstructionFunctionIndex(vw) # TODO pass function list instead of identification manager for fva, _ in decoding_functions_candidates.get_top_candidate_functions( 10): for ctx in string_decoder.extract_decoding_contexts(vw, fva): for delta in string_decoder.emulate_decoding_routine( vw, function_index, fva, ctx): for delta_bytes in string_decoder.extract_delta_bytes( delta, ctx.decoded_at_va, fva): for decoded_string in string_decoder.extract_strings( delta_bytes, min_length, no_filter): decoded_strings.append(decoded_string) return decoded_strings
def decode_strings(vw, function_index, decoding_functions_candidates): """ FLOSS string decoding algorithm :param vw: vivisect workspace :param function_index: function data :param decoding_functions_candidates: identification manager :return: list of decoded strings ([DecodedString]) """ decoded_strings = [] # TODO pass function list instead of identification manager for fva, _ in decoding_functions_candidates.get_top_candidate_functions(10): for ctx in string_decoder.extract_decoding_contexts(vw, fva): for delta in string_decoder.emulate_decoding_routine(vw, function_index, fva, ctx): for delta_bytes in string_decoder.extract_delta_bytes(delta, ctx.decoded_at_va, fva): for decoded_string in string_decoder.extract_strings(delta_bytes): decoded_strings.append(decoded_string) return decoded_strings
def decode_strings(vw, decoding_functions_candidates, min_length, no_filter=False): """ FLOSS string decoding algorithm :param vw: vivisect workspace :param decoding_functions_candidates: identification manager :param min_length: minimum string length :param no_filter: do not filter decoded strings :return: list of decoded strings ([DecodedString]) """ decoded_strings = [] function_index = viv_utils.InstructionFunctionIndex(vw) # TODO pass function list instead of identification manager for fva, _ in decoding_functions_candidates.get_top_candidate_functions(10): for ctx in string_decoder.extract_decoding_contexts(vw, fva): for delta in string_decoder.emulate_decoding_routine(vw, function_index, fva, ctx): for delta_bytes in string_decoder.extract_delta_bytes(delta, ctx.decoded_at_va, fva): for decoded_string in string_decoder.extract_strings(delta_bytes, min_length, no_filter): decoded_strings.append(decoded_string) return decoded_strings