Pamiętajcie tylko, żeby nie trzymać w pamięci całego ciągu znaków checksumy np.
GML
39dllCrc = '10B6F084';
// lub
39dllCrc = 280424580;
i sprawdzać tak:
GML
if not crcpliku = 39dllCrc
show_message( 'Nieprawidlowy plik' );
bo takie coś łatwo podejrzeć/podmienić w pamięci.
Lepiej tak zrobić:
GML
// przyjmijmy, że prawdziwa checksuma to: 10B6F084.
// a get_checksum() zwraca sumę kontrolną CRC32 pliku w postaci stringa hex
cksum = get_checksum( '39.dll' );
if not string_char_at( cksum, 4 ) = '6' // jesli czwarty znak nie jest '6'
{ show_message( 'Plik 39.dll zostal zmodyfikowany' ); exit; }
if not string_char_at( cksum, 7 ) = '8' // jesli siodmy znak nie jest '8'
{ show_message( 'Plik 39.dll zostal zmodyfikowany' ); exit; }
if real( string_copy( cksum, 7, 2 ) ) - 34 <> 50 // jesli liczba z dwoch ostatnich znakow - 34 nie wynosi 50
{ show_message( 'Plik 39.dll zostal zmodyfikowany' ); exit; }
// itd.
i tak sprawdzić cały checksum :)