VBS脚本获取安全标识符SID(Security Identifiers)的方法
一、SID简介
SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户 具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。
一个完整的SID包括:
• 用户和组的安全描述
• 48-bit的ID authority
• 修订版本
• 可变的验证值Variable sub-authority values
例:S-1-5-21-343818398-299502267-839522115-500
参考资料:http://www.5dmail.net/html/2004-8-1/200481181008.htm
二、VBS脚本获取SID
方法一:
strComputer = objNetwork.ComputerName'获取当前的机器名
strUserName=objNetwork.UserName'获取当前的用户名
Set objLocalSam =GetObject("WinNT://" & strComputer & "/" & strUserName)'这里做了修改,scottlocke中默认strUserName为"Administrator"是不保险的
Wscript.echo SIDArray(objLocalSam.objectSID)
Function SIDArray(bar)
' Converts Binary Array into Human readable eg: S-1-5-21-XXXXX-XXXXX-XXXXX-XXX
dim seperator,sid,length
seperator = ""
sid = ""
for length = 1 to lenb(bar)
sid = sid & seperator & right("0" & hex(ascb(midb(bar,length,1))),2)
seperator = ","
Next
SIDArray = sid
SID = Split(SIDArray,",")
' Convert into standard viewable format - little endian format for 4 byte groups
SID1 = (HexToDec(Mid(SID(15), 1, 1))*268435456) + (HexToDec(Mid(SID(15), 2, 2))*16777216) + (HexToDec(Mid(SID(14), 1, 1))*1048576) + (HexToDec(Mid(SID(14), 2, 2))*65536) + (HexToDec(Mid(SID(13), 1, 1))*4096) + (HexToDec(Mid(SID(13), 2, 2))*256) + (HexToDec(Mid(SID(12), 1, 1))*16) + HexToDec(Mid(SID(12), 2, 2))
SID2 = (HexToDec(Mid(SID(19), 1, 1))*268435456) + (HexToDec(Mid(SID(19), 2, 2))*16777216) + (HexToDec(Mid(SID(18), 1, 1))*1048576) + (HexToDec(Mid(SID(18), 2, 2))*65536) + (HexToDec(Mid(SID(17), 1, 1))*4096) + (HexToDec(Mid(SID(17), 2, 2))*256) + (HexToDec(Mid(SID(16), 1, 1))*16) + HexToDec(Mid(SID(16), 2, 2))
SID3 = (HexToDec(Mid(SID(23), 1, 1))*268435456) + (HexToDec(Mid(SID(23), 2, 2))*16777216) + (HexToDec(Mid(SID(22), 1, 1))*1048576) + (HexToDec(Mid(SID(22), 2, 2))*65536) + (HexToDec(Mid(SID(21), 1, 1))*4096) + (HexToDec(Mid(SID(21), 2, 2))*256) + (HexToDec(Mid(SID(20), 1, 1))*16) + HexToDec(Mid(SID(20), 2, 2))
RID = (HexToDec(Mid(SID(27), 1, 1))*268435456) + (HexToDec(Mid(SID(27), 2, 2))*16777216) + (HexToDec(Mid(SID(26), 1, 1))*1048576) + (HexToDec(Mid(SID(26), 2, 2))*65536) + (HexToDec(Mid(SID(25), 1, 1))*4096) + (HexToDec(Mid(SID(25), 2, 2))*256) + (HexToDec(Mid(SID(24), 1, 1))*16) + HexToDec(Mid(SID(24), 2, 2))
' Cheating here by just prepending the S-1-5-21-
SIDArray = "S-1-5-21-" & SID1 & "-" & SID2 & "-" & SID3 & "-" & RID
End Function
Function HexToDec(ByVal sHex)
HexToDec = "" & CLng("&H" & sHex)
End Function
参考资料:http://www.scottlocke.net/vbscript-to-retrieve-sid.html
方法二:
On Error Resume Next
Dim oWMI, oAs, oA, sSid
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
If strUser <> "" Then
Set oAs = oWMI.ExecQuery("Select SID From Win32_Account" & _
" WHERE SIDType=1 AND Name='" & strUser & "'")
For Each oA In oAs
sSid= Mid(oA.SID, InStrRev(oA.SID, "-") + 1)
WScript.Echo "Short SID: " & sSid & " (" & HEX(sSid) & "H)"
Next
Else
Set oAs = oWMI.ExecQuery("Select Name, SID From Win32_Account WHERE SIDType=1")
For Each oA In oAs
WScript.Echo "User: " & oA.Name & _
vbCrLf & vbTab & "SID: " & oA.SID
Next
End If
Set oA = Nothing
Set oAs = Nothing
Set oWMI = Nothing
If Err.Number <> 0 Then
WScript.Echo "Error ocurred: " & Err.Description
Err.Clear
End If
End Function
VBS脚本获取安全标识符SID(Security Identifiers)的方法的更多相关文章
- [转]在 Windows 操作系统中的已知安全标识符(Sid security identifiers)
安全标识符 (SID) 是用于标识安全主体或安全组在 Windows 操作系统中的可变长度的唯一值.常用 Sid 的 Sid 标识普通用户的一组或通用组.跨所有操作系统,它们的值保持不变. 此信息可用 ...
- 【windows 访问控制】六、安全标识符(SID Security Identifiers)
安全标识符(SID Security Identifiers) SID是用来标识安全主体.就是给安全主体一个唯一的ID.用户层面通过用户账户名识别,程序和资源之间通过SID识别. 什么是安全标识符? ...
- vbs 脚本 获取机器名/IP/MAC
strComputer = "."strMesseage="" Set objWMIService = GetObject("winmgmts:{im ...
- 使用Python脚本获取指定格式文件列表的方法
在Python环境下获取指定后缀文件列表的方式. 来源stackoverflow 这里简单以*.txt的作为例子. 使用glob(推荐) import glob, os os.chdir(" ...
- [转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)
对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下. wi ...
- 安全标识符SID技术介绍及查看技巧
说到安全标识符SID就要先说说安全主体(Security Principals),安全主体是一个能够对它分配权限的对象,例如,用户.组和计算机: 对于每一个Windows 200x域中的安全主体都有一 ...
- Vbs脚本经典教材(转)
Vbs脚本经典教材(最全的资料还是MSDN) —为什么要使用Vbs? 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改 ...
- 自动删除超过30天文件的vbs脚本【转发】
利用代码制作自动删除超过30天的文件及文件夹的vbs脚本,定期清理文件夹中长时间无用文件. 1.首先在新建一个文本文档,粘贴代码(代码可通过添加微信公众号vbs_edit(VBS脚本之家)回复018获 ...
- VBS脚本和HTML DOM自动操作网页
VBS脚本和HTML DOM自动操作网页 2016-06-16 10:24 1068人阅读 评论(0) 收藏 举报 分类: Windows(42) 版权声明:本文为博主原创文章,未经博主允许不得转 ...
随机推荐
- python学习day11
目录 SqlAlchemy 外键 SqlAlechemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象 ...
- DDX和DDV——控件与变量之间值的传递
DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实现. 永远不要直接调用这个函数,而是通过UpdateData(TRUE/FALSE)实现控件与 ...
- Struts 2中访问Servlet API的几种方法小结
1.使用ActionContext Action运行期间所用到的数据都保存在ActionContext中,例如session.客户端提交的参数等,ActionContext是Action的一个上下文对 ...
- .Net 第一章笔记
1.深入.NET框架 对象数组 登录和注册 内存级别数据的拎取 1..NET 战略 Java领域:::::SQL Server不会用到 浏览器IE 口号:任何人 在任何地方 使用任何终端,,都可以使用 ...
- [转]AngularJS Cookies Example
AngularJS Cookies Example AngularJS 提供了很好的 $cookie 和 $cookieStore API 用来处理 cookies . 这两个服务都能够很好的发挥HT ...
- Vue.js - day7
使用mui的tab-top-webview-main完成分类滑动栏 兼容问题 和 App.vue 中的 router-link 身上的类名 mui-tab-item 存在兼容性问题,导致tab栏失效, ...
- Cuda入门笔记
最近在学cuda ,找了好久入门的教程,感觉入门这个教程比较好,网上买的书基本都是在掌握基础后才能看懂,所以在这里记录一下.百度文库下载,所以不知道原作者是谁,向其致敬! 文章目录 1. CUDA是什 ...
- show processlist使用介绍
这个命令中最关键的就是state列,mysql列出的状态主要有以下几种: Checking table 正在检查数据表(这是自动的).Closing tables 正在将表中修改的数据刷新到磁盘中,同 ...
- UVA 10572 Black & White (状压DP)
题意:有一个n*m的矩阵,其中部分格子已经涂黑,部分涂白,要求为其他格子也上黑/白色,问有多少种涂法可以满足一下要求: (1)任意2*2的子矩阵不可以同色. (2)所有格子必须上色. (3)只能有两个 ...
- 贴一发STL源码
int my_lower_bound(int size, long long key){ int first = 0, middle; int half, len; len = si ...