Как мне повысить разрешения? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать редактор памяти, который требует от меня повышения разрешений моей программы. Я просмотрел всю паутину и не нашел ни одного результата в том, что мне нужно. Мне нужен: код, который может повысить мою программу, чтобы она могла редактировать / иметь доступ к памяти процесса, защищенного Windows (например, lsass.exe или svchost.exe). Я знаю, что мне действительно нужно увеличить свои разрешения, так как после попытки WriteProcessMemory() и использования GetLastError() я получаю код ошибки 998 (ERROR_NO_ACCESS).

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Этот вопрос состоит из 3 частей:

  • Запуск от имени администратора

  • Запись в защищенную память

  • Права, необходимые для записи в lsass.exe

Чтобы заставить программу работать от имени администратора, вам просто нужно добавить файл манифеста, который вы можете сделать так: How to add Manifest File Run as Admin

Если вы хотите записать на страницу памяти, у которой нет разрешений на запись, вам необходимо использовать VirtualProtectEx Я использую ее в обертке, например:

PatchEx(HANDLE hProcess, char* dst, char* src, int size)
{
    DWORD oldprotect;
    VirtualProtectEx(hProcess, dst, size, PAGE_EXECUTE_READWRITE, &oldprotect);
    WriteProcessMemory(hProcess, dst, src, size, NULL);
    VirtualProtectEx(hProcess, dst, size, oldprotect, &oldprotect);
}

Как часть безопасности Windows, вы не можете редактировать память процессов, запущенных как SYSTEM, что делает lsass.exe.

Чтобы редактировать lsass.exe, вам необходимо как минимумработает как СИСТЕМА путем захвата токена СИСТЕМЫ. Но поскольку Windows 8.1 lsass.exe - это процесс защищенного процесса (PPL), то это уже не так просто.

Подробнее об этом можно прочитать в Блог Алекса Ионеску

Скорее всего, вам нужно быть в режиме ядра, чтобы связываться с LSASS.

0 голосов
/ 04 октября 2019

ERROR_NO_ACCESS отличается от ERROR_ACCESS_DENIED. Если эта память установлена ​​только для чтения, вам нужно изменить разрешение на нее. ( VirtualProtectEx )

См. " Как получается, что WriteProcessMemory успешно записывает в постоянную память? ".

Одна возможность - доступэто от защищенного процесса, который требует подписи с действительными сертификатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...