Pergunta

Deixe-me começar com um pouco de fundo.

Esta uma manhã de nossos usuários relataram que arquivo de instalação do Testuff foi reportado como infectado com um vírus pelo antivírus CA. Confiante de que este era um falso positivo, olhei na web e descobriu que usuários de outro programa (SpyBot) relataram o mesmo problema.

A agora, para a questão real.

Assumindo que o antivírus está procurando uma assinatura específica binária no arquivo, eu gostaria de encontrar as sequências correspondentes em ambos os arquivos e espero encontrar uma maneira de ajustar o script de instalação para evitar que a seqüência de aparecer.

Eu tentei o seguinte em Python, mas ele foi executado por um longo tempo e agora eu queria saber se havia uma maneira melhor ou mais rápido.

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 uma biblioteca melhor para Python ou outra linguagem que pode fazer isso? Uma maneira completamente diferente para resolver o problema é bem-vinda também.

Foi útil?

Solução

o maior problema comum substring. Eu acho usos difflib a solução DP, o que certamente é muito lento para comparar executáveis. Você pode fazer muito melhor com sufixo árvores / matrizes.

Usando o perl Árvore :: Sufixo pode ser a solução mais fácil. Aparentemente, ele dá a todos os substrings comuns em uma faixa de comprimento especificado:

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

Outras dicas

Note que, mesmo se você fez encontrá-lo desta forma, não há nenhuma garantia de que a mais longa partida é na verdade o que está sendo procurado. Em vez disso, você pode encontrar o código ou cordas mesas de inicialização comuns adicionados pelo mesmo compilador por exemplo.

Por que você não entre em contato com CA e pedir-lhes para dizer-lhes o que eles estão procurando, para que o vírus?

Ou, você pode copiar o arquivo e mudar cada byte indivíduo até que o aviso desapareceu (pode demorar um pouco, dependendo do tamanho).

É possível que a detecção de vírus pode ser muito mais complicado do que simplesmente à procura de uma corda fixa.

Melhor não perguntar sobre a complexidade eo tempo esses tipos de algoritmos precisa.

Se você tem interesse neste - aqui .ps documento vinculado aqui você pode encontrar uma introdução boa para essa temática.

Se uma boa implementação para estes algoritmos existir, eu não posso dizer.

Eu suspeito que procura strings binárias não vai ajudá-lo. Um programa de instalação é provável que seja a fazer algumas coisas 'suspeitos'.

Você provavelmente precisará falar com CA e spybot cerca branco-lista o seu instalador, ou sobre o que está provocando o alerta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top