gmz Опубликовано 8 августа, 2016 Поделиться Опубликовано 8 августа, 2016 1 час назад, Merlin сказал: Решил в эту тему запостить: подскажите, пожалуйста, почему при запуске проекта через Visual студию память целевого процесса читается и поля формы трейнера заполняются значениями из целевого процесса (работает ReadMemory), а при запуске файла, скомпилированного из проекта exe'шника, с правами администратора не читается (т.е. нет никаких ошибок, просто все поля формы трейнера пустые)? может права админа не нужны? Ссылка на комментарий Поделиться на другие сайты Поделиться
Merlin Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 WoW.exe всегда запускается с правами администратора, иначе его запустить просто нельзя, скомпилированный Trainer.exe (даже при запуске с правами администратора) не может получить доступ к WoW.exe, доступ работает почему-то только при запуске из Visual Studio). Соответственно функция GetModuleBaseAddress тоже не возвращает результат без запущенной студии. Скрытый текст DWORD ProcessManager::GetModuleBaseAddress(DWORD ProcID, TCHAR* ModuleName) { DWORD_PTR ModuleBaseAddress = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, ProcID); if (hSnapshot != INVALID_HANDLE_VALUE) { MODULEENTRY32 ModuleEntry32; ModuleEntry32.dwSize = sizeof(MODULEENTRY32); if (Module32First(hSnapshot, &ModuleEntry32)) { do { if (_tcsicmp(ModuleEntry32.szModule, ModuleName) == 0) { ModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr; break; } } while (Module32Next(hSnapshot, &ModuleEntry32)); } CloseHandle(hSnapshot); } return ModuleBaseAddress; } Ссылка на комментарий Поделиться на другие сайты Поделиться
afro228offical Опубликовано 9 августа, 2016 Автор Поделиться Опубликовано 9 августа, 2016 Мой вопрос решён . Спасибо ,NullAlex Ссылка на комментарий Поделиться на другие сайты Поделиться
Merlin Опубликовано 9 августа, 2016 Поделиться Опубликовано 9 августа, 2016 Мой вопрос тоже решился. Нужно было установить Debug привилегии у текущего процесса: Скрытый текст void EnableDebugPrivilege(bool fEnable) { if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid); tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL); CloseHandle(hToken); } } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения