Frage

Lassen Sie mich mit einem wenig Hintergrund beginnen.

An diesem Morgen eine unserer Nutzer berichteten, dass Testuff die Setup-Datei mit einem Virus von der CA Anti-Virus als infiziert gemeldet. Zuversichtlich, dass dies eine falsche positive war, die ich im Internet gesucht und gefunden, dass die Nutzer von einem anderen Programm (SpyBot) das gleiche Problem gemeldet haben.

A nun für die eigentliche Frage.

Unter der Annahme der Anti-Virus ist für eine bestimmte binäre Signatur in der Datei suchen, ich mag die passenden Sequenzen in beiden Dateien zu finden und hoffentlich einen Weg finden, um den Setup-Skript zu optimieren, dass die Sequenz zu hindern angezeigt.

Ich habe versucht, die folgenden in Python, aber es ist seit langer Zeit läuft jetzt, und ich habe mich gefragt, ob es eine bessere oder schnellere Weg.

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))

Gibt es eine bessere Bibliothek für Python oder für eine andere Sprache, die dies tun können? Eine ganz andere Art und Weise das Problem zu lösen ist willkommen auch.

War es hilfreich?

Lösung

Siehe der längsten gemeinsamen Teilzeichen Problem . Ich denke, difflib die DP-Lösung verwendet, die sicherlich zu langsam ist, ausführbare Dateien zu vergleichen. Sie können mit dem Suffix Baum / Arrays viel besser.

Mit perl Baum :: Suffix könnte einfachste Lösung sein. Offenbar gibt es alle gängigen Substrings in einem bestimmten Längenbereich:

@lcs = $tree->lcs;
@lcs = $tree->lcs($min_len, $max_len);
@lcs = $tree->longest_common_substrings;

Andere Tipps

Beachten Sie, dass, auch wenn Sie es auf diese Weise das finden, gibt es keine Garantie, dass die längste Match tatsächlich derjenige ist, für zu werden gesucht. Stattdessen können Sie gemeinsame Initialisierungscode oder String-Tabellen mit dem gleichen Compiler zum Beispiel hinzugefügt finden.

Warum nicht CA kontaktieren und sie bittet, um ihnen zu sagen, was sie für das Virus sind?

Oder könnten Sie die Datei kopieren und jedes einzelne Byte ändern, bis die Warnung verschwunden (abhängig von der Größe kann eine Weile dauern).

Es ist möglich, die Virenerkennung viel komplizierter als einfach nur für eine feste Zeichenfolge sein kann.

Besser nicht wundern sich über die Komplexität und die Zeit diese Art von Algorithmen benötigen.

Wenn Sie Interesse an dieser - hier .ps Dokument verknüpft hier Sie können eine gute Einführung in diese Themen finden.

Wenn eine gute Implementierung für diese Algorithmen existieren, kann ich nicht sagen.

Ich vermute, dass für Binärketten suchen, nicht Sie gehen zu helfen. Ein Installationsprogramm ist wahrscheinlich einige ‚verdächtige‘ Dinge zu tun.

Sie müssen wahrscheinlich auf CA und Spybot über Whitelisting Ihr Installateur oder darüber sprechen, was den Alarm auslöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top