Mark Buffalo ha già fornito una buona risposta sulle cose da considerare. Tuttavia, mi piacerebbe ampliare la sua risposta con poche soluzioni, naturalmente è una domanda estremamente ampia, quindi non è affatto lontanamente vicino a una soluzione "migliore". Sono solo cose da considerare.
Farò molte ipotesi sulla base di questa domanda e saranno:
- Il sistema operativo che usi è Windows
- La tua architettura di sistema è x86 o x64
- Hai una buona conoscenza degli interni di Windows.
I "virus" possono unirsi con gli eseguibili esistenti
Ci sono così tanti modi su come eseguire bind eseguibili.
Diciamo che abbiamo "notepad.exe" come programma legittimo e "virus.exe" che è il malware. Virus.exe potrebbe scrivere se stesso nel RAT (Resource Address Table) di notepad.exe e sostituire l'OEP (Original Entry Point) con il suo caricatore personalizzato che eseguirà il codice malware quindi eseguirà notepad.exe.
Puoi sconfiggerlo leggendo il RAT e facendo una firma PE .text
Code Project - .Text Checksum
Tenete presente che questo può essere vanificato da metamorfismo e polimorfismo che il codice viene modificato su ogni esecuzione risultante in un hash univoco per il testo. ma è molto più difficile da eseguire. Leggi il codice di z0mbie su come è stato eseguito e così via.
z0mbie - Esempio di codice malware ecc
Potresti solo sconfiggerlo con misure estreme che sono inconsapevole di essere stato automatizzato, sono cose che vengono eseguite in uno squilibrio che è legato al malware. Ad esempio, supponiamo che DeleteFileW( L"C:\SomeImportantFile.exe" );
sia, supponiamo che il codice sia il seguente:
MOV EAX, 0x12345
PUSH EAX
CALL Kernel32.DeleteFileW
Ora in termini di efficienza sarà lento ma potresti firmare PUSH EAX, CALL dato che saranno sempre gli stessi byte e nel tuo codice leggere quali valori sono tenuti a 0x12345 dato che questo indirizzo di memoria sarà probabilmente diverso.
Cambiare la loro fonte, o persino ricompilare il virus, ti sconfiggerà
Da quanto sopra puoi aggirare questo.
Coprire altri punti di cui non si è parlato:
- iniezione Dll
- Iniezione di codice
- aggancio SSDT
- Patch del kernel
Credo che questa domanda sia più una domanda per link Tuttavia, credo che sia troppo approfondito per rispondere.