IE保护程序
来源:互联网 发布:excel 数据分列 编辑:程序博客网 时间:2024/06/04 18:33
编了个小程序,该程序使你在浏览网页时被流氓软件,恶意脚本等等攻击的可能性降低,这里主要是使用了受限令牌开启IE浏览器。
1 通过指定禁用安全标示符(deny-only security identifier,deny-only SID)限制访问需要被保护的资源。
2 通过指定受限SID实现额外的访问检查。
3 通过删除权限。
声明:大部分代码来源于网络,我只是进行少部分的修改。
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>
void ProtectIE()
{
HANDLE hCurrentProcessToken = NULL;
HANDLE hProcess = ::GetCurrentProcess();
OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hCurrentProcessToken);
DWORD dwTokenInfoLen = 0;
SID_IDENTIFIER_AUTHORITY sid_Auth;
SID_AND_ATTRIBUTES sid_and_attr;
sid_and_attr.Attributes = 0;
PSID &adminGroupSID = sid_and_attr.Sid;
sid_Auth.Value[0] = 0;
sid_Auth.Value[1] = 0;
sid_Auth.Value[2] = 0;
sid_Auth.Value[3] = 0;
sid_Auth.Value[4] = 0;
sid_Auth.Value[5] = 5;
BOOL bRet = FALSE;
//! 初始化一个 Administrator Group 的 SID , SECURITY_BUILTIN_DOMAIN_RID/*0x20
bRet = ::AllocateAndInitializeSid(&sid_Auth, 0x2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &adminGroupSID);
_ASSERTE(bRet);
//! 获取当前进程 token 的 privileges
bRet = ::GetTokenInformation(hCurrentProcessToken, TokenPrivileges, NULL, 0, &dwTokenInfoLen);
TOKEN_PRIVILEGES *pTokenPrivileges = (TOKEN_PRIVILEGES *)new BYTE[dwTokenInfoLen];
TOKEN_PRIVILEGES *pTokenPrivileges4Delete = (TOKEN_PRIVILEGES *)new BYTE[dwTokenInfoLen];
bRet = ::GetTokenInformation(hCurrentProcessToken, TokenPrivileges, pTokenPrivileges, dwTokenInfoLen, &dwTokenInfoLen);
_ASSERTE(bRet);
PSID userGroupSID;
//! 初始化一个User Group 的 SID
bRet = ::AllocateAndInitializeSid(&sid_Auth, 0x2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_USERS, 0, 0, 0, 0, 0, 0, &userGroupSID);
_ASSERTE(bRet);
DWORD dwLUIDCount = 0;
//! 获取 User Group account 的 privileges
// PLUID pLUIDs = GetAllPrivilegeLUIDs(userGroupSID, dwLUIDCount);
LUID SeChangeNotifyPrivilege = { 0 };
LookupPrivilegeValue(0, // local system
SE_CHANGE_NOTIFY_NAME,
&SeChangeNotifyPrivilege);
dwLUIDCount=1;
///*!
//找到当前进程 token 的有而User Group account没有的 privileges
LUID_AND_ATTRIBUTES *pTokenLUID = pTokenPrivileges->Privileges;
size_t nCnt = 0;
for(size_t i = 0; i < pTokenPrivileges->PrivilegeCount; ++i)
{
bool bFound = false;
for(size_t j = 0; j < dwLUIDCount; ++j)
{
if(memcmp(&(pTokenLUID->Luid), &SeChangeNotifyPrivilege, sizeof(LUID)) == 0)
{
bFound = true;
break;
}
}
if(!bFound)
{
(pTokenPrivileges4Delete->Privileges)[nCnt] = *pTokenLUID;
++nCnt;
}
++pTokenLUID;
}
pTokenPrivileges4Delete->PrivilegeCount = nCnt;
///*!
//此时 pTokenPrivileges4Delete 保存了当前进程 token 有
//而User Group account没有的 privileges
//
HANDLE hRestrictedToken = NULL;
///*!
//CreateRestrictedToken 将删除 pTokenPrivileges4Delete 中有的 privileges
//
//! 注意 sid_and_attr 的 Attributes 被 CreateRestrictedToken 忽略
bRet = ::CreateRestrictedToken(hCurrentProcessToken, 0, 0x1, &sid_and_attr, pTokenPrivileges4Delete->PrivilegeCount,
pTokenPrivileges4Delete->Privileges, 0, NULL, &hRestrictedToken);
_ASSERTE(bRet);
bRet = ::CloseHandle(hCurrentProcessToken);
_ASSERTE(bRet);
//!此时受限的Token已经创建
// CreateProcessAsUser(hRestrictedToken, argv[1]);
STARTUPINFO startupInfo= { sizeof (STARTUPINFO) };
PROCESS_INFORMATION processInfo;
CreateProcessAsUser(hRestrictedToken,
"C://Program Files//Internet Explorer//IEXPLORE.EXE",
NULL, // cmd line
NULL, // process attributes
NULL, // thread attributes
FALSE, // don't inherit handles
NULL, // flags
NULL, // inherit environment
NULL, &startupInfo,
&processInfo);
bRet = ::CloseHandle(hRestrictedToken);
_ASSERTE(bRet);
::FreeSid(userGroupSID);
::FreeSid(adminGroupSID);
//delete [] pLUIDs;
delete [] (BYTE*)pTokenPrivileges;
delete [] (BYTE*)pTokenPrivileges4Delete;
}
main()
{
ProtectIE();
exit(1);
}
- IE保护程序
- 极光ie保护 免费
- IE 8内存保护
- ie保护模式
- IE保护模式
- IE浏览时出现“为了帮助保护你的计算机,Windows已经关闭了此程序”等提示,如何处理?
- 保护.NET程序
- 眼睛保护程序
- 视力保护程序
- 打通IE保护模式(一)介绍保护模式
- Windows Vista IE保护模式深度剖析
- Windows Vista IE保护模式深度剖析
- 微晓ie保护大师 v2.01 绿色
- 什么是IE中的保护模式(protected mode)
- 共享内存和ie保护模式
- Windows Vista IE保护模式深度剖析
- 保护你的程序(转)
- [转载] 如何保护Java程序
- 理解Flex itemRenderer(3)--通信
- FusionCharts在Java中的基本使用(2)
- 46条足以震惊你的生活小常识
- LAMP架设,Linux作主服务器,windows作从服务器(一)
- 重读《COM原理与应用》之一——多层软件结构(13.3)
- IE保护程序
- 《Head First Process-深入浅出流程》连载预告
- BeanUtils.copyProperties() 用法
- IT发展之我的未来生活
- ubuntu 安装emacs全过程(2)
- 学习SqlServer 的宝典!(可以到CSDN搜索打包资源!我已经上传《SQLServer学习宝典》)
- 用mapXtreme Java开发web gis应用 (上)
- 记录远程桌面登录日志
- windows下利用grub硬盘安装linux