Как редактировать защищенную память процесса? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь сделать программу для редактирования памяти.В настоящее время я пытаюсь изменить память lsass.exe.Тем не менее, я не вижу никаких изменений, означающих, что мой код не успешно редактирует память.lsass.exe - это защищенный процесс Windows, поэтому он не позволяет мне редактировать его память.Есть ли способ обойти это?(Я знаю, что мой код редактирует память так же, как он редактировал память explorer.exe)

Я пытался работать от имени администратора, работая на x64 и x84, не повезло.Я также пытался получить разрешения отладки с помощью кода, по-прежнему не работает.Можно ли как-нибудь редактировать память защищенного процесса?

#include <iostream>
#include <string>
#include <windows.h>
#include <tlhelp32.h>

using namespace std;
bool GetDebugPrivilege();
DWORD FindProcessId(string process);
void DeleteString(DWORD processID, DWORD address);
void ScanAndDelete(DWORD processID, string ScanAndDelete);

bool GetDebugPrivilege()
{
    TOKEN_PRIVILEGES TokenPriv;
    LUID luid;
    HANDLE ThisToken;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &ThisToken))
    {
        if (GetLastError() == ERROR_NO_TOKEN)
        {
            ImpersonateSelf(SecurityImpersonation);
            if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &ThisToken))
                return FALSE;
        }
    }

    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
        return FALSE;

    TokenPriv.PrivilegeCount = 1;
    TokenPriv.Privileges[0].Luid = luid;
    TokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges(ThisToken, false, &TokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL);

    CloseHandle(ThisToken);

    if (GetLastError() != ERROR_SUCCESS)
        return false;

    return true;
}
int main()
{
    GetDebugPrivilege();
    Sleep(100);
    DeleteString(FindProcessId("lsass.exe"), 0x7fffc41fab58);
}


void DeleteString(DWORD processID, DWORD address)
{
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
    string writing = "Vape Lite.exe";
    auto writingSize = writing.size();
    WriteProcessMemory(hProcess, (LPVOID)address, &writing, writingSize, NULL);
    CloseHandle(hProcess);
}



void ScanAndDelete(DWORD processID, string ScanAndDelete)
{
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);

}

DWORD FindProcessId(string process)
{
    wstring processName(process.begin(), process.end());
    PROCESSENTRY32 processInfo;
    processInfo.dwSize = sizeof(processInfo);

    HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (processesSnapshot == INVALID_HANDLE_VALUE)
        return 0;

    Process32First(processesSnapshot, &processInfo);
    if (!processName.compare(processInfo.szExeFile))
    {
        CloseHandle(processesSnapshot);
        return processInfo.th32ProcessID;
    }

    while (Process32Next(processesSnapshot, &processInfo))
    {
        if (!processName.compare(processInfo.szExeFile))
        {
            CloseHandle(processesSnapshot);
            return processInfo.th32ProcessID;
        }
    }

    CloseHandle(processesSnapshot);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...