2015-03-06 3 views
0

Я хочу знать, есть ли способ, которым я могу зашифровать .data section моего процесса, чтобы предотвратить использование внешних программ, таких как Cheat Engine, для чтения или записи данных из моей программы.Шифровать переменные

Я знаю, как это сделать в разделе .text с использованием упаковщиков, но теперь я хочу защитить variables моей программы для доступа.

Кто-нибудь знает, возможно ли это, или есть ли другой способ защитить память?

Другие способы защиты памяти приветствуются!

+0

Упаковщики для раздела '.text' предлагают 0 защиту от Cheat Engine. Cheat Engine даже не заметил, что раздел был запутан, он будет видеть только простой код. – ElderBug

+0

@ ElderBug Итак, у вас есть предложения по защите памяти? – Batata

+0

Возможно, более целесообразно _detect_ вторжение, а не _prevent_ one. У вас есть сложный набор контрольных сумм в ваших данных, чтобы каждый раз вы могли убедиться, что он не был изменен внешней программой. Делает это трудным для чит-движка, так как они должны изменить значение и правильно установить контрольную сумму. –

ответ

1

Вы должны использовать CryptProtectMemory для шифрования данных, пока они не используются (используйте флаг CRYPTPROTECTMEMORY_SAME_PROCESS). Затем позвоните по номеру CryptUnprotectMemory, когда вам нужно получить к нему доступ.

Как заявил Дэвид, это просто уменьшает окно, в котором злоумышленник может просматривать/изменять вашу память, но с учетом этого ограничения это правильный способ сделать это.

Редактировать: Пример шифрования int. Проверка ошибок удалена для краткости. Важной частью отметить, что он работает на куски CRYPTPROTECTMEMORY_BLOCK_SIZE размера (для образца мы используем только один кусок, как будет держать Int на 32 или 64-битных платформ):

DWORD blockSize = CRYPTPROTECTMEMORY_BLOCK_SIZE; 
int* protectedBlock = (int*)LocalAlloc(LPTR, (SIZE_T)blockSize); 

protectedBlock[0] = 1234; 
printf("Before encryption: %d\n", protectedBlock[0]); 

CryptProtectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS); 
printf("After encryption: %d\n", protectedBlock[0]); 

CryptUnprotectMemory(protectedBlock, blockSize, CRYPTPROTECTMEMORY_SAME_PROCESS); 
printf("After decryption: %d\n", protectedBlock[0]); 

SecureZeroMemory(protectedBlock, blockSize); 
LocalFree(protectedBlock); 

Выход:

Before encryption: 1234 
After encryption: -2594087 
After decryption: 1234 
+0

Можете ли вы дать мне пример того, как использовать эти функции с помощью int? Я не очень много разбираюсь в этих функциях – Batata

1

Вы, безусловно, можете зашифровать раздел .data. Если вы хотите зашифровать весь раздел .data, вам, вероятно, потребуется принять ту же политику, что и упаковщики. Шифровать весь исполняемый файл. Добавьте заглушку, которая выполняет дешифровку при запуске, а затем передайте управление расшифрованному исполняемому файлу. Но тогда вам было бы не лучше. Чит-движки могут читать память процесса так же, как и раньше.

И вы не сможете выполнить процесс с разделом .data. Таким образом, вы разбиваете каждый бит библиотечного кода, который использует глобальные переменные, константы и т. Д. То, что вы можете сделать, это зашифровать только конфиденциальную информацию и дешифровать «на лету» перед использованием, а затем немедленно выбросить. Это, по крайней мере, делает его немного сложнее для хакеров. Они должны смотреть в нужный момент. Но любой, кто действительно хочет получить ваши данные, сможет. В какой-то момент вам придется расшифровать данные, чтобы использовать их, а затем чит-движки могут получить доступ к значениям.

Суть в том, что если вы окажетесь в ситуации, когда другой процесс может читать и записывать в память ваш процесс, вы проиграли битву.

+0

Я защитил свой раздел .text, используя CRC32, теперь хотел что-то сделать для защиты памяти. Не обязательно быть совершенным, просто сложно. – Batata

+1

+1. Даже если бы вы могли XOR с каким-то неизвестным, произвольным значением, чтобы оно было дешифровано только при чтении в регистр - ваши значения все равно могли быть прочитаны в некотором роде. (И вдобавок ко всему, что мешает им перепроектировать и выяснить, что такое ваш ключ?). –

+0

@ RollenD'Souza Итак, у вас есть предложения по защите памяти? – Batata