1. Вы можете придумать любую формулу хеша. Идея простая - зафиксировать состояние файла. Этого можно добиться различными стандартными хеш-функциями (есть в оф. примерах), контрольными суммами (тоже есть в оф. примерах). Вы можете подсчитать длину файла, количество 1 в файле, сохранить первые 1000 байт файла. В общем, формулы могут быть любыми.
2. Затем вам надо сохранить хеш. Ваш друг ломает хеш, а вы хешируете хеш. Затем ваш друг ломает хеш хеша и т. д.
3. Поэтому, если вы хотите защититься от дурга, храните хеш на сервере, а перед каждым запуском скачивайте его и проверяйте файл.
4. Но ваш друг поставит прокси и подменит серверный трафик. Поэтому вам необходимо как-то удостовериться, что хеш получен из надёжного источника. Вы покупаете сертификат и шифруете соединение до сервера.
5. Ну а дальше ваш друг уже начнёт реверс-инженеринг (дизассемблер). И тут вы никак не сможете защититься.