1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer

Смена паролей локальных администраторов (скрипт)

Предлагаю вашему вниманию скрипт, который можно запускать при загрузке компьютера при помощи Group Policy. Данный скрипт генерирует 12-тизначный сложный пароль, включающий символы, цифры, а также буквы разных регистров. После этого сгенерированный пароль шифруется по заданному ключу и в зашифрованном виде записывается в файл (путь до файла надо поменять в тексте скрипта). Имя файла формируется по принципу <Имя компьютера>-<Имя учетной записи администратора>.txt.

Для того чтобы расшифровать записанный в файл пароль, необходимо воспользоваться вторым скриптом.

 

---------------------------------------------------- начало скрипта №1 ---------------------------------------------------

Option Explicit
Dim Count, strRdm, intRdm, WshShell, Password, oEnv, strComputer, objNetwork, objComputerName, objwmi, qry, Admin, objUser, logfile, oFsOutput, oTextOutput, forAppending, servList, oFsInput
set WshShell = CreateObject("WScript.Shell")

'Получаем 12-тизначный сложный пароль.

Dim strRandom

Call Main

Sub Main
Dim intCount, intSelect, intSelect1
strRandom = ""
Randomize()
For intCount = 1 to 12
intSelect = Chr(Int(3 * Rnd() + 49))
Select Case intSelect
Case "1"
intSelect1 = Chr(Int(10 * Rnd() + 48))
Case "2"
intSelect1 = Chr(Int(26 * Rnd() + 65))
Case "3"
intSelect1 = Chr(Int(26 * Rnd() + 97))
End Select
strRandom = strRandom & intSelect1
Next
If myRegEx(strRandom) Then Call Main
End Sub

'Проверяем, что ни в конце кода, ни в его начале нет цифр.

Function myRegEx(str)
Dim regex
Set regex = New RegExp
With regex
.Pattern = "^[0-9]|[0-9]$"
.IgnoreCase = True
End With
myRegEx = regex.Test(str)
End Function

strComputer="."
Set objUser=GetObject("WinNT://" & strComputer & "/" & GetAdminName & ",user")
objUser.SetPassword (strRandom)
objUser.SetInfo

'зашифровываем полученный ранее произвольный код.

Dim temp, key

temp = WshShell.ExpandEnvironmentStrings(strRandom)
key = "huasHIYhkasdho1"

temp = Encrypt(temp,key)

Function encrypt(Str, key)
Dim lenKey, KeyPos, LenStr, x, Newstr

Newstr = ""
lenKey = Len(key)
KeyPos = 1
LenStr = Len(Str)
str = StrReverse(str)
For x = 1 To LenStr
Newstr = Newstr & chr(asc(Mid(str,x,1)) + Asc(Mid(key,KeyPos,1)))
KeyPos = keypos+1
If KeyPos > lenKey Then KeyPos = 1
Next
encrypt = Newstr
End Function

'в следующей строке указывается путь до логов.

logFile = "C:\" & WshShell.ExpandEnvironmentStrings("%Computername%") & "-" & GetAdminName &".txt"
set oFsOutput = createobject("scripting.filesystemobject")
set oTextOutput = oFsOutput.OpenTextFile(logFile, 8, true)
OTextOutput.writeLine(temp)
oTextOutput.close

Function GetAdminName

Set objNetwork = CreateObject("Wscript.Network") '

получаем имя текущего компьютера
objComputerName = objNetwork.ComputerName
Set objwmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & objComputerName)

qry = "SELECT * FROM Win32_Account where Domain = '" & cstr(objComputerName) & "'"

For Each Admin in objwmi.ExecQuery(qry)
if (left(admin.sid, 6) = "S-1-5-" and right(admin.sid,4) = "-500") then '

ищем SID админа
GetAdminName = admin.name
end if
next
end Function

---------------------------------------------- конец скрипта №1 ----------------------------------------------------

--------------------------------------------- начало скрипта №2 ---------------------------------------------------

Option Explicit

Dim temp, key, filesys, readfile, contents, logfile, oTextOutput, oFsOutput

set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile("C:\COMPNAME-ADMINNAME.txt", 1, false)

contents = readfile.ReadLine
temp = contents
readfile.close

key = "huasHIYhkasdho1"

temp = Decrypt(temp,key)

Function Decrypt(str,key)
Dim lenKey, KeyPos, LenStr, x, Newstr

Newstr = ""
lenKey = Len(key)
KeyPos = 1
LenStr = Len(Str)

str=StrReverse(str)
For x = LenStr To 1 Step -1
Newstr = Newstr & chr(asc(Mid(str,x,1)) - Asc(Mid(key,KeyPos,1)))
KeyPos = KeyPos+1
If KeyPos > lenKey Then KeyPos = 1
Next
Newstr=StrReverse(Newstr)
Decrypt = Newstr
End Function

'в следующей строке укажите путь до расшифрованного файла

logFile = "С:\COMPNAME-ADMINNAME-decrypt.txt"
set oFsOutput = createobject("scripting.filesystemobject")
set oTextOutput = oFsOutput.OpenTextFile(logFile, 8, true)
OTextOutput.writeLine(temp)
oTextOutput.close

----------------------------------------- конец скрипта №2 -----------------------------------------------

 

Добавить комментарий