Mark Buffalo ya ha proporcionado una buena respuesta sobre las cosas a considerar. Sin embargo, me gustaría ampliar su respuesta con pocas soluciones; por supuesto, es una pregunta muy amplia, por lo que no está ni cerca de una "mejor" solución. Es solo cosas a considerar.
Estaré haciendo muchas suposiciones basadas en esta pregunta y serán:
- El sistema operativo que está utilizando es Windows
- La arquitectura de su sistema es x86 o x64
- Tiene una buena comprensión de los aspectos internos de Windows.
Los "virus" pueden fusionarse con los ejecutables existentes
Hay tantas maneras de hacer ejecutables de enlace.
Digamos que tenemos "notepad.exe" como el programa legítimo y "virus.exe" que es el malware. Virus.exe podría escribirse en la RAT (Tabla de direcciones de recursos) de notepad.exe y reemplazar el OEP (Punto de entrada original) con su cargador personalizado que ejecutará el código de malware y luego ejecutará notepad.exe.
Puedes vencer esto leyendo la RAT y haciendo una firma .text PE.
Proyecto de código - .Text Checksum
Tenga en cuenta que esto puede ser derrotado por el metamórfico y el polimorfismo, cuyo código se cambia en cada ejecución, lo que resulta en un hash único para el .text pero es mucho más difícil de realizar. Lea algunos de los códigos de z0mbie sobre cómo se ejecuta y así sucesivamente.
z0mbie - Ejemplo de código de malware, etc.
Solo puedes vencer esto con medidas extremas de las que no estoy totalmente automatizado, son cosas que se ejecutan en una secuencia que está relacionada con el malware. Por ejemplo, simulemos DeleteFileW( L"C:\SomeImportantFile.exe" );
, digamos que el código es el siguiente:
MOV EAX, 0x12345
PUSH EAX
CALL Kernel32.DeleteFileW
Ahora, en términos de eficiencia, será lento, pero puede firmar el PUSH EAX, CALL, ya que siempre tendrá los mismos bytes y en su código, lea qué valores se mantienen en 0x12345 ya que esta dirección de memoria probablemente sea diferente.
Cambiar su origen o incluso recompilar el virus lo derrotará
De lo anterior, podrás solucionar esto.
Para cubrir otros puntos de los que no se ha hablado:
- inyección de Dll
- inyección de código
- enganche SSDT
- parcheo de kernel
Creo que esta pregunta es más bien una pregunta para enlace Sin embargo, creo que es una pregunta demasiado detallada para responder.