Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: олицетворении учётной записи пользователя Добавлено: 12.04.07 00:18  

Автор вопроса:  Георгич
Вопрос в следующем, можно ли при олицетворении учётной записи пользователя, обойти пароль администратора, или если, администратор изменил пароль, то и в программе тоже изменился пароль, так как сказать используй пароль тот, что у администратора

Может быть, есть способы олицетворения учётной записи без пароля администратора?

Конфигурация моей программы такова, что все данные хранятся (для более лучшей безопасности) у администратора в папке его профиля, например: С:\Documents and Settings\1\

Далее, я как администратор, назначаю через файлы настройки, допуски пользователей к данным. При загрузке проги считывается файлы настройки и в зависимости от результата считывания, даётся допуск к данным или нет, соответственно допуск осуществляется через олицетворения учётной записи пользователя

Ниже упрощённыё код, который читается так: если прогу запустил администратор, то
считай текстовый файл по указанному пути, если программу запустил пользователь с учетной записью максим, то считай, тот же файл , а если прогу запустил какой то другой пользователь, то ему доступ запрещён прога не появляется

Переменна, Password = "абвгдеёжзий", так сказать, и есть камень преткновения

Если у кого по этому поводу мысли?

Imports System.Security.Principal
Public Class Form1
    Inherits System.Windows.Forms.Form

    Dim ПутьПрофПольз As String
    Dim Диск As String
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim Личность As WindowsIdentity 'Предоставляет пользователя Windows
        Личность = WindowsIdentity.GetCurrent 'Предоставляет текущего пользователя windows

        Dim Принципиал As New WindowsPrincipal(Личность) 'Осуществляем поверку членства в группе текущего пользователя


        If Принципиал.IsInRole(WindowsBuiltInRole.Administrator) = True Then 'Если текущий пользователь является администратором, то
            Dim ПрофПольз As System.Environment 'Предоставляет текущею среду
            ПутьПрофПольз = ПрофПольз.GetEnvironmentVariables("USERPROFILE").ToString() 'Предоставляет путь к папке профиля пользователя
            If System.IO.File.Exists(ПутьПрофПольз & "\Дерево\Каталоги\СписокКаталогов.txt") Then 'Если файл существует, то
                Dim Чтение As New System.IO.StreamReader(ПутьПрофПольз & "\Дерево\Каталоги\СписокКаталогов.txt") '
                Do While Чтение.Peek() <> -1
                    TextBox1.Text &= (Чтение.ReadLine) & vbNewLine 'Считыаем файл в текстовое поле
                Loop
                Чтение.Close()
            End If


        Else 'Если текущий пользователь не является администратором( пользователь с другой учётной записью ), то

            Dim ПрофПольз As System.Environment 'Предоставляет текущею среду
            Dim UserName, Domain, Password, Имя, ПользовательМаксим As String

            ПользовательМаксим = ПрофПольз.GetEnvironmentVariable("USERNAME").ToString() 'Получаем имя пользователя

            UserName = "1" 'Это имя пользователя администратора
            Domain = "comp" 'Это домен
            Password = "абвгдеёжзий" 'Это пароль администратора, при чем, если пароль неверный или пустой WindowsXP даст ошибку


            Диск = ПрофПольз.GetEnvironmentVariable("SystemDrive").ToString 'Получаем системный диск текущей среды

            ПутьПрофПольз = Диск & "\Documents and Settings\" & UserName 'Назначаем путь к профилю, который будет равен пути как у администратора
            Dim ПутьКспискуКталогоа As String = (ПутьПрофПольз & "\Дерево\Каталоги\СписокКаталогов.txt") 'Назначаем путь к файлу
            If ПользовательМаксим = "максим" Then 'Если текущий пользователь, под именем < максим >, то

                Dim NewIdentity As WindowsIdentity 'Предоставляет пользователя Windows
                NewIdentity = ПолучитьКонкретногоПользователя(UserName, Domain, Password) 'Регистрируем новую личность

                If NewIdentity Is Nothing Then
                    MsgBox("Не правельные данные")


                Else
                    Dim NewContext As WindowsImpersonationContext 'Предоставляет пользователя Windows для Олицетворение
                    NewContext = NewIdentity.Impersonate() 'Олицетворение новой личности

                    If System.IO.File.Exists(ПутьПрофПольз & "\Дерево\Каталоги\СписокКаталогов.txt") Then 'Если файл существует, то
                        Dim Чтение As New System.IO.StreamReader(ПутьПрофПольз & "\Дерево\Каталоги\СписокКаталогов.txt")
                        Do While Чтение.Peek() <> -1

                            TextBox1.Text &= (Чтение.ReadLine) & vbNewLine 'Считыаем файл в текстовое поле

                        Loop
                        Чтение.Close()
                    End If

                    NewContext.Undo() 'Возврат к первоначальной личности

                End If

            Else 'Если текущий пользователь не под именем максим, то

                MsgBox(" Вы не имеете допуск . Вход запрещён ", MsgBoxStyle.Critical, "Вход запрещён")
                If MsgBoxResult.OK Then
                    Exit Sub
                End If
            End If
        End If
    End Sub

    'Эта API – функция получает маркер безопасности конкретного пользователя
    Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer
    Private Enum Logon
        Interactive = 2
        NetworkCleartext = 8
    End Enum
    Private Enum Provider
        [Default] = 0
        WindowsNt35 = 1
        WindowsNt40 = 2
        Windows2000 = 3
    End Enum

    'Эта API – функция дублирует маркер безопасности, чтобы его можно использовать
    Private Declare Auto Function DuplicateToken Lib "advapi32.dll" (ByVal ExsitingTokenHidle As IntPtr, ByVal ImpersonationLevel As Integer, ByRef DuplicateTokenHidle As IntPtr) As Integer
    'Эта функция, вызывает функции Win32 API, возвращает объект WindowsIdentity, соответствующий конкретному пользователю
    Private Function ПолучитьКонкретногоПользователя(ByVal UserName As String, ByVal Domain As String, ByVal Password As String) As WindowsIdentity

        Dim SecurityToken, TokenDuplicate As IntPtr
        If LogonUser(UserName, Domain, Password, Logon.Interactive, Provider.Default, SecurityToken) > 0 Then
            DuplicateToken(SecurityToken, 2, TokenDuplicate)
            Return New WindowsIdentity(TokenDuplicate)

        Else
            Return Nothing
        End If

    End Function

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub
End Class

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 BUMM ®



Вопросов: 8
Ответов: 482
 Профиль | | #1 Добавлено: 13.04.07 22:37
Вопрос в следующем, можно ли при олицетворении учётной записи пользователя, обойти пароль администратора, или если, администратор изменил пароль, то и в программе тоже изменился пароль, так как сказать используй пароль тот, что у администратора

Ну ты даёшь, ты практически в своей проге должен "взламывать" пароль админа, если это может сделать твоя прога, то почему другая не может?
Мне кажется тебе надо пересмотреть подход к проблеме, может ипользовать ролевую аутентификацию винды и задавать права на папку а юзверей разделить в группы и группам давать полномочия?

Ответить

Номер ответа: 2
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #2 Добавлено: 13.04.07 23:50
Цель честно говоря такая, если администратор вздумал поменять свой пароль, то чтобы ему вышло на поминание , что бы он поменял настройки в проге, ведь олицетворение происходит через пароль администратора и все пользователи которым был разрешён допуск, не смогут воспользоваться программой, а если бы это произошло всё автоматом, это было бы вообще вкусно.
Я и спрашиваю, если способы, этого добить?

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 14.04.07 01:20
Пробовать при запуске программы имперсонифицироваться под админа с сохраненным паролем. Если не получилось - матюкнуться. По идее так и должны работать все честные проги, а не чего-то отслеживать и чего-то взламывать.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам