)
parser.set_defaults(command=commands.remove_invalid)
+ ### Check obfuscations ###
+ parser = subparser_command.add_parser(
+ "check_obfuscations",
+ help="Checks obfuscation patterns if they are already solved (should not happen).",
+ )
+ parser.set_defaults(command=commands.check_obfuscations)
+
logger.debug("EXIT!")
def run_command() -> None:
logger.debug("Success! - EXIT!")
return 0
+
+def check_obfuscations(args: argparse.Namespace) -> int:
+ logger.debug("args[]='%s' - CALLED!", type(args))
+
+ logger.debug("Invoking locking.acquire() ...")
+ locking.acquire()
+
+ # Init variables
+ deleted = 0
+
+ database.cursor.execute("SELECT pattern FROM obfuscation ORDER BY pattern ASC")
+ rows = database.cursor.fetchall()
+
+ logger.info("Checking %d obfuscations ...", len(rows))
+ for row in rows:
+ logger.debug("row[pattern]='%s'", row["pattern"])
+ pattern = row["pattern"].replace("*", "_").replace("?", "_")
+
+ database.cursor.execute("SELECT domain FROM instances WHERE domain LIKE '" + pattern + "' LIMIT 1")
+ check = database.cursor.fetchone()
+
+ logger.debug("check[]='%s'", type(check))
+ if check is not None:
+ logger.info("Deleting row[pattern]='%s', solved to check[domain]='%s' ...", row["pattern"], check["domain"])
+ database.cursor.execute("DELETE FROM instances WHERE domain=? LIMIT 1", [row["pattern"]])
+ deleted = deleted + 1
+
+ logger.info("Deleted %d patterns ...", deleted)
+
+ logger.debug("Invoking commit() ...")
+ database.connection.commit()
+
+ logger.debug("Vaccum cleaning database ...")
+ database.cursor.execute("VACUUM")
+
+ logger.debug("Success! - EXIT!")
+ return 0