def __edit_text_analyse__(self, a: apk.APK, d: DalvikVMFormat, dx: Analysis): # load keywords with open( os.path.join(os.path.dirname(__file__), "assets" + os.path.sep + 'pii_keywords.txt'), 'r') as file: keywords: [str] = file.read().splitlines(False) # parse flowdroid results folder = os.path.join(os.path.dirname(__file__), "results" + os.path.sep + "flowdroid") file_name = a.get_filename().split(os.path.sep)[-1][:-4] fd_path = os.path.join(folder, file_name + ".xml") self.leak_id_names: [str] = [] if not os.path.exists(fd_path): print("Flowdroid result doesn't exist") return resource_list = self.__analyse_flowdroid_result__(fd_path) resource_ids = [] for s_id, s_method, s_statement, sink_method, sink_statement in resource_list: resource_ids.append(s_id) # find Resource class package_name = a.get_package() package_name = package_name.replace(".", "/") cls: ClassDefItem = d.get_class("L" + package_name + "/R$id;") # find resource id if cls is None: print("This application doesn't have an R class") return fields: [EncodedField] = cls.get_fields() # match ids with keywords for field in fields: field: EncodedField = field value: EncodedValue = field.get_init_value() # resource id -> resource name the_value = str(value.get_value()) field_name = field.get_name() if the_value in resource_ids and field_name in keywords: self.leak_id_names.append(field_name)