Однажды, я тоже задался вопросом, как защитить данные игры от взлома Artmoney. Обычно защита сводиться к тому, что игра отказывается запускаться при запущенном Artmoney, это решение показалась мне не слишком изящным. Я решил найти свой способ.
В качестве экспериментальной площадки использовал змейку (игра самописная, классическая, исходников не буду приводить, т.к. потерялись, буду приводить только код отвечающих за защиту от Artmoney), где игрока могло интересовать только количество жизней змейки.
Первым было опробовано xor шифрование значения переменной, но оно пало при использовании параметров поиска «Неизвестное Значение» и «Кодированное Значение». Т.е. простого шифрования явно недостаточно. Тогда меня осенило, что нужно менять ключ шифрования постоянно, независимо поменялось значение переменной или нет.
Вместо одной переменной
var
life: byte;
заводим две переменные
var
life, key: byte;
при этом реальное значение переменной жизни равно life xor key (можно использовать любой другой алгоритм шифрования).
Чтобы отсев не работал нужно постоянно менять ключ шифрования и перешифровывать переменную (например, поставить таймер, который через каждые 100 млсекунд меняет ключ)
tmp:=key; //сохраняем старый ключ
key:=random(255);//генерируем новый ключ
life:=(life xor tmp) xor key; //расшифровываем старым ключом и зашифровываем новым ключом
Изменение значения происходит почти по тому же алгоритму.
tmp:=key; //сохраняем старый ключ
key:=random(255);//генерируем новый ключ
life:=((life xor tmp) + i ) xor key; //расшифровываем старым ключом, меняем значение и зашифровываем новым ключом
Данная методика защиты может быть реализована на любых языках программирования. Главное придерживаться принципа: постоянно менять ключ шифрования.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий