| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Сканирование памяти |
| Автор: Canore 18.7.2015, 13:47 | ||
Есть рабочий код, но он напрочь отказывается работать в игре ArcheAge хотя скажем в CS:Source работает.
Как решить данную проблему? Я пытался уже запускать свою программу от имени админа. |
| Автор: Canore 18.7.2015, 18:14 |
| Никто не знает ?! |
| Автор: feodorv 18.7.2015, 20:20 | ||
| Код, использующий WriteProcessMemory() лично у меня вызывает большие подозрения. Я понимаю, что код урезан для публикации в этом форуме, но этот никак не способствует его пониманию. Почему VirtualAlloc делается в своём процессе, а по выделенному адресу происходит запись уже в какой-то иной процесс? Почему не высвобождается buffer? Я так понимаю, что VirtualQueryEx вернул ноль? В https://msdn.microsoft.com/en-us/library/windows/desktop/aa366907%28v=vs.85%29.aspx на сайте Microsoft сказано, что в этом случае можно вызвать GetLastError(), Вы вызывали? В моём древнем описании этой функции упоминания о GetLastError() нет, но сказано так:
|
| Автор: Canore 18.7.2015, 21:03 | ||||
| feodorv, hProcHormiX1 - это handle моего окна, hProc - handle ArcheAge, ну и собственно здесь происходит по блочное чтение из ArcheAge в мой процесс предварительно выделяя память. Но до VirtualAlloc даже не доходит. Добавлено через 9 минут и 58 секунд При каждом проходе цикла: VirtualQueryEx(...) = 0 GetLastError() = 5 (Ошибка доступа) Как решить ? Собственно в моём коде нет ничего особенного, но раз ошибка доступа то думаю вам пригодится функция с помощью которой я получаю handle.
Добавлено через 12 минут и 55 секунд
Потому что я слоупок ^_^ |
| Автор: Canore 19.7.2015, 04:26 |
| feodorv, хорошо сейчас попытаюсь. Я вроде проверял процесс не использует не каких драйверов и других скрытых процессов и ещё одно очень странное наблюдение процесс подключает один модуль и после него уже становится не возможным воздействие на процесс, то есть до определённого момента при загрузке я могу делать с процессом что угодно. После загрузки(тогда когда подргузился уже этот модуль) я пытался что-то сделать с процессом с помощью программы AnVir Task Manager, но мне пишет что в доступе отказано. Как выдать себе максимальные привилегии драйвер писать? Или можно более простыми путями обойтись? |
| Автор: Canore 19.7.2015, 04:43 |
Процесс вроде x32 ![]() Добавлено через 11 минут и 58 секунд При добавлении счётчиков и исправленном коде результат таков: ![]() Попытка считалась успешной если зашло дальше VirtualQueryEx(), как видите похоже тут все регионы имеют максимальные привилегии. |
| Автор: Canore 19.7.2015, 07:46 | ||
Проверял программой AnVir Task Manager и не могу ручаться что она находит все загруженные драйвера, а не только те что прописаны в рестре или где там ещё. |
| Автор: Canore 19.7.2015, 18:31 | ||
Где-то на просторах интернета наткнулся:
Можно ли как-то отследить какая именно из этого списка ? Хотя вангану это STATUS_ACCESS_DENIED процентов так на 99.9% |
| Автор: feodorv 19.7.2015, 19:42 |
| Попробуйте https://technet.microsoft.com/en-US/bb896653.aspx. Дважды щёлкните мышкой на исследуемом процессе, в открывшемся окне перейдите на вкладку "Security", посмотрите привилегии процесса. Наверняка SeDebugPrivilege поднята. |
| Автор: Canore 20.7.2015, 01:31 |
![]() Собственно показал всё что на той страницу. И да пытался заморозить процесс этой программой ошибка доступа снова Мне уже начинает казаться что они наняли шаманов с бубнами и наложили чары на этот процесс. Добавлено через 9 минут и 44 секунды Провёл сравнение с той же CS:Source различия в двух привилегиях: SeRestorePrivilege, SeManageVolumePrivilege. |
| Автор: DarthTon 20.7.2015, 13:24 |
| У ArcheAge есть античит EasyAntiCheat, драйвер которого при помощи ObCallback убирает у всех открываемых хендлов на процесс права доступа к памяти. |
| Автор: Canore 20.7.2015, 13:58 |
| DarthTon, можно обойти ? Хочу написать такую читалку памяти которую нельзя залочить. |
| Автор: DarthTon 20.7.2015, 14:07 |
| Более-менее нормальный вариант: - Написать свой драйвер который будет вручную обходить VAD-дерево и возвращать инфу юзермодному клиенту. Только придется залочить память процесса на время работы. Нестабильные решения: - Изменить права доступа у хендла, добавив нужные - Найти место где хранится хендл ObCallback в драйвере и снять его |
| Автор: Canore 20.7.2015, 14:26 | ||
DarthTon,
Меня устраивает вполне этот вариант так как не придётся лочить память. Как осуществить? Ссылки на msdn если можно или код пожалуйста. |
| Автор: Canore 20.7.2015, 15:04 | ||
DarthTon,
Если честно не нашёл не чего такого в интернете наверное потому что у ArcheAge HackShield(античит) |
| Автор: DarthTon 20.7.2015, 15:39 | ||
Да, перепутал слегка Пример кода: https://github.com/DarthTon/Blackbone/blob/master/src/BlackBoneDrv/Routines.c#L139-182 |
| Автор: Canore 20.7.2015, 16:01 |
| DarthTon, такой вопрос какие include надо для данного участка кода? |
| Автор: DarthTon 20.7.2015, 16:06 |
| Посмотри там по проекту в целом на гитхабе. Я не помню точно. |
| Автор: Canore 20.7.2015, 16:16 |
| DarthTon, я так понимаю это исходники драйвера? я надеялся обойтись без написания драйвера. |
| Автор: DarthTon 20.7.2015, 16:34 |
| Без драйвера не выйдет в любом случае. |