Pregunta

Permítanme comenzar con un poco de historia.

Esta mañana, uno de nuestros usuarios informó que el antivirus CA informó que el archivo de instalación de Testuff estaba infectado con un virus.Confiando en que se trataba de un falso positivo, busqué en la web y descubrí que los usuarios de otro programa (SpyBot) habían informado del mismo problema.

Ahora, para la pregunta real.

Suponiendo que el antivirus esté buscando una firma binaria específica en el archivo, me gustaría encontrar las secuencias coincidentes en ambos archivos y, con suerte, encontrar una manera de modificar el script de configuración para evitar que aparezca esa secuencia.

Intenté lo siguiente en Python, pero ya lleva mucho tiempo ejecutándose y me preguntaba si había una forma mejor o más rápida.

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 una biblioteca mejor para Python o para otro lenguaje que pueda hacer esto?También sería bienvenida una forma completamente diferente de abordar el problema.

¿Fue útil?

Solución

Ver el problema de subcadena común más largo.Supongo que difflib usa la solución DP, que ciertamente es demasiado lenta para comparar ejecutables.Puede hacerlo mucho mejor con árboles/matrices de sufijos.

Usando Perl Árbol::Sufijo podría ser la solución más fácil.Aparentemente proporciona todas las subcadenas comunes en un rango de longitud específico:

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

Otros consejos

Tenga en cuenta que incluso si lo encontró de esta manera, no hay garantía de que la coincidencia más larga sea en realidad la que se busca.En su lugar, puede encontrar código de inicialización común o tablas de cadenas agregadas por el mismo compilador, por ejemplo.

¿Por qué no se comunica con CA y les pide que les digan qué están buscando para ese virus?

O bien, puede copiar el archivo y cambiar cada byte individual hasta que desaparezca la advertencia (puede tardar un poco dependiendo del tamaño).

Es posible que la detección de virus sea mucho más complicada que simplemente buscar una cadena fija.

Mejor no preguntarse por la complejidad y el tiempo que necesitan este tipo de algoritmos.

Si tienes interés en esto - aquí Documento .ps vinculado aquí Puedes encontrar una buena introducción a esta temática.

Si existe una buena implementación para estos algoritmos, no lo sé.

Sospecho que buscar cadenas binarias no te ayudará.Es probable que un programa de instalación esté haciendo algunas cosas "sospechosas".

Probablemente necesite hablar con CA y spybot sobre la inclusión de su instalador en la lista blanca o sobre qué desencadena la alerta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top