之前看到通过这种方法启动的程序在process exproler里显示是这样。
有很多restricted的sid,还有除了SeChangeNotifyPrivilege以外的权限都被限制了,不能关机啥的。
就怀疑是restricted-tokens的问题,要用createRestrictedToken()里面的SidsToRestrict属性和PrivilegesToDelete来创建新令牌,然后调用createProcessAsuser()函数来引用这个令牌,就能限制一些SID,但这样有个问题,就是如果你和LogonUserA()函数结合起来会失败,因为带自定义token的情况下切换用户需要SE_INCREASE_QUOTA_NAME的权限。
而且这么多sid限制了感觉有点麻烦,无奈之下去逆向了windows的runas程序。
发现程序的导入表里面没有createRestrictedToken,但有createProcessAsuser
进一步看了一下,他使用SaferCreateLevel和SaferConputerTokenfromLevel生成令牌。