Чтобы противодействовать бинарному патчингу хочу контролировать CRC участка кода между метками begin, end. В этом участке происходит проверка пароля пользователя. Но CRC меняется при перезапусках проги (не при каждом, но меняется), так как меняются некоторые байты в этом участке кода при сборке видимо, соответственно я не могу закрепить какое то ХОРОШЕЕ значение, которое буду сравнивать с тем что выдает прога у потенциального взломщика. И смысла в таком CRC мало. Подскажите пожалуйста, что я делаю не так и как всё таки сделать так, что бы при легальном пользовании программой CRC не менялось?
int passVerif() {
char* begin_ptr;
char* end_ptr;
__asm {
lea eax, begin
mov begin_ptr, eax
lea eax, end
mov end_ptr, eax
}
int size = (int)(end_ptr - begin_ptr);
begin:;
if (strcmp(potentialPass, CR(",15=6!96=.\"4759=+0")) != 0) {
printf(CR("/*76?x(9++/7*<"));
exit(INCORRECT_PW);
}
end:;
printf("bytes between begin and end:\n");
uint32_t crc = 0xFFFFFFFF;
for (int i = 0; i < size; i++) {
unsigned char byte = *(begin_ptr + i);
crc ^= byte;
for (size_t j = 0; j < 8; j++) {
if (crc & 1) {
crc = (crc >> 1) ^ POLYNOMIAL;
}
else {
crc >>= 1;
}
}
printf("%02X ", byte);
}
printf("\n");
printf("CRC = %u\n", ~crc);
return size;
}