Question

Permettez-moi de commencer avec un peu de contexte.

Ce matin, l'un de nos utilisateurs a signalé que l'antivirus de CA avait signalé que le fichier d'installation de Testuff était infecté par un virus. Convaincu que c’était un faux positif, j’ai regardé sur le Web et découvert que les utilisateurs d’un autre programme (SpyBot) avaient signalé le même problème.

À présent, pour la question même.

En supposant que l'antivirus recherche une signature binaire spécifique dans le fichier, j'aimerais rechercher les séquences correspondantes dans les deux fichiers et, éventuellement, trouver un moyen de modifier le script de configuration pour empêcher cette séquence de s'afficher.

J’ai essayé ce qui suit en Python, mais cela fait longtemps que cela fonctionne et je me demandais s’il existait un moyen plus efficace ou plus rapide.

from difflib import SequenceMatcher

spybot = open("spybotsd160.exe", "rb").read()
testuff = open("TestuffSetup.exe", "rb").read()

s = SequenceMatcher(None, spybot, testuff)
print s.find_longest_match(0, len(spybot), 0, len(testuff))

Existe-t-il une meilleure bibliothèque pour Python ou un autre langage capable de le faire? Une façon complètement différente d'aborder le problème est également la bienvenue.

Était-ce utile?

La solution

Voir le plus long problème de sous-chaîne commun . Je suppose que difflib utilise la solution DP, qui est certainement trop lente pour comparer les exécutables. Vous pouvez faire beaucoup mieux avec les arbres / tableaux de suffixes.

Utilisation de perl Tree :: Suffix pourrait être la solution la plus simple. Apparemment, il donne toutes les sous-chaînes communes dans une plage de longueur spécifiée:

@lcs = $tree->lcs;
@lcs = $tree->lcs($min_len, $max_len);
@lcs = $tree->longest_common_substrings;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top