tengo un virus ofuscado (que es el resultado de un xor con una secuencia de x bytes construida con una llave de 8 byte repetida varias veces)
la longitud del cuerpo del virus es un multiplo de 8.
conozco el cuerpo del virus no ofuscado.
Se que en un archivo infectado se encuentra la llave, el codigo del virus ofuscado y el loader de activacion del mismo, que si se invoca durante la ejecucion del archivo infectado, lee la llave, construye la secuencia de x bytes, la usa para extraer el virus e invocarlo.
como puedo averiguar si el virus aparece en un conjunto de archivos que se sospechan de estar infectados?
El lugar donde guarda el código original cambia? O es siempre el mismo? Si es así (siempre el mismo) es muy sencillo saber si un archivo está infectado. Si lo guarda como overlay, más aún, pues normalmente los ejecutables que tienen overlay, tienen la firma digital en ese lugar. Ahora, si lo guarda en una sección, deberías ver si el lugar (offset) dentro de la misma es siempre el mismo o si cambia. Si es el mismo, es muy trivial ya que XOR es reversible. Si cambia, deberás bruteforcear de a 1 byte, hasta obtener el primer byte del virus. Si lo hallas, bruteforceas el siguiente byte hasta encontrar el siguiente byte original. Así con los 8. Luego usas la key sobre los 8 bytes siguientes y si coinciden con los originales, entonces está infectado. Sinó, no.
Saludos!
PD: También puedes recorrer la sección ejecutable del programa para encontrar el código del loader, siempre y cuando sea el mismo siempre. Si es así, puedes crear una firma y detectarlo fácilmente en múltiples archivos (por ej. puedes crear una firma y usar PeID para escanear los archivos).