权限
在Windows下,点开任何一个文件的属性,都会出现如上的权限。
在 Windows 操作系统中,"权限" 是一个核心的安全概念。主要目的在于确定哪些用户可以对一些文件、文件夹执行哪些操作。权限的设计目的是保护系统的资源,防止未授权的访问或修改。
权限类型
完全控制:包括上述所有权限,还允许更改权限设置和拥有文件或文件夹。
修改:读取与写入。
读取和执行:允许读取并运行文件。
读取:允许查看文件或文件夹的内容。
写入:允许修改文件或文件夹。
特殊权限:其他。
权限用户
Administrators 管理员
System 系统
User 用户
Guest 游客
VC“夺取”管理员权限
静态“夺取”
【项目】--【属性】--【链接器】--【清单文件】--【UAC执行级别】
动态夺取
//关键函数:ShellExecuteEx
BOOL ShellExecuteExA(
[in, out] SHELLEXECUTEINFOA *pExecInfo
);
BOOL ShellExecuteExW(
[in, out] SHELLEXECUTEINFOW *pExecInfo
);
#ifdef UNICODE
#define ShellExecuteEx ShellExecuteExA
#else
#define ShellExecuteEx ShellExecuteExW
#endif
#include <shellapi.h>
int main(){
SHELLEXECUTEINFOW Info;
memset(&Info, 0, sizeof(Info));
Info.lpFile = L"Program Name";
Info.cbSize = sizeof(Info);
Info.lpVerb = _T("runas");
/*
edit:启动编辑器并打开文档进行编辑。 如果 lpFile 不是文档文件,则函数将失败。
explore:浏览 lpFile 指定的文件夹。
find:启动从指定目录开始的搜索。
open:打开 由 lpFile 参数指定的文件。 该文件可以是可执行文件、文档文件或文件夹。
print:打印 由 lpFile 指定的文档文件。 如果 lpFile 不是文档文件,则函数将失败。
properties:显示文件或文件夹的属性。
runas:以管理员身份启动应用程序。 用户帐户控制 (UAC) 将提示用户同意运行提升的应用程序, 或者输入用于运行应用程序的管理员帐户的凭据。
*/
Info.fMask = SEE_MASK_NO_CONSOLE;
Info.nShow = SW_SHOWDEFAULT;
ShellExecuteExW(&Info);
}
开机启动项
通过【任务管理器】--【启动】,我们可以有效地观察所有开机启动项。
上N期:C++ 注册表操作与开机启动项
文件操作(黑客版)
先送大家一句话:无论Windows封装多少层,底层API永远是最好用的。
文件加密
创建新秘钥
DWORD SetUserFileEncryptionKey(
[in] PENCRYPTION_CERTIFICATE pEncryptionCertificate
);
typedef struct _ENCRYPTION_CERTIFICATE {
DWORD cbTotalLength;
SID *pUserSid;
PEFS_CERTIFICATE_BLOB pCertBlob;
} ENCRYPTION_CERTIFICATE, *PENCRYPTION_CERTIFICATE;
typedef struct _CERTIFICATE_BLOB {
DWORD dwCertEncodingType;
DWORD cbData;
PBYTE pbData;
} EFS_CERTIFICATE_BLOB, *PEFS_CERTIFICATE_BLOB;
//特别注明:SID(安全标识符是用于唯一标识用户或组的可变长度结构)
typedef struct _SID {
BYTE Revision;
BYTE SubAuthorityCount;
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
#if ...
DWORD *SubAuthority[];
#else
DWORD SubAuthority[ANYSIZE_ARRAY];
#endif
} SID, *PISID;
将用户密钥添加到加密文件
DWORD AddUsersToEncryptedFile(
[in] LPCWSTR lpFileName,
[in] PENCRYPTION_CERTIFICATE_LIST pEncryptionCertificates
);
typedef struct _ENCRYPTION_CERTIFICATE_LIST {
DWORD nUsers;
PENCRYPTION_CERTIFICATE *pUsers;
} ENCRYPTION_CERTIFICATE_LIST, *PENCRYPTION_CERTIFICATE_LIST;
查询加密文件的用户密钥
DWORD QueryUsersOnEncryptedFile(
[in] LPCWSTR lpFileName,
[out] PENCRYPTION_CERTIFICATE_HASH_LIST *pUsers
);
typedef struct _ENCRYPTION_CERTIFICATE_HASH_LIST {
DWORD nCert_Hash;
PENCRYPTION_CERTIFICATE_HASH *pUsers;
} ENCRYPTION_CERTIFICATE_HASH_LIST, *PENCRYPTION_CERTIFICATE_HASH_LIST;
typedef struct _ENCRYPTION_CERTIFICATE_HASH {
DWORD cbTotalLength;
SID *pUserSid;
PEFS_HASH_BLOB pHash;
LPWSTR lpDisplayInformation;
} ENCRYPTION_CERTIFICATE_HASH, *PENCRYPTION_CERTIFICATE_HASH;
typedef struct _EFS_HASH_BLOB {
DWORD cbData;
PBYTE pbData;
} EFS_HASH_BLOB, *PEFS_HASH_BLOB;
从加密文件中删除用户密钥
DWORD RemoveUsersFromEncryptedFile(
[in] LPCWSTR lpFileName,
[in] PENCRYPTION_CERTIFICATE_HASH_LIST pHashes
);
加密文件读写
DWORD OpenEncryptedFileRawA(
[in] LPCSTR lpFileName,
[in] ULONG ulFlags,
[out] PVOID *pvContext
);
DWORD ReadEncryptedFileRaw(
[in] PFE_EXPORT_FUNC pfExportCallback,
[in, optional] PVOID pvCallbackContext,
[in] PVOID pvContext
);
DWORD WriteEncryptedFileRaw(
[in] PFE_IMPORT_FUNC pfImportCallback,
[in, optional] PVOID pvCallbackContext,
[in] PVOID pvContext
);
void CloseEncryptedFileRaw(
[in] PVOID pvContext
);
锁定与解除文件
BOOL LockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToLockLow,
[in] DWORD nNumberOfBytesToLockHigh
);
BOOL UnlockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToUnlockLow,
[in] DWORD nNumberOfBytesToUnlockHigh
);