Door Anoniem
Veel AV's gebruiken deze methode: start byte, lengte, checksum. er wordt
gezocht naar een bepaalde startbyte (en dan het liefst een byte die niet
vaak voorkomt in normale code, zodat er niet vaak onnodige (dure)
checksums berekend hoeven te worden, zoals een
pusha/popa/lidt/sidt/etc, die compilers normaal niet genereren),
vervolgens wordt er over de volgende 'lengte' aantal bytes een checksum
berekend en vergeleken met een bekend checksum. en vaak wordt dit
proces nog herhaald op een ander stukje code.
Een snellere methode is: checksum berekenen van een standaard plaats
en daarna matchen met de verzameling checksums. Zodoende is hoef je
niet steeds opnieuw checksums te berekenen, want dat is kostbaar.
De eerste poster had het over gebruik van DLL
namen. DLL's zijn vaak
standaard Microsoft libraries. Gebruik van dergelijke veel voorkomende
DLL namen voor detectie is natuurlijk niet bruikbaar.
Sophos gebruikt vaak checksums- inderdaad niet altijd. Het is denkbaar
dat Sophos een checksum van een (deel van) export sectie gebruikt.
Het nadeel van checksums is dat je snel detectie verliest als er een
aanpassing wordt gedaan in de code. Het voordeel is snelheid. Vandaar
dat Sophos een redelijke snelle scanner is/was.
Een klein nadeel van checksums - voorals als ze 16 bits zijn - is de
mogelijkheid van false positives. Dat gebeurt dan ook zo nu en dan bij
Sophos.
Het zijn heel andere false positives dan bijvoorbeeld bij Symantec als die
een string gebruikt. Die fp's lijken dan op de malware die men wil
detecteren. Bij Sophos is het tegendeel vaak waar. Zo kan Sophos een
oud DOS virus detecteren in een stuk MIME. Of een e-mail worm in een
SAP executable.