Я размышлял, как защитить свой код C / C ++ от дизассемблирования и обратного проектирования. Обычно я бы никогда не потворствовал такому поведению в своем коде; однако текущий протокол, над которым я работаю, никогда не должен подвергаться проверке или пониманию в целях безопасности различных людей.
Теперь это новая тема для меня, и Интернет не очень полезен для предотвращения обратная инженерия , а скорее отображает тонны информации о , как реконструировать
Вот некоторые из вещей, о которых я думал до сих пор:
Написание моих собственных процедур запуска (труднее для отладчика выполнить привязку)
void startup ();
int _start ()
{
запускать( );
выход (0)
}
недействительный запуск ()
{
/ * здесь код * /
}
Проверка отладчиков во время выполнения (и принудительный выход в случае обнаружения)
Функциональные трамплины
void trampoline (void (* fnptr) (), bool ping = false)
{
если (пинг)
fnptr ();
еще
батут (фнптр, правда);
}
Бессмысленное выделение и освобождение (стек сильно меняется)
Я имею в виду, что это некоторые из вещи, о которых я думал, но все они могут быть обойдены или выяснены аналитиками кода, если учесть правильные временные рамки. Есть ли у меня что-нибудь еще?