Мне было интересно, смогу ли я удержать программу А от чтения всего моего плунжера, так как ей не нужно следить за тем, что делает программа В.
Также я на Windows 8.1 64 бит.
Программы, работающие в Windows, не могут напрямую обращаться к ОЗУ. Они получают доступ к виртуальным адресам. Для доступа к ОЗУ вам понадобится драйвер режима ядра, написанный для этой цели. (Вот как это делают некоторые из "инструментов sysinternals" Марка Руссиновича: они устанавливают драйвер, который поставляется в виде ресурса внутри .exe.)
Что касается доступа одной программы к другой, то у каждого процесса в Windows уже есть свое собственное виртуальное адресное пространство, отдельное и непересекающееся со всеми остальными. то есть 0x10000 одной программы полностью отличается от 0x10000 любой другой. Неважно, по какому адресу вы пытаетесь взглянуть, вы всегда смотрите на экземпляр этого адреса в своем собственном процессе.
Однако: API-интерфейсы ReadProcessMemory и WriteProcessMemory позволяют программам осуществлять межпроцессный доступ (в терминах виртуальных адресов). Чтобы использовать их, процесс, выполняющий "доступ", должен открыть другой процесс с предоставленными правами PROCESS_VM_READ или PROCESS_VM_WRITE. Процессы, выполняющиеся в вашей пользовательской сессии, обычно имеют возможность делать это друг с другом (то есть дескриптор безопасности в большинстве процессов допускает это для создателя процесса ... который является вами).
Однако одна программа не может знать, где что-то интересное будет в другом процессе. Это был бы долгий, утомительный поиск чего-нибудь интересного. Подавляющее большинство попыток приведет к области "адрес не определен", особенно в 64-разрядной системе, особенно в Windows 8.1 и более поздних версиях. Даже в пределах определенных областей виртуальной памяти программы обычно не маркируют свои области памяти контекстной информацией, такой как «номер банковского счета здесь:», за которым сразу следует указанный номер счета.
Может показаться несколько кавалерным, что любой из ваших процессов может получить доступ к "памяти" (свободно интерпретируемой) любого другого. Но помните, все, что вы делаете под одним логином и авторизацией, считается выполненным одним пользователем. то есть это все ваши данные в любом случае.
Честно говоря, я бы больше беспокоился о данных на вашем диске. Все файлы, содержащие ваши данные, были созданы вами под вашим идентификатором безопасности, поэтому любая программа, работающая под вашим идентификатором безопасности, может получить к ним доступ. Хуже того, по умолчанию в Windows создаются все файлы с доступом на чтение, предоставленным группе "Пользователи" - по существу, всем. Так что программы, работающие под другими идентификаторами безопасности, тоже могут их читать. А поскольку файлы часто имеют правильные имена и помещаются в хорошо именованные и упорядоченные каталоги, поиск "интересных" файлов, таких как accounts.txt, не так уж и сложен. Шифрование файлов NTFS не поможет против программ-шпионов, работающих под вашей учетной записью. Это гораздо больше, чем доступ к памяти между процессами.