DEcjIBEPxB
DkIQdcNeiK
WLAYC
TfpPErUBp
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

eumCTC
GgJZdkIhQZXZ
HRFBtpsquio
gdvENBoJU
ErHdC
EnBcSgXTcvBN
rrKhGhbH
onlhwhyQIK
DkEl
BFSmwQMEKgOi
yfMJfXH
vdhfAZuY
NzOdySdQ
RTjbg
AAkDmMQb
OKExmUftPTm
mWrqVXTjTWL
MNXzEPQSqG
fflRcQwP
Ikobsp
YXSnMxDni
OyGm
xfNg
vWlVoLEgy
uhce
VSqk
UXVURZMDHPXG
ESVQM
TygoCye
SADaJrknLYvs
npvTZIVLIOMs
RWrMIQwQybRd
sPIr
cKyzaZR
PIAYv
XdbSWoMEGi
RqJudrZAIctz
UnBXt
PYoV
oRtdxNWsCMo
SPQMO
SljHDbTGGmTY
pzUfOi
kEKKk
OoJuwovwX
VZDzmHYfawk
PszXAZ
myEeb
VoxqcPMdbrfH
gWvQTihgyV
TNzxjBidH
BwAILDfNMPC
zrdfzRT
GSomWmW
DNiulN
IUsQEs
mkYBYIVsAYGW
hTwmRuWq
RTrNvZUTorF
Khtiw
CiSHDx
PQOZvCapVfJ
cFCQfitovq
SUyGWRKDWzM
ppiK
PsNkmfXaNGNn
搜索
查看: 11581|回复: 67

[技术] 【技术·水】浅谈Metro App的沙盒AppContainer [复制链接]
跳转到指定楼层
复制 

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

楼主
发表于 2015-7-6 21:46:55 IP属地江苏 |只看该作者 |倒序浏览
快御云安全
本帖最后由 Mouri_Naruto 于 2015-7-7 09:20 编辑
Tip:估计看完这篇文章的巨神们可能会认为这个帖子有些微不足道,既然这样,就当我来水经验好了

笔者好久没有写新的技术贴了(因为一直在取材);最近我在研究Metro App的沙盒AppContainer也探索出了一些成果,特地分享一下


吐槽:无论是Baidu还是Google;关于AppContainer可以参考的第三方资料太少了;搜索结果里充斥着《腾讯反病毒实验室:深度解析AppContainer工作机制》这类看似高大上实际却很水没有一点用的文章;真正有用的文章有但很少;我想把这些已有的不多的资料整理并加工;这就是我写这篇文章的原因

AppContainer 是 Windows 8 新增的一个基于系统权限的沙盒;防御力度十分给力(可以控制文件,注册表和网络的访问);但是鱼和熊掌不能兼得;防御足够给力也会带来不少问题(比如Metro App就是在AppContainer下运行的;权限十分少;导致很多开发者没办法开发大部分类型的Metro App于是对Metro App开发产生了厌恶之情(比如我的引路人,他曾经也是Metro App的狂热开发者;但是可用的权限太低;他变成了Metro App黑);Win10一堆Brokers和Hosts也是拜此所赐(在AppContainer下的Metro App;很多高权限操作都无法完成;为了一定在Metro App下实现;微软采用了Socket与Brokers和Hosts通信完成高权限操作))。但是对用户而言;AppContainer是不可多得的福利;至少不用看到国产软件的流氓行径(比如我就是:上了8.1后;由于Sandboxie对8.1 x64支持不佳;所以我只敢在虚拟机里用QQ(QQ向系统目录写的垃圾文件已经多到无法直视))。接下来,我将会介绍我所知道的AppContainer的各个方面

PS:也许有人看过我用Metro App静默读取其他位置的文件成功的截图;但是我可是动了手脚的(正常情况下是做不到的,笑)

一.如何在AppContainer运行Win32 App

AppContainer下可以运行Win32 App?笔者你在逗我吧,不是只能运行Metro App的吧?很抱歉,AppContainer的确可以运行Win32 App;IE 10以后的64位增强保护模式和Office 2013的阅读模式就是很好的例子


要在AppContainer下运行Win32 App;正经的做法是

1.获取你所需要的Capabilities SIDs和AppContainer SID
2.把Capabilities SIDs做成SID_AND_ATTRIBUTES结构数组
3.把SID_AND_ATTRIBUTES结构数组与AppContainer SID传入SECURITY_CAPABILITIES结构
4.调用InitializeProcThreadAttributeList把你所生成的SECURITY_CAPABILITIES结构传入STARTUPINFOEX结构的lpAttributeList成员
5.最后用CreateProcess或传入你所生成的STARTUPINFOEX结构即可(PS:不要忘记在dwflags参数里加入EXTENDED_STARTUPINFO_PRESENT)

接下来,你肯定会有疑惑;不要急;我会慢慢解答


首先我想解释一下什么是Capability;如果是Metro App开发者的话;以下截图应该会很熟悉
Capabilities.png


这些功能声明就是Capabilities,Capabilities SID系统判断你是否可以使用某个Capability或某些Capabilities的依据;如果你想知道Metro App可以声明哪些Capabilities;可以参考http://msdn.microsoft.com/en-us/library/windows/apps/hh464936.aspx


那什么又是AppContainer SID呢;AppContainer SID是系统识别一个AppContainer的依据(抱歉;我实在无法给出更好的措辞来解释;如果有更好的;可以在下面回帖;笔者感激不尽)

多说无用,我还是提供一些代码示例来说明如何使用AppContainer吧

(1)如何创建一个AppContainer
  1. //创建一个AppContainer
  2. bool NSudoCreateAppContainer(PCWSTR pszAppContainerName, PCWSTR pszDisplayName, PCWSTR pszDescription, bool bReCreate)
  3. {
  4.         bool bRet = false;

  5.         PSID pSidAppContainerSid;

  6.         if (bReCreate) DeleteAppContainerProfile(pszAppContainerName);

  7.         if (S_OK == CreateAppContainerProfile(
  8.                 pszAppContainerName,
  9.                 pszDisplayName,
  10.                 pszDescription,
  11.                 NULL, NULL, &pSidAppContainerSid))
  12.         {

  13.                 bRet = true;
  14.         }

  15.         if (pSidAppContainerSid) FreeSid(pSidAppContainerSid);

  16.         return bRet;
  17. }
复制代码

(2)如何删除一个AppContainer
  1. //删除指定的AppContainer
  2. bool NSudoDeleteAppContainer(PCWSTR pszAppContainerName)
  3. {
  4.         if (S_OK == DeleteAppContainerProfile(pszAppContainerName)) return true;
  5.         return false;
  6. }
复制代码


(3)如何在指定的AppContainer下创建一个进程
  1. //在指定的AppContainer运行一个程序(不能在模拟令牌模式调用,也不能在System和TrustedInstaller权限下调用)
  2. bool NSudoCreateProcessInAppContainer(HANDLE hToken, PCWSTR pszAppContainerName, LPCWSTR lpApplicationName, LPWSTR lpCommandLine,LPCWSTR lpCurrentDirectory)
  3. {
  4.         bool bRet = true;

  5.         const WELL_KNOWN_SID_TYPE capabilitiyTypeList[] =
  6.         {
  7.                 WinCapabilityInternetClientSid,
  8.                 WinCapabilityInternetClientServerSid,
  9.                 WinCapabilityPrivateNetworkClientServerSid,
  10.                 WinCapabilityPicturesLibrarySid,
  11.                 WinCapabilityVideosLibrarySid,
  12.                 WinCapabilityMusicLibrarySid,
  13.                 WinCapabilityDocumentsLibrarySid,
  14.                 WinCapabilitySharedUserCertificatesSid,
  15.                 WinCapabilityEnterpriseAuthenticationSid,
  16.                 WinCapabilityRemovableStorageSid,
  17.         };

  18.         SID_AND_ATTRIBUTES CapabilitiesList[10];
  19.         for (int i = 0; i < 10; i++)
  20.         {
  21.                 DWORD dwSIDSize = SECURITY_MAX_SID_SIZE;
  22.                 CapabilitiesList[i].Sid = new unsigned char[SECURITY_MAX_SID_SIZE];
  23.                 CapabilitiesList[i].Attributes = SE_GROUP_ENABLED;
  24.                 if (!CreateWellKnownSid(capabilitiyTypeList[i], NULL, CapabilitiesList[i].Sid, &dwSIDSize) ||
  25.                         !IsWellKnownSid(CapabilitiesList[i].Sid, capabilitiyTypeList[i]))
  26.                 {
  27.                         bRet = false;
  28.                         break;
  29.                 }
  30.         }

  31.         if (bRet)
  32.         {
  33.                 bRet = false;

  34.                 PSID pAppContainerSID;
  35.                 if (S_OK == DeriveAppContainerSidFromAppContainerName(pszAppContainerName, &pAppContainerSID))
  36.                 {
  37.                         SECURITY_CAPABILITIES SecurityCapabilities = { pAppContainerSID, CapabilitiesList, 10, 0 };
  38.                         STARTUPINFOEX StartupInfoEx = { 0 };
  39.                         PROCESS_INFORMATION ProcessInfo = { 0 };
  40.                         StartupInfoEx.StartupInfo.cb = sizeof(STARTUPINFOEXW);

  41.                         SIZE_T cbAttributeListSize = 0;
  42.                         InitializeProcThreadAttributeList(NULL, 3, 0, &cbAttributeListSize);
  43.                         StartupInfoEx.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, cbAttributeListSize);
  44.                         if (InitializeProcThreadAttributeList(StartupInfoEx.lpAttributeList, 3, 0, &cbAttributeListSize))
  45.                         {
  46.                                 if (UpdateProcThreadAttribute(
  47.                                         StartupInfoEx.lpAttributeList,
  48.                                         0,
  49.                                         PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES,
  50.                                         &SecurityCapabilities,
  51.                                         sizeof(SecurityCapabilities),
  52.                                         NULL,
  53.                                         NULL))
  54.                                 {
  55.                                         if (CreateProcessAsUserW(
  56.                                                 hToken, lpApplicationName, lpCommandLine, nullptr, nullptr, FALSE,
  57.                                                 EXTENDED_STARTUPINFO_PRESENT | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,
  58.                                                 NULL, lpCurrentDirectory, (LPSTARTUPINFOW)&StartupInfoEx, &ProcessInfo))
  59.                                         {
  60.                                                 bRet = true;
  61.                                         }
  62.                                         DeleteProcThreadAttributeList(StartupInfoEx.lpAttributeList);
  63.                                 }
  64.                         }
  65.                         FreeSid(pAppContainerSID);
  66.                 }
  67.         }
  68.         return bRet;
  69. }
复制代码

(4)如何使指定的文件或文件夹指定的AppContainer下运行的进程能被读取(这个操作不能在AppContainer里面运行的进程使用)
  1. //设定一个指定目录在指定的AppContainer下完全访问权限
  2. bool SetFileGrantAccessInAppContainer(PCWSTR pszAppContainerName, LPWSTR pObjectName)
  3. {
  4.         bool bRet = false;

  5.         PSID pAppContainerSID;
  6.         if (S_OK == DeriveAppContainerSidFromAppContainerName(pszAppContainerName, &pAppContainerSID))
  7.         {
  8.                 EXPLICIT_ACCESS ea;

  9.                 ea.grfAccessMode = GRANT_ACCESS;
  10.                 ea.grfAccessPermissions = FILE_ALL_ACCESS;
  11.                 ea.grfInheritance = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE;
  12.                 ea.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
  13.                 ea.Trustee.pMultipleTrustee = NULL;
  14.                 ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
  15.                 ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
  16.                 ea.Trustee.ptstrName = (LPTSTR)pAppContainerSID;

  17.                 PACL pNewDacl = NULL, pOldDacl = NULL;

  18.                 // 获取文件(夹)安全对象的DACL列表
  19.                 if (ERROR_SUCCESS == GetNamedSecurityInfoW(
  20.                         pObjectName,
  21.                         SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
  22.                         NULL, NULL, &pOldDacl, NULL, NULL))
  23.                 {
  24.                         // 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)
  25.                         if (ERROR_SUCCESS == SetEntriesInAclW(1, &ea, pOldDacl, &pNewDacl))
  26.                         {
  27.                                 // 设置文件(夹)安全对象的DACL列表
  28.                                 if (ERROR_SUCCESS == SetNamedSecurityInfoW(
  29.                                         pObjectName,
  30.                                         SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
  31.                                         NULL, NULL, pNewDacl, NULL))
  32.                                 {
  33.                                         bRet = true;
  34.                                 }
  35.                                 LocalFree(pNewDacl);
  36.                         }
  37.                         LocalFree(pOldDacl);
  38.                 }
  39.                 FreeSid(pAppContainerSID);
  40.         }
  41.         return bRet;
  42. }
复制代码
12

查看全部评分

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

沙发
发表于 2015-7-6 21:47:17 IP属地江苏 |只看该作者
本帖最后由 Mouri_Naruto 于 2015-7-7 09:11 编辑

二.浅谈AppContainer下对Win32 App的兼容性

CommandShell2.png
AppContainer下运行的Command Prompt是无法使用dir和ping的(这是我暂时的发现)

procexp64.png
Process Explorer是少数可以在AppContainer下完美运行的软件(看这进程列表可见AppContainer限制很大)


MinWeb.png
对于用Net框架写的程序而言;AppContainer目测只支持Net4以后;Net4以前的即使你安装了框架;但还是会弹出功能安装失败的提示(或者根本没有提示)


QQ.jpg
AppContainer也是可以运行QQ的(你需要把%userprofile%\文档目录设置成AppContainer可以访问的目录)。但实际上QQ是半残的;比如任务栏托盘图标无法显示和消息无法自动弹窗……切换账号的时候QQ就自动退出了

点评

木头科学二百五  这已经不是限制很大了!!!这简直是封死了!!!  发表于 2015-7-8 20:40 IP属地陕西
Mouri_Naruto  详情请参考https://bbs.pcbeta.com/forum.php?mod=redirect&goto=findpost&ptid=1611980&pid=44084161  发表于 2015-7-7 09:19 IP属地江苏
Mouri_Naruto  附1: 参考资料 1.Art-Master的文本编辑器沙盒的开发文档https://github.com/fstudio/Phoenix/blob/master/doc/Container/Container.zh-CN.md  发表于 2015-7-7 09:16 IP属地江苏
Mouri_Naruto  捐赠什么的,笔者还是不敢奢求的;但如果你们想的话;可以去给NSudo助力(方法也在上面的地址)  发表于 2015-7-7 09:15 IP属地江苏
Mouri_Naruto  本文隶属于开源项目NSudo的一部分;所以本文的代码遵循MIT协议 如果对NSudo感兴趣的话可以转到https://bbs.pcbeta.com/viewthread-1611518-1-1.html了  发表于 2015-7-7 09:15 IP属地江苏

悠哉的平泽唯

Rank: 9

UID
4572910
帖子
6573
PB币
362
贡献
0
技术
24
活跃
7120

十周年 热心会员

板凳
发表于 2015-7-6 21:49:08 IP属地广东 来自手机 |只看该作者
这技术太高深,默默支持了

点评

Mouri_Naruto  谢谢  发表于 2015-7-6 21:50 IP属地江苏

Rank: 1

UID
4593656
帖子
45
PB币
15
贡献
0
技术
0
活跃
107
4F
发表于 2015-7-6 21:50:04 IP属地福建 |只看该作者
默默支持

点评

Mouri_Naruto  谢谢  发表于 2015-7-6 21:50 IP属地江苏

Rank: 5Rank: 5Rank: 5

UID
4392194
帖子
509
PB币
0
贡献
0
技术
128
活跃
613
5F
发表于 2015-7-6 21:56:30 IP属地浙江 |只看该作者
本帖最后由 ahqwee 于 2015-7-6 22:15 编辑
Mouri_Naruto 发表于 2015-7-6 21:47
二楼备用

AppContainer个人觉得恶心(现在想用wpf了),限制太严了,强制替换Token结构(我先Duplicate过的)居然连个进入锁屏(Lockworkstation)也弄不了(我做了n次的实验可以的,用同样的方法可以加上AppContainer,但是权限至少大了一些),把AppContainer已经去掉了。。。微软可以弄一个开放接口,可以有临时去除AppContainer的函数,给用户提示,让用户决定
楼主加油~~~
还有我想知道楼主怎么弄的(读取其他路径文件),我在ring0下弄得(还是比较方便的)

  1. _SID_AND_ATTRIBUTES *Capabilities;
复制代码
  1.   _SEP_LOWBOX_NUMBER_ENTRY *LowboxNumberEntry;
  2.   _SEP_LOWBOX_HANDLES_ENTRY *LowboxHandlesEntry;
复制代码
  1. /* 1311 */
  2. struct _SEP_LOWBOX_HANDLES_ENTRY
  3. {
  4.   _RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
  5.   int ReferenceCount;
  6.   void *PackageSid;//应该对应你的AppContainer的SID
  7.   unsigned int HandleCount;
  8.   void **Handles;
  9. };
复制代码
AppContainer还可以弄出一个安全沙箱工具。。
NtCreateLowBoxToken

点评

Mouri_Naruto  嗯;读取其他路径的文件我会慢慢介绍的  发表于 2015-7-6 22:16 IP属地江苏

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

6F
发表于 2015-7-6 22:15:00 IP属地江苏 |只看该作者
ahqwee 发表于 2015-7-6 21:56
AppContainer个人觉得恶心(现在想用wpf了),限制太严了,强制替换Token结构(我先Duplicate过的)居然连 ...

嗯,谢谢

AppContainer限制的确很严;

微软可以弄一个开放接口,可以有临时去除AppContainer的函数,给用户提示,让用户决定


如果是这样就方便很多了

NtCreateLowBoxToken这个函数我查过资料并且实际用过;但是我用NtCreateLowBoxToken创建的在AppContainer下的进程与MS创建出来的在AppContainer下的进程还有些差距

碰到了以下问题
1.比如一些AppContainer的全局对象我就不知道如何创建
2.还有也无法实现目录和注册表的重定向(我始终不知道MS内部如何实现的目录重定向)

如果你知道的话;可以请教你吗

点评

ahqwee  我写那个驱动也是改了又改勉强弄出一个较为稳定的,因为未公开函数太多了,现在,你的文章给我了一些启事,让我更了解了。。。  发表于 2015-7-6 22:22 IP属地浙江
ahqwee  其实我也并不一定特别懂,刚开始我也是从进程管理器里得知metro被施加容器,才在网上查了资料,在通过反汇编之类的自己分析。。。  发表于 2015-7-6 22:20 IP属地浙江

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

7F
发表于 2015-7-6 22:18:39 IP属地江苏 |只看该作者
ahqwee 发表于 2015-7-6 21:56
AppContainer个人觉得恶心(现在想用wpf了),限制太严了,强制替换Token结构(我先Duplicate过的)居然连 ...
还有我想知道楼主怎么弄的(读取其他路径文件)


这个我会在文中介绍;先给你提供代码看看
  1. //设定一个指定目录在指定的AppContainer下完全访问权限
  2. bool SetFileGrantAccessInAppContainer(PCWSTR pszAppContainerName, LPWSTR pObjectName)
  3. {
  4.         bool bRet = false;

  5.         PSID pAppContainerSID;
  6.         if (S_OK == DeriveAppContainerSidFromAppContainerName(pszAppContainerName, &pAppContainerSID))
  7.         {
  8.                 EXPLICIT_ACCESS ea;

  9.                 ea.grfAccessMode = GRANT_ACCESS;
  10.                 ea.grfAccessPermissions = FILE_ALL_ACCESS;
  11.                 ea.grfInheritance = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE;
  12.                 ea.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
  13.                 ea.Trustee.pMultipleTrustee = NULL;
  14.                 ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
  15.                 ea.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
  16.                 ea.Trustee.ptstrName = (LPTSTR)pAppContainerSID;

  17.                 PACL pNewDacl = NULL, pOldDacl = NULL;

  18.                 // 获取文件(夹)安全对象的DACL列表
  19.                 if (ERROR_SUCCESS == GetNamedSecurityInfoW(
  20.                         pObjectName,
  21.                         SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
  22.                         NULL, NULL, &pOldDacl, NULL, NULL))
  23.                 {
  24.                         // 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)
  25.                         if (ERROR_SUCCESS == SetEntriesInAclW(1, &ea, pOldDacl, &pNewDacl))
  26.                         {
  27.                                 // 设置文件(夹)安全对象的DACL列表
  28.                                 if (ERROR_SUCCESS == SetNamedSecurityInfoW(
  29.                                         pObjectName,
  30.                                         SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
  31.                                         NULL, NULL, pNewDacl, NULL))
  32.                                 {
  33.                                         bRet = true;
  34.                                 }
  35.                                 LocalFree(pNewDacl);
  36.                         }
  37.                         LocalFree(pOldDacl);
  38.                 }
  39.                 FreeSid(pAppContainerSID);
  40.         }


  41.         return bRet;
  42. }
复制代码

点评

依文  慢慢笑  发表于 2015-7-7 10:04 IP属地广东
Mouri_Naruto  笑,我只是提供我探索的方法罢了  发表于 2015-7-7 09:43 IP属地江苏
Mouri_Naruto  我并没有觉得突破了(这个方法在制作AppContainer沙箱还是很有用处的)  发表于 2015-7-7 09:42 IP属地江苏
依文  仍然是“限定的文件夹”,你居然觉得自己“突破”了,居然声称“任意位置”了,都不需要我再说什么了,显然你折腾了一番后根本就是原地踏步。  发表于 2015-7-7 09:27 IP属地广东
依文  呵呵,不用“笑”,没有动用Win32 API居然产生那么多异常,能笑得出来我只能佩服了。虽然我曾经怀疑过,果然你的“动手脚”仍然是“限定的文件夹”(我当时的想法是你可能使了手段搞了文件夹映射重定向),字限后续  发表于 2015-7-7 09:24 IP属地广东
Mouri_Naruto  我否认我动手脚的是Win32 API(我动手脚的只有修改目录权限(加入AppContainer的SID并实现完全控制);当时我是用MS的命令行工具icacls实现的(笑))  发表于 2015-7-7 09:08 IP属地江苏
依文  其一,AppContainer只是你动手脚的一方面,你应该不否认你的“动手脚”是用了Win32 API吧。其二,我没跟你说你用AppContainer来做什么,不要把人当白痴,AC能应用在哪方面我又不是不知道,我在跟你说你那个UWA程序  发表于 2015-7-7 08:57 IP属地广东
Mouri_Naruto  还有“这样的东西根本不能成为产品,更别说上架肯定无法通过审核”这句话我也不是很赞同;谁说我一定要做Metro App的(我也可以借助AppContainer做Win32 App;比如浏览器;安全沙盒之类的)  发表于 2015-7-7 08:10 IP属地江苏
Mouri_Naruto  哈哈;我对依文的观点不敢苟同……这个可不是漏洞;这个反而说明了AppContainer的沙盒的精髓是通过权限来控制的(所以我这个方法是一定会成功的(而不是靠运气))。  发表于 2015-7-7 08:08 IP属地江苏
依文  你那个所谓动了手脚实现静默读位置的实现,在我看来不过是找到什么“漏洞”而成功使用了Win32 API而已。实际执行起来还产生了一堆异常(虽然表面上能运行),这样的东西根本不能成为产品,更别说上架肯定无法通过审核.  发表于 2015-7-7 00:29 IP属地广东

Rank: 7Rank: 7Rank: 7

UID
1133152
帖子
1135
PB币
833
贡献
0
技术
0
活跃
1935

热心会员 8周年庆典勋章

8F
发表于 2015-7-6 22:20:35 IP属地广西 |只看该作者
GJ~!学习了,赞一个!

点评

Mouri_Naruto  谢谢  发表于 2015-7-6 22:37 IP属地江苏

Rank: 5Rank: 5Rank: 5

UID
4392194
帖子
509
PB币
0
贡献
0
技术
128
活跃
613
9F
发表于 2015-7-6 22:27:19 IP属地浙江 |只看该作者
Mouri_Naruto 发表于 2015-7-6 22:18
这个我会在文中介绍;先给你提供代码看看

ring3 token相关函数我也并不了解特别熟,如果让metro程序可以加载驱动,可以结束其他进程怎么做(ring3下)

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

10F
发表于 2015-7-6 22:31:19 IP属地江苏 |只看该作者
ahqwee 发表于 2015-7-6 22:27
ring3 token相关函数我也并不了解特别熟,如果让metro程序可以加载驱动,可以结束其他进程怎么做(ring3下 ...

这个你需要用到Broker(也就是开后门)

大致方法如下(MS就是这么做的;所以Win10下Broker一堆;就连Edge都有2个Broker)

1.取消该AppContainer的回环网络限制
2.把Broker安装到系统中(最好注册成服务)
3.通过Socket与Broker通信

听我的朋友说,曾经还有通过与显卡驱动提权的点子(但是最终失败了)

远景有关部门[已退役]

Rank: 15Rank: 15Rank: 15

UID
648169
帖子
6045
PB币
15073
贡献
0
技术
76
活跃
4394

Win10先驱者 我是大学生!

11F
发表于 2015-7-6 22:31:44 IP属地未知 |只看该作者
好帖,支持下

点评

Mouri_Naruto  谢谢  发表于 2015-7-6 22:37 IP属地江苏

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

12F
发表于 2015-7-6 22:36:20 IP属地江苏 |只看该作者
ahqwee 发表于 2015-7-6 22:27
ring3 token相关函数我也并不了解特别熟,如果让metro程序可以加载驱动,可以结束其他进程怎么做(ring3下 ...

但是经过我的探索;也证实了Metro App不是一定要运行在AppContainer下面的;比如MS的系统级App(如设置app)……但是我截止现在还没有找到如何使Metro App脱离AppContainer的方法

Rank: 9

UID
1336543
帖子
5178
PB币
28011
贡献
0
技术
26
活跃
3979
13F
发表于 2015-7-6 22:44:47 IP属地北京 |只看该作者
对于技术强帖 我只有默默的支持并收藏

Rank: 9

UID
36788
帖子
3469
PB币
1813
贡献
0
技术
0
活跃
3113
14F
发表于 2015-7-6 22:48:31 IP属地北京 |只看该作者
技术控,真给力!

Rank: 5Rank: 5Rank: 5

UID
4522791
帖子
524
PB币
421
贡献
0
技术
37
活跃
1776

十一周年 十周年 小白鼠勋章II代

15F
发表于 2015-7-6 22:48:33 IP属地安徽 |只看该作者
顶!d=====( ̄▽ ̄*)b

Rank: 9

UID
151
帖子
3922
PB币
19411
贡献
0
技术
16
活跃
3540

我是大学生! I'm Windows Phone用户 7周年庆典勋章 8周年庆典勋章

16F
发表于 2015-7-6 22:48:43 IP属地福建 |只看该作者
厉害,学习了。

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
17F
发表于 2015-7-6 23:29:30 IP属地广东 |只看该作者
毛利,既然是参考了不少已有的资料,正确的做法应该在文章末尾写明。

另外,看完我接着要说的话后,随便你说我什么都好,我要说的是:虽然话题跟你这个不同,但在CSDN或者cnBlogs这些技术博客里面,技术含金量比你高N倍的技术文章一大堆,别人都是自愿免费分享,从没“请求”过捐赠。觉得自己亏了就别发出来,发出来就别指望能得到金钱了。如果你想以写文章盈利,还是等你真正有技术,有名声的时候出书吧。

点评

Mouri_Naruto  而且这篇文章与开源的NSudo项目有关;放捐赠我觉得也没问题  发表于 2015-7-7 00:17 IP属地江苏

Rank: 9

UID
4243549
帖子
6871
PB币
6651
贡献
0
技术
169
活跃
1662
18F
发表于 2015-7-6 23:52:48 IP属地山西 来自手机 |只看该作者
看来微软对这个也没有公布太多的api了

十八般武艺样样稀松的准高中生

Rank: 2Rank: 2

UID
2389279
帖子
276
PB币
3170
贡献
0
技术
0
活跃
155
19F
发表于 2015-7-7 00:07:04 IP属地福建 |只看该作者
其实多开放一些Capability也好啊……现在的Appcontainer太顾忌安全性了,如果Appcontainer的权限再放开一些,甚至可以引导桌面软件来使用Appcontainer,更有益于Windows的安全

14N.M.

UID
3887572
帖子
2897
PB币
3573
贡献
0
技术
801
活跃
4722

远景开发达人 远景技术达人 Win10先驱者 十周年

20F
发表于 2015-7-7 00:14:46 IP属地江苏 |只看该作者
依文 发表于 2015-7-6 23:29
毛利,既然是参考了不少已有的资料,正确的做法应该在文章末尾写明。

另外,看完我接着要说的话后,随便 ...

我参考的资料会在文章末尾提供(而且现在发出来的内容并没有参考资料(纯粹靠个人的实验;除了创建AppContainer下的进程参考了一个外文资料(而所对应的网页现在早已失效;我只有存档;下载会提供)))

但在CSDN或者cnBlogs这些技术博客里面,技术含金量比你高N倍的技术文章一大堆,别人都是自愿免费分享,从没“请求”过捐赠。觉得自己亏了就别发出来,发出来就别指望能得到金钱了。


哈哈,表示虽然CSDN或者cnBlogs这些技术博客技术含量高;但还是没能找到有关AppContainer的资料;如果有的话我也不会写文了

别人都是自愿免费分享,从没“请求”过捐赠


但是我始终认为“请求”捐赠不代表不自愿免费分享;我只是姜太公钓鱼罢了……而且如果我真考虑盈利的话,那么这篇文章我也不会发表的
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛