VirtualProtectEx
Вот решение, у человека тоже не записывало значение.
http://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-bots-programs/wow-memory-editing/519770-writing-memory-doesnt-change-value.html

BOOL VirtualProtectEx (
HANDLE hProcess, // ключ процесса
LPVOID lpAddress, // адрес региона фиксированной страницы
DWORD dwSize, // размер региона
DWORD flNewProtect, // режим защиты
PDWORD lpflOldProtect // адрес для прежнего режима защиты
);
Параметры
hProcess
Идентификатор процесса, атрибуты памяти которого будут изменены.
Хэндл должен иметь опцию доступа - PROCESS_VM_OPERATION (см. OpenProcess)
Заметь
lpAddress
Адрес области для установки атрибутов.
dwSize
Размер области памяти.
flNewProtect
Определяет флаги доступа:
Value Meaning
PAGE_READWRITE - Чтение и запись.
PAGE_READONLY - Только чтение.
PAGE_EXECUTE - Только исполнение программного кода.
PAGE_EXECUTE_READ - Исполнение и чтение.
PAGE_EXECUTE_READWRITE - Исполнение, чтение и запись.
PAGE_NOACCESS - Запрещен любой вид доступа.
PAGE_GUARD - Сигнализация доступа к странице. Это значение можно
использовать вместе с другими, кроме PAGE_NOACCESS.
PAGE_NOCACHE - Отмена кэширования для страницы памяти. Используется
драйверами устройств. Это значение можно использовать
вместе с любыми другими, кроме PAGE_NOACCESS.
lpflOldProtect
Указатель на переменную для получения старого значения памяти.
Если параметр равен НУЛЮ или указатель на недействительную память, функция завершится ошибкой.
На выходе
BOOL
Успешная функция добывает НЕ НУЛЬ.
Неуспешная функция терпит НУЛЬ.
Я уже писал выше, как сделать его читабельныv и доступным для записи, но в Hiasm как это реализовать не понимаю :
[offtop]//Declare this somewhere
[DllImport("kernel32.dll")]
static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress,
UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
//Call this for your address to make it writeable.
uint dwOldProtect;
VirtualProtectEx(WoWHandle, (IntPtr)0xAA33DC, (UIntPtr)4, 0x40, out dwOldProtect);[/offtop]