![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
Есть рабочий код, но он напрочь отказывается работать в игре ArcheAge хотя скажем в CS:Source работает.
Как решить данную проблему? Я пытался уже запускать свою программу от имени админа. |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
Никто не знает ?!
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Код, использующий WriteProcessMemory() лично у меня вызывает большие подозрения.
Я понимаю, что код урезан для публикации в этом форуме, но этот никак не способствует его пониманию. Почему VirtualAlloc делается в своём процессе, а по выделенному адресу происходит запись уже в какой-то иной процесс? Почему не высвобождается buffer? Я так понимаю, что VirtualQueryEx вернул ноль? В описании функции на сайте Microsoft сказано, что в этом случае можно вызвать GetLastError(), Вы вызывали? В моём древнем описании этой функции упоминания о GetLastError() нет, но сказано так:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Canore |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
feodorv, hProcHormiX1 - это handle моего окна, hProc - handle ArcheAge, ну и собственно здесь происходит по блочное чтение из ArcheAge в мой процесс предварительно выделяя память. Но до VirtualAlloc даже не доходит.
Добавлено через 9 минут и 58 секунд При каждом проходе цикла: VirtualQueryEx(...) = 0 GetLastError() = 5 (Ошибка доступа) Как решить ? Собственно в моём коде нет ничего особенного, но раз ошибка доступа то думаю вам пригодится функция с помощью которой я получаю handle.
Добавлено через 12 минут и 55 секунд
Потому что я слоупок ^_^ |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Не знаю. Причина возникновения ERROR_ACCESS_DENIED может быть затейливой. Например, исследуемый процесс является 64-битным (вроде, это не Ваш случай). Или исследуемый процесс может выполняться с более высоким уровнем привилегий. Более того, запрос VirtualQueryEx() может выдавать ERROR_ACCESS_DENIED не на все страницы исследуемого процесса. А у вас в коде есть неоднозначность: Если VirtualQueryEx вернёт 0, то какое значение будет у memInf.RegionSize, на величину которого должна увеличиваться переменная цикла? Неизвестно. Делайте хотя бы
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
feodorv, хорошо сейчас попытаюсь. Я вроде проверял процесс не использует не каких драйверов и других скрытых процессов и ещё одно очень странное наблюдение процесс подключает один модуль и после него уже становится не возможным воздействие на процесс, то есть до определённого момента при загрузке я могу делать с процессом что угодно. После загрузки(тогда когда подргузился уже этот модуль) я пытался что-то сделать с процессом с помощью программы AnVir Task Manager, но мне пишет что в доступе отказано. Как выдать себе максимальные привилегии драйвер писать? Или можно более простыми путями обойтись?
|
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
Процесс вроде x32
![]() Добавлено через 11 минут и 58 секунд При добавлении счётчиков и исправленном коде результат таков: ![]() Попытка считалась успешной если зашло дальше VirtualQueryEx(), как видите похоже тут все регионы имеют максимальные привилегии. |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
Проверял программой AnVir Task Manager и не могу ручаться что она находит все загруженные драйвера, а не только те что прописаны в рестре или где там ещё. |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
Где-то на просторах интернета наткнулся:
Можно ли как-то отследить какая именно из этого списка ? Хотя вангану это STATUS_ACCESS_DENIED процентов так на 99.9% Это сообщение отредактировал(а) Canore - 19.7.2015, 18:40 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Попробуйте Process Explorer. Дважды щёлкните мышкой на исследуемом процессе, в открывшемся окне перейдите на вкладку "Security", посмотрите привилегии процесса. Наверняка SeDebugPrivilege поднята.
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
![]() Собственно показал всё что на той страницу. И да пытался заморозить процесс этой программой ошибка доступа снова Мне уже начинает казаться что они наняли шаманов с бубнами и наложили чары на этот процесс. Добавлено через 9 минут и 44 секунды Провёл сравнение с той же CS:Source различия в двух привилегиях: SeRestorePrivilege, SeManageVolumePrivilege. |
|||
|
||||
| DarthTon |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: 5 Всего: 6 |
У ArcheAge есть античит EasyAntiCheat, драйвер которого при помощи ObCallback убирает у всех открываемых хендлов на процесс права доступа к памяти.
|
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
DarthTon, можно обойти ? Хочу написать такую читалку памяти которую нельзя залочить.
|
|||
|
||||
| DarthTon |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: 5 Всего: 6 |
Более-менее нормальный вариант:
- Написать свой драйвер который будет вручную обходить VAD-дерево и возвращать инфу юзермодному клиенту. Только придется залочить память процесса на время работы. Нестабильные решения: - Изменить права доступа у хендла, добавив нужные - Найти место где хранится хендл ObCallback в драйвере и снять его |
|||
|
||||
| Canore |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 18.7.2015 Репутация: нет Всего: нет |
DarthTon,
Меня устраивает вполне этот вариант так как не придётся лочить память. Как осуществить? Ссылки на msdn если можно или код пожалуйста. Это сообщение отредактировал(а) Canore - 20.7.2015, 14:26 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |