Обнаружить вторжение в память - PullRequest
2 голосов
/ 22 декабря 2009

Существуют программные приложения, такие как ArtMoney , которые редактируют память других приложений.

Есть ли способ определить, когда какое-то другое приложение редактирует память моего приложения?

Ответы [ 5 ]

6 голосов
/ 22 декабря 2009

Основная идея защиты от базовой модификации памяти состоит в том, чтобы зашифровать части памяти, о которых вы заботитесь, и иметь избыточные проверки для защиты от модификации.

Ничто из этого не остановит решительного хакера, но достаточно, чтобы скрипты не попадали в ваше адресное пространство.

3 голосов
/ 22 декабря 2009

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

Я не знаю специфики работы ArtMonkey, но если он функционирует как отладчик, вы можете регулярно проверять наличие DebugHook <> 0 и реагировать соответствующим образом, если это так. (Просто поместите этот код в блок {$ IFNDEF DEBUG}, чтобы он не доставлял хлопот вам !)

Возможно, вы захотите спросить себя, почему вы хотите запретить людям исправлять вашу память. Если нет подлинной проблемы безопасности, вы, вероятно, даже не должны пытаться. Помните, что компьютер пользователя, на котором будет работать ваша программа, является его собственностью, а не вашим, и если вы слишком сильно вмешиваетесь в выбор пользователя относительно того, что делать с его свойством, ваша программа морально неотличима от вредоносных программ.

3 голосов
/ 22 декабря 2009

Один из методов, используемых многими программами проверки на вирусы, заключается в выполнении контрольной суммы исполняемого файла или памяти и ее сохранении. При запуске иногда рассчитывайте новую контрольную сумму и сравнивайте с оригиналом. Большинство программ не изменяют намеренно свои исполняемые файлы.

1 голос
/ 22 декабря 2009

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

1 голос
/ 22 декабря 2009

Я не знаю, как это работает, я думаю, что это можно сделать тремя способами:

  • API-интерфейсы ReadProcessMemory и WriteProcessMemory для Windows
  • с использованием отладчика (проверьте на наличие отладки, но это почти слишком просто, поэтому он не будет его использовать)
  • внедряет dll, чтобы получить доступ ко всей памяти (потому что он находится в том же процессе)

Последний способ проще (проверьте наличие введенных dll или что-то в этом роде). Первый хитрее, но я нашел несколько статей об этом:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...