黑客帝国II:管理员权限、开机启动项与文件操作

 

权限

在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
);

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值