Я пытаюсь сделать программу для редактирования памяти.В настоящее время я пытаюсь изменить память 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;
}