如何编辑Windows受保护进程lsass.exe的内存?
绕过LSASS进程内存保护的方法及代码问题分析
首先,你遇到的核心问题是LSASS.exe是Windows的Protected Process Light (PPL) 进程——从Windows 8开始,微软就给LSASS加上了这个保护机制,目的是防止恶意程序窃取系统凭证。普通的用户态进程哪怕拥有管理员权限和SE_DEBUG特权,都无法对PPL进程执行OpenProcess(带写入权限)或者WriteProcessMemory这类操作,因为PPL会强制限制只有同等或更高保护级别的进程才能访问它。
先说说你代码里的几个关键问题(虽不是核心原因,但会导致你无法定位错误)
- 缺少API调用的返回值检查:
- 针对PPL进程,
OpenProcess会直接返回NULL,但你没有判断hProcess是否有效就继续执行写入操作,根本不知道这一步已经失败。 WriteProcessMemory的返回值也未做检查,无法确认写入是否成功。
- 针对PPL进程,
- 字符串传递错误:
在DeleteString函数中,你传递的&writing是std::string对象本身的地址,而非字符串内容的地址,应该改用writing.c_str()来获取字符串的指针。 - 地址类型不匹配64位系统:
你用DWORD存储进程ID和内存地址,但DWORD是32位类型,64位系统下LSASS的内存地址是64位的,用DWORD存储会截断地址,导致无效。建议改用DWORD_PTR或uintptr_t这类适配架构的类型。
修改后的DeleteString示例(添加错误检查):
void DeleteString(DWORD processID, DWORD_PTR address) { HANDLE hProcess = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, processID); if (hProcess == NULL) { cout << "OpenProcess failed. Error: " << GetLastError() << endl; return; } const string writing = "Vape Lite.exe"; SIZE_T bytesWritten; BOOL success = WriteProcessMemory(hProcess, (LPVOID)address, writing.c_str(), writing.size(), &bytesWritten); if (!success) { cout << "WriteProcessMemory failed. Error: " << GetLastError() << endl; } else { cout << "Successfully wrote " << bytesWritten << " bytes." << endl; } CloseHandle(hProcess); }
绕过PPL保护编辑LSASS内存的可行方法
以下方法按合法性和实用性排序:
临时禁用LSASS的PPL保护(合法,但降低系统安全性):
通过修改注册表关闭PPL保护:- 打开注册表编辑器,定位到
HKLM\SYSTEM\CurrentControlSet\Control\Lsa - 创建或修改
DWORD类型键RunAsPPL,设置值为0 - 重启系统
重启后LSASS不再是PPL进程,你的管理员权限代码就能正常编辑其内存。调试完成后建议改回1恢复保护,避免系统暴露在风险中。
- 打开注册表编辑器,定位到
使用内核级驱动(合法,适合开发场景):
PPL限制仅在用户态生效,内核模式下可直接绕过。你可以编写内核驱动,通过MmCopyVirtualMemory这类内核API读写LSASS内存。注意:- 内核驱动需要签名,Windows 10及以上版本需EV代码签名证书,或开启测试模式(
bcdedit /set testsigning on)加载未签名驱动。 - 编写内核驱动需要熟悉Windows内核编程,复杂度高于用户态代码。
- 内核驱动需要签名,Windows 10及以上版本需EV代码签名证书,或开启测试模式(
启用内核调试(合法,适合调试场景):
若仅为调试目的,可开启系统内核调试模式:- 管理员权限运行命令提示符,执行
bcdedit /debug on后重启系统 - 用WinDbg等内核调试器连接系统,即可在调试器中读写LSASS内存。但这种方式无法通过用户态代码直接操作,仅支持调试器交互。
- 管理员权限运行命令提示符,执行
利用漏洞(不推荐,非法且不安全):
部分内核漏洞可让普通进程提权并绕过PPL保护,但这类漏洞会被微软快速修复,且使用漏洞可能违反系统使用条款甚至触犯法律,强烈不推荐。
内容的提问来源于stack exchange,提问作者EpicDreamz Plays




