64,637
社区成员
发帖
与我相关
我的任务
分享
//如何以TrustedInstaller用户权限修改注册表
//通过代码将当前权限提升到TrustedInstaller很麻烦,但是可以通过获取备份还原权限来绕过DACL的监测机制。
#pragma comment(lib,"advapi32")
#include <stdio.h>
#include <string.h>
#include <windows.h>
bool EnablePriviledge(LPCTSTR lpSystemName) {
HANDLE hToken;
TOKEN_PRIVILEGES tkp = {1};
if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken)) {
if (LookupPrivilegeValue(NULL,lpSystemName,&tkp.Privileges[0].Luid)) {
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);
if (GetLastError() != ERROR_SUCCESS) {
CloseHandle(hToken);
return false;
}
}
CloseHandle(hToken);
}
return true;
}
int main() {
bool bRet;
LONG lResult;
bRet = EnablePriviledge(SE_BACKUP_NAME);//这个函数是重点,让当前进程具备备份/还原的特权。
if (bRet) {
bRet = EnablePriviledge(SE_RESTORE_NAME);
if (bRet) {
HKEY hResult = NULL;
DWORD dwDisposition;
lResult = RegCreateKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\\Classes\\CLSID\\{871C5380-42A0-1069-A2EA-08002B30309D}\\shell\\NoAddOns",
0,
NULL,
REG_OPTION_BACKUP_RESTORE,//这个是重点,传入这个参数可以直接忽视KEY_ALL_ACCESS这个参数的作用,直接以备份/还原的特权去操作注册表
KEY_ALL_ACCESS,
NULL,
&hResult,
&dwDisposition);
if (lResult != ERROR_SUCCESS) {
return 3;
}
wchar_t cValue[256] = L"";
lResult = RegSetValueExW(hResult,L"LegacyDisable",NULL,REG_SZ,(LPBYTE)cValue,(wcslen(cValue)+1)*sizeof(wchar_t));
if (lResult != ERROR_SUCCESS) {
return 4;
}
RegCloseKey(hResult);
printf("OK.\n");
return 0;
} else return 2;
} else return 1;
}