第2版的lsasecur包括第1版LocalSecurityAuthority的所有功能,並添加了一些新特性(帶*星號的爲新功能):
讀取或設置文件、服務、註冊表、共享文件、內核對象的安全信息。
提升進程權限,模擬SYSTEM登錄,或創建任意用戶場景下的用戶進程。
添加、刪除用戶或用戶組。
讀取、設置用戶或用戶組的各種信息。
添加、刪除用戶權限。
存取私有數據,或讀取系統安全數據庫中的各種密碼。
*驗證文件散列、數字簽名。
*利用空白U盤備份用戶密碼。
*備份及導入“安全描述符”。
*截取程序異常,並恢復程序運行。
*調用DPAPI加解密數據。
*自定義次數的進程實例。
*模擬進程文件路徑。
還有很多,非常多。
函數列表:
1:; ___SeReleaseSemaphoreInstance
2:; ___SeSEHDefaultHandler
3:; __SeCertCloseStore
4:; __SeCertFindCertificateInStore
5:; __SeCertGetNameText
6:; __SeCertNameToText
7:; __SeCreateSemaphore
8:; __SeCreateThread
9:; __SeDecodeObject
10:; __SeFileTimeToSystemTime
11:; __SeGetExitCodeThread
12:; __SeGetProcAddress
13:; __SeLongPtrToBytes
14:; __SeMsgClose
15:; __SeMsgGetParam
16:; __SeQueryObject
17:; __SeReleaseSemaphore
18:; __SeSEHDefaultHandler
19:; __SeStringToBytesA
20:; __SeTreeResetSecurityCallBack
21:; __SeVirtualAlloc
22:; __SeWaitForObject
23:; _SeAddAccessAllowedAceEx
24:; _SeAddAccessDeniedAceEx
25:; _SeAddAccountRight
26:; _SeAddAce
27:; _SeAddAuditAccessAceEx
28:; _SeAddLocalGroupMembers
29:; _SeAdjustTokenPrivs
30:; _SeAllocAndInitSid
31:; _SeAllocGUID
32:; _SeAllocLUID
33:; _SeApiBufferFree
34:; _SeAreAllAccessesGranted
35:; _SeAreAnyAccessesGranted
36:; _SeBackupPassword
37:; _SeBinaryToString
38:; _SeCheckTokenMembership
39:; _SeCipherDes16
40:; _SeCloseHandle
41:; _SeClosePolicy
42:; _SeCompareUserRight
43:; _SeCompareUserRightEx
44:; _SeConvertDesiredAccess
45:; _SeConvertSDToStringSD
46:; _SeConvertSidToSSid
47:; _SeConvertSSidToSid
48:; _SeConvertStringSDToSD
49:; _SeCopyMemory
50:; _SeCopySid
51:; _SeCreateAce
52:; _SeCreateBuffer
53:; _SeCreateLocalGroup
54:; _SeCreateLocalUser
55:; _SeCreateLogonProcess
56:; _SeCreateSecret
57:; _SeCreateSecurityDescriptor
58:; _SeCreateServiceSid
59:; _SeCreateSystemProcess
60:; _SeCreateUserProcess
61:; _SeCreateWellKnownSid
62:; _SeDeleteAce
63:; _SeDeleteLocalGroup
64:; _SeDeleteLocalGroupMembers
65:; _SeDeleteLocalUser
66:; _SeDuplicateAcl
67:; _SeDuplicateHandle
68:; _SeDuplicateSD
69:; _SeDuplicateToken
70:; _SeDuplicateTokenEx
71:; _SeEnumAccountRights
72:; _SeEnumAccounts
73:; _SeEnumAccountsWithUserRight
74:; _SeEnumEntriesFromAcl
75:; _SeEnumExplicitEntriesFromAcl
76:; _SeEnumInheritedEntriesFromAcl
77:; _SeEnumLocalGroupMembers
78:; _SeEnumLocalGroups
79:; _SeEnumLocalUsers
80:; _SeEnumPrivateData
81:; _SeEnumPrivs
82:; _SeEnumTokenGroups
83:; _SeEnumTokenPrivs
84:; _SeEnumUserLocalGroups
85:; _SeEnumWellKnownSids
86:; _SeEqualDomainSid
87:; _SeEqualPrefixSid
88:; _SeEqualSid
89:; _SeEqualToken
90:; _SeExportSecurityDescriptor
91:; _SeFillMemory
92:; _SeFormatMsg
93:; _SeFreeMemory
94:; _SeFreeSid
95:; _SeGenRandom
96:; _SeGetAce
97:; _SeGetAceDetails
98:; _SeGetAclInformation
99:; _SeGetEffectiveRightsFromAcl
100:; _SeGetFileSecurity
101:; _SeGetFileSignature
102:; _SeGetInheritanceSource
103:; _SeGetKernelObjectSecurity
104:; _SeGetLengthSid
105:; _SeGetLocalGroupInfo
106:; _SeGetLocalUserInfo
107:; _SeGetNamedAccessRights
108:; _SeGetNamedSecurityInfo
109:; _SeGetRegKeySecurity
110:; _SeGetSecretSecurity
111:; _SeGetSecurityDescriptorControl
112:; _SeGetSecurityDescriptorDacl
113:; _SeGetSecurityDescriptorGroup
114:; _SeGetSecurityDescriptorLength
115:; _SeGetSecurityDescriptorOwner
116:; _SeGetSecurityDescriptorSacl
117:; _SeGetSecurityInfo
118:; _SeGetServiceSecurity
119:; _SeGetShareObjectDacl
120:; _SeGetSidIdentifierAuthority
121:; _SeGetSidSubAuthority
122:; _SeGetSidSubAuthorityCount
123:; _SeGetTokenInformation
124:; _SeGetTokenType
125:; _SeGetTokenUser
126:; _SeGetUserAccountSid
127:; _SeGetUserModals
128:; _SeGetUserName
129:; _SeGetWellKnownAccountSid
130:; _SeHashCertificate
131:; _SeHashFile
132:; _SeHeapAlloc
133:; _SeHeapFree
134:; _SeHeapSize
135:; _SeImpersonateLoggedOnUser
136:; _SeImpersonateProcessPath
137:; _SeImpersonateSystemContext
138:; _SeImportSecurityDescriptor
139:; _SeInitAcl
140:; _SeInitBufferW
141:; _SeInitExplicitEntries
142:; _SeInitObjAttrib
143:; _SeInitSecurityDescriptor
144:; _SeInitSecurityQos
145:; _SeInitSid
146:; _SeIsEntryInheritable
147:; _SeIsPrivEnabled
148:; _SeIsPrivsEnabled
149:; _SeIsSelfRelativeSD
150:; _SeIsTokenRestricted
151:; _SeIsUserAdmin
152:; _SeIsUserAdminEx
153:; _SeIsValidAce
154:; _SeIsValidAcl
155:; _SeIsValidHandle
156:; _SeIsValidSecurityDescriptor
157:; _SeIsValidSid
158:; _SeIsWellKnownSid
159:; _SeLastError
160:; _SeLocalFree
161:; _SeLogonUser
162:; _SeLongToDWORD
163:; _SeLookupAccountName
164:; _SeLookupAccountSid
165:; _SeLookupPrivDescription
166:; _SeLookupPrivName
167:; _SeLookupPrivsFromDacl
168:; _SeLookupPrivValue
169:; _SeMakeAbsoluteSD
170:; _SeMakeSelfRelativeSD
171:; _SeNetBuffer
172:; _SeNetBufferSize
173:; _SeOpenPolicy
174:; _SeOpenProcess
175:; _SeOpenProcessToken
176:; _SeOpenRegKey
177:; _SeOpenSecret
178:; _SeOpenService
179:; _SeOpenUserBrowser
180:; _SePolicyQueryAuditEvent
181:; _SePolicyQueryInformation
182:; _SePolicyQueryLsaServerRole
183:; _SePolicySetAuditEvent
184:; _SePolicySetInformation
185:; _SeProcessHeap
186:; _SeProtectData
187:; _SeProtectMemory
188:; _SeProtectObjectFromClose
189:; _SeQuerySecret
190:; _SeReadBytes
191:; _SeReadProcessMemory
192:; _SeRegisterExceptionHandler
193:; _SeRegisterMemoryNotify
194:; _SeRemoveAccountRight
195:; _SeRetrievePrivateData
196:; _SeRevertToSelf
197:; _SeSetEntriesInAcl
198:; _SeSetEntriesInAcl1
199:; _SeSetEntriesOrder
200:; _SeSetFileInheritSecurity
201:; _SeSetFileSecurity
202:; _SeSetKernelObjectSecurity
203:; _SeSetLocalUserInfo
204:; _SeSetNamedSecurityInfo
205:; _SeSetRegKeySecurity
206:; _SeSetSecret
207:; _SeSetSecurityDescriptorControl
208:; _SeSetSecurityDescriptorDacl
209:; _SeSetSecurityDescriptorGroup
210:; _SeSetSecurityDescriptorOwner
211:; _SeSetSecurityDescriptorSacl
212:; _SeSetSecurityInfo
213:; _SeSetServiceSecurity
214:; _SeSetShareObjectDacl
215:; _SeSetTokenInformation
216:; _SeSetUserModals
217:; _SeSingletonEx
218:; _SeStorePrivateData
219:; _SeStringToBinary
220:; _SeTreeResetNamedSecurityInfo
221:; _SeTreeResetNamedSecurityInfoEx
222:; _SeUnprotectData
223:; _SeUnprotectMemory
224:; _SeWriteBytes
225:; _SeWriteProcessMemory
226:; snts
所有_Se*開頭的函數都是用戶可以調用的函數,除此之外,其他以__Se*或___Se*開頭的函數僅爲內部調用。
幾個函數的示例:
1、_SeBackupPassword - 利用空白U盤備份用戶密碼。
#include <lsasecur.au3>
_SeBackupPassword(0, 0) ; 同步方式備份用戶密碼。
$hBackupThread = _SeBackupPassword(0, 1) ; 異步方式。
; 等待備份完成。
If $hBackupThread Then
While __SeWaitForObject($hBackupThread, 2)
WEnd
EndIf
2、_SeCreateSystemProcess - 創建系統級進程(僅支持於32位系統)。
#include <lsasecur.au3>
$sFilePath = @WindowsDir & "\regedit.exe"
$tProcess = _SeCreateSystemProcess($sFilePath)
MsgBox(0, _SeFormatMsg(), _
"Process Id: " & DllStructGetData($tProcess, "ProcessId") & @CRLF & _
"Thread Id: " & DllStructGetData($tProcess, "ThreadId"))
3、_SeGetFileSignature - 獲取文件簽名。
#include <lsasecur.au3>
$sFilePath = @AutoItExe & "\..\Au3Info.exe"
$aSignature = _SeGetFileSignature($sFilePath)
_ArrayDisplay($aSignature, _SeFormatMsg())
4、_SeHashFile - 驗證文件散列。
#include <lsasecur.au3>
$sOutput = "File path: %s\n\nCRC: %s\nMD5: %s\nMD4: %s\nSHA1: %s"
$sFilePath = @SystemDir & "\cmd.exe"
$bCrc = _SeHashFile($sFilePath, $SE_CALG_CRC32)
$bMd5 = _SeHashFile($sFilePath, $SE_CALG_MD5)
$bMd4 = _SeHashFile($sFilePath, $SE_CALG_MD4)
$bSha = _SeHashFile($sFilePath, $SE_CALG_SHA)
MsgBox(0, "Hashing", StringFormat($sOutput, $sFilePath, $bCrc, $bMd5, $bMd4, $bSha))
5、_SeImpersonateProcessPath - 模擬構造進程路徑。
#include <lsasecur.au3>
MsgBox(0, "_SeImpersonateProcessPath", "@AutoItExe=" & @AutoItExe)
_SeImpersonateProcessPath(@WindowsDir & "\regedit.exe")
MsgBox(0, "_SeImpersonateProcessPath", "@AutoItExe=" & @AutoItExe)
6、_SeImpersonateSystemContext - 模擬SYSTEM用戶登錄。
#include <lsasecur.au3>
$hToken = _SeImpersonateSystemContext()
MsgBox(0, "@UserName=" & @UserName, _SeFormatMsg("_SeImpersonateSystemContext"))
; Do something with SYSTEM privilege.
_SeCloseHandle($hToken)
_SeRevertToSelf()
MsgBox(0, "@UserName=" & @UserName, _SeFormatMsg("_SeRevertToSelf"))
7、_SeRegisterExceptionHandler - 截取程序異常,並恢復程序運行。
#include <lsasecur.au3>
Const $INVALID_POINTER = -1 ; 非法指針,
$sOutput = "異常代碼: 0x%08X\n異常地址: 0x%08X\n自定義參數: 0x%08X"
; 註冊“安全函數”,程序發生異常時,將跳轉到這個函數中。
$hSafeAddress = DllCallBackRegister("_ExceptionCallBack", "none", "ptr")
; 獲取“安全函數”地址。
$pSafeAddress = DllCallBackGetPtr($hSafeAddress)
; 註冊異常處理。
_SeRegisterExceptionHandler( _
$pSafeAddress, _ ; 安全函數的地址。
7, _ ; 安全函數的自定義參數,可以是任意32位值。
Default, _ ; 安全函數的返回地址,默認爲Kernel32.ExitProcess函數。
1) ; Kernel32.ExitProcess函數的參數。
; 創建非法結構。
$tTest = DllStructCreate("dword Test", $INVALID_POINTER)
; 下面這句將會引發一個“內存不能爲‘read’”的異常。
DllStructGetData($tTest, "Test")
Func _ExceptionCallBack($pSafeAddress)
Local $tSafeAddress = DllStructCreate($tagSE_SAFE_ADDRESS, $pSafeAddress)
Local $tRecord = DllStructCreate($tagSE_EXCEPTION_RECORD, DllStructGetData($tSafeAddress, "ExceptionRecord"))
MsgBox(48, "發生異常", StringFormat($sOutput, _
DllStructGetData($tRecord, "ExceptionCode"), _ ; 異常代碼
DllStructGetData($tRecord, "ExceptionAddress"), _ ; 發生異常的地址
DllStructGetData($tSafeAddress, "Parameter"))) ; 用戶自定義參數
; 本函數執行完成之後,程序流程將會跳轉到Kernel32.ExitProcess函數中,_
; 並非以AutoIt的常規方式退出進程,所以要先清除托盤圖標。
Opt("TrayIconHide", 1)
EndFunc ;==>_ExceptionCallBack
8、_SeSingletonEx - 允許同時運行自定義次數的進程實例。
#include <lsasecur.au3>
Const $iMaxInstances = 2
$sOutput = "本程序已有%u個實例同時運行,請先退出其中1個或多個再運行此程序。"
If _SeSingletonEx($iMaxInstances) Then
MsgBox(48, "", StringFormat($sOutput, $iMaxInstances))
Exit
EndIf
MsgBox(0, "", "Bingo~")
9、_SeGetFileSecurity - 獲取NTFS文件的安全信息。
#include <lsasecur.au3>
$sFilePath = @SystemDir & "\cmd.exe"
$iSecur = BitOR($SE_INFO_OWNER, $SE_INFO_DACL)
$pSecur = _SeGetFileSecurity($sFilePath, $iSecur)
If ($pSecur = 0) Then
MsgBox(48, "Error", _SeFormatMsg("_SeGetFileSecurity"))
Exit
EndIf
$pOwner = _SeGetSecurityDescriptorOwner($pSecur)
$pDacl = _SeGetSecurityDescriptorDacl($pSecur)
$sOwner = _SeLookupAccountSid($pOwner)
$aList = _SeEnumEntriesFromAcl($pDacl)
_ArrayDisplay($aList, $sOwner)
10、本地用戶、用戶組相關的函數。
#include <lsasecur.au3>
; 枚舉本地用戶。
$aLocalUser = _SeEnumLocalUsers()
_ArrayDisplay($aLocalUser, _SeFormatMsg("_SeEnumLocalUsers"))
; 枚舉本地用戶組。
$aLocalGroup = _SeEnumLocalGroups()
_ArrayDisplay($aLocalGroup, _SeFormatMsg("_SeEnumLocalGroups"))
; 枚舉內置賬戶。
$aWellKnown = _SeEnumWellKnownSids()
_ArrayDisplay($aWellKnown, _SeFormatMsg("_SeEnumWellKnownSids"))
; 枚舉當前用戶所屬的用戶組。
$aUserGroup = _SeEnumUserLocalGroups(@UserName)
_ArrayDisplay($aUserGroup, _SeFormatMsg("_SeEnumUserLocalGroups"))
; 枚舉管理員組的成員。
$aMembers = _SeEnumLocalGroupMembers("Administrators")
_ArrayDisplay($aMembers, _SeFormatMsg("_SeEnumLocalGroupMembers"))
12/29/2010更新:
新添加函數:
_SeAccessCheck ; 訪問檢查
_SeCreateRestrictedToken ; 創建受限令牌
_SeCreateToken ; 創建訪問令牌(Powerful)
_SeCreateTrustedToken ; 創建受信任令牌
_SeCreateUntrustedToken ; 創建不受信任的訪問令牌
_SeEnumTokenRestrictedSids ; 枚舉令牌中的受限SID
_SeGetUserObjectSecurity ; 獲取用戶對象(桌面、工作站)的安全信息
_SeRestoreExceptionHandler ; 使用默認的異常函數處理程序異常
_SeSetThreadToken ; 設置線程令牌
_SeImpersonateNamedPipeClient ; 模擬命名管道客戶端場景
_SeImpersonateSelf ; 模擬自身場景
_SeImpersonateThread ; 模擬線程場景
_SeIsTokenUntrusted ; 判斷令牌是否爲非信任令牌
_SeSetUserObjectSecurity ; 設置用戶對象的安全信息
_SeCreateSecurProcess ; 創建擁有高安全級別的進程
04/24/2011更新:
新添加函數:
_SeVerifySystemCall ; 驗證系統函數的調用
_SeCompleteVerifySystemCall ; 完成驗證系統函數的調用
_SeCreateAdminToken ; 創建管理員權限令牌(可以指定任意用戶名)
_SeCreateUserProcessEx ; 創建用戶進程(可以指定父進程)
_SeImpersonateContext ; 模擬進程場景