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