У меня есть процесс, который будет иметь важные значения в памяти. Я не хочу, чтобы кто-нибудь мог прочитать память моего процесса и получить эти значения. Поэтому я попытался создать программу, которая будет смотреть на список запущенных программ и определить, были ли какие-либо из них «отладчиками» и т. Д. Но я понял, что кто-то может просто написать краткую программу, чтобы сбрасывать память моего процесса. Я знаю, что несколько процессов в моей системе защищают их память. Как я мог получить это? (ps: Я использую C#)Как сохранить память защищенного процесса
ответ
Любого приложение, которое работает под пользователем с достаточно привилегированном (например. Локальным администратором) может позвонить ReadProcessMemory и читать процесс по желанию, в любое время, не привязываясь к процессу отладки порта, и без вашей обработки возможности для предотвращения или даже обнаружения этого. И я даже не вхожу в то, что возможно для драйвера системного ядра ...
В конечном итоге все решения, доступные для этого, - это масло змеи или просто способ устранить проблему, подняв планку чтобы сделать его сложнее. Некоторые делают это действительно тяжело, но никто не делает его пуленепробиваемым. Но, в конечном счете, нельзя скрыть ничего от пользователя, который имеет физический доступ к машине и имеет достаточно повышенные привилегии.
Если вы не хотите, чтобы пользователи что-то читали, просто нет на компьютере пользователя. Используйте сервисную модель, где ваш IP-адрес находится на сервере, и пользователи получают доступ к нему через Интернет (т. Е. Веб-службы).
+1 Тот, кто контролирует аппаратное обеспечение, управляет кодом на нем. –
Я думаю, что лучший способ сделать это - использовать коммерческое решение, например, в этом PDF brochure, это их website. Вы можете быть лучше идти по этому пути, если вы действительно заботитесь о защите приложения от перехвата, IP кражи т.д., вместо того, чтобы свертывать собственное решение ...
Edit:Я бы не идти по маршруту в высмеивая себя, что решение, которое я создам, будет доказательством несанкционированного доступа, трещин, доказательством идиота. Оставьте это в такой компании, как Arxan, о которой я упоминал (я не являюсь продавцом - я просто приводил пример), конечно, это может быть дорого, но вы можете лучше спать ночью, зная, что это намного сложнее для взлома, чтобы сломать кроме имеющих нет решения вообще ...
Прежде всего, всегда будет способом сбросить образ памяти программы. Ваша программа может сделать ее сложнее и никогда не будет невозможной. Тем не менее, могут быть способы «скрыть» значения. Обычно считается, что это сложно сделать и не стоит того, что есть проблемы, но есть программы, которые шифруют эти значения в памяти. Однако, чтобы иметь возможность использовать их, они должны временно расшифровывать их и повторно шифровать (или отбрасывать) их впоследствии.
Хотя шифрование легко с использованием .Net-инфраструктуры, отбрасывание дешифрованного значения в C# не так просто. В C вы выделили кусок памяти для хранения дешифрованных значений и очистите это (путем записи нулевых или случайных данных на него), прежде чем освободить его. В C# нет гарантии, что ваши данные не будут храниться где-нибудь (кеширование, сбор мусора), и вы не сможете его очистить. Однако, как отмечает eulerfx в комментарии, в .Net 4.0 SecureString может использоваться. Насколько это безопасно, я не знаю.
Как вы можете видеть, всегда будет короткое время, когда значение лежит в незашифрованной памяти, и это уязвимость здесь.
Я не сомневаюсь, что эксперт-хакер мог бы получить от него. Я просто хочу убедиться, что все новички не могут. – Lienau
@Lienau: проблема с экспертом в сравнении с новичком - это достаточно для * одного * эксперта, чтобы взломать его, а затем все новички найдут в Google, как это сделать. Лишь немногие люди понимают, как сделать джейлбрейк iPhone с нуля, но * много * iPhone разгромлен. Если цена стоит того, кто-то это сделает. –
В этом случае вы можете написать оболочку для SecureString, которая добавляет байты значения, которое вы хотите сохранить как символы для экземпляра SecureString. SecureString обеспечивает шифрование, и ваша оболочка при необходимости декодирует символы обратно в байты (или любой другой тип). – Virtlink
- 1. Сохранить память процесса для последующего использования?
- 2. Как выполнить память процесса?
- 3. Как стереть неактивную память процесса?
- 4. начиная память процесса
- 5. вилка многопоточного процесса: вся память процесса копируется?
- 6. Виртуальная память, выделенная для процесса
- 7. Получить доступную память для процесса
- 8. Как сохранить память на Java?
- 9. OS X запрограммировать память процесса
- 10. память процесса Java продолжает расти
- 11. Как освободить память от процесса в multiprocessing.queue?
- 12. Как получить память процесса на qnx
- 13. Как отладчик заглядывает в память другого процесса?
- 14. Сохраняет ли виртуальная память процесса?
- 15. Невозможно записать в память процесса
- 16. HEAP-память для запуска процесса
- 17. Получить память процесса в Windows
- 18. Как сохранить жизнь моего процесса?
- 19. Общая память в адресном пространстве процесса?
- 20. Visual Studio 2015: память процесса увеличения
- 21. Память не возвращается после перезапуска процесса
- 22. Получить бесплатную память процесса на android
- 23. QShared память для внешнего запуска процесса?
- 24. Magical запись сохранить память только
- 25. Память, используемая JVM для каждого процесса
- 26. расположение память mutithreaded процесса в C++
- 27. Сохранить видео во внутреннюю память
- 28. Ограничить процессор и память для * nix процесса
- 29. Ограничить память процесса jvm на ubuntu
- 30. Поведение аномального термина процесса, имеющего общую память
Вы можете использовать этот класс для защиты строк: http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx – eulerfx