Вы не можете. Программное обеспечение не может определить, работает ли оно в идеальной эмуляции или в реальном мире. И эмулятор можно остановить, программу можно проанализировать, переменные можно изменить, в общем можно сделать все, что можно сделать в отладчике.
Допустим, вы хотите определить, является ли родительский процесс отладчиком. Итак, вы делаете системный вызов, чтобы получить родительский PID? Отладчик может перехватить системный вызов и вернуть любой PID, который не обязательно должен быть реальным PID. Вы хотите перехватывать каждый SIGTRAP
, чтобы отладчик больше не мог его использовать? Что ж, в этом случае отладчик может просто остановиться и отправить SIGTRAP
также вашему процессу. Вы хотите измерить время, когда вы отправляете SIGTRAP
, чтобы знать, останавливается ли процесс на короткое время отладчиком для отправки SIGTRAP
, чтобы вы знали, когда есть отладчик? Отладчик может заменить ваши вызовы, чтобы получить время и вернуть поддельное время. Допустим, вы работаете на процессоре, у которого есть инструкция, возвращающая время, поэтому для получения времени не требуется вызов функции. Теперь вы можете знать, что время, которое вы получаете, реально? Нет, отладчик может заменить эту инструкцию инструкцией SIGTRAP
и вернуться в любое время, когда он захочет, или, если такой инструкции не существует, запустить Программу в эмуляторе, который можно запрограммировать любым способом. Все, что вы можете придумать для обнаружения отладчика или эмулятора, может быть сфальсифицировано средой, и у вас нет никаких изменений для его обнаружения.
Единственный способ остановить отладку — не давать программное обеспечение клиентам, а держать его в своих руках. Создайте облачный сервис и запустите программное обеспечение на своем сервере. В этом случае заказчик не может отлаживать вашу программу, так как он ее не запускает и не контролирует. За исключением того, что клиент может каким-то образом получить доступ к серверу или данным, но это уже другая история.
person
12431234123412341234123
schedule
08.10.2020