Обнаружение взлома в дочернем процессе

Я занимаюсь разработкой простого приложения с использованием C и хотел бы узнать, можно ли каким-либо образом определить, когда приложение было подделано. Основываясь на моих знаниях, Hash - один из способов обеспечения целостности данных, но я не знаю, как жестко закодировать хэш процесса в моем коде, когда я его компилирую, или я не знаю, даже это хороший способ делать. Любая помощь / подсказка высоко ценится.

1 ответ

Вы должны защитить свой хеш от статических изменений (пока ваше приложение находится на диске). Например, вы можете подписать его закрытым ключом, который будет спрятан где-то в коде обнаружения взлома. Я не могу сказать вам, как вы можете это скрыть, потому что это должен быть ваш секрет.

Чтобы иметь самопроверяемый исполняемый файл, вы можете выделить хеш в исходных текстах, но указать компилятору сохранить его в секции именованных PE/ELF. При подписании вашего двоичного файла исключите ваш именованный раздел из расчета хеша и сохраните хеш, рассчитанный внутри.

Чтобы поместить хэш в именованный раздел для компиляторов Microsoft, вы можете использовать

#pragma section("tdhash", read)
__declspec(allocate("tdhash")) const unsigned char hash[32] = {0};

для компиляторов GCC:

const unsigned char hash[32] __attribute__ ((section ("tdhash"))) = {0};

Примечание. После изменения PE вы можете обновить контрольную сумму в заголовке, а также исключить поле контрольной суммы из вычисления хеша. Пример для этого находится в статье "Как предотвратить" проверку целостности "при загрузке" статьи Microsoft KB, доступной по https://technet.microsoft.com/ru-ru/library/ee829684

Другие вопросы по тегам