Изменение памяти — законно?
Винда позволяет читать и писать в память чужого процесса. Конечно, всё в рамках прав твоей и целевой программы. Пример такой программы - ArtMoney - популярная в свое время (да и актуальная сейчас) программа для "взлома" сингловой игры на деньги, опыт и прочее.

Читы же работают так: 
1. Создается библиотека, которая может быть подключена к целевой программе. Под библиотекой понимается dll. Эта dll располагается в памяти чужого процесса (например, ManualMap способ).
2. В чужой программе создается поток, который инициирует эту библиотеку и запускает нужную функцию (точка входа). 
3. Теперь dll, в которой ваш код имеет прямой доступ ко всей памяти процесса, а так же, ко всей работе программы. Можно получить доступ к классам, методам свойствам и так далее.
Обычно ОС не позволяет обращаться к памяти другой программы только если у желающей программы нет каких нибудь повышенных прав.
Такие повышенные права могут быть у:
1. Драйверов и других kernel-mode программ
2. У программ, запущенных с root или же админскими правами.

Ну и не забываем, что ОС бывают разные.