• Начинающий хакер, спасибо что зашёл к нам! Для полного удобства рекомендуем Вам сразу же зарегистрироваться. Помните, необходимо придумать сложный пароль к своему логину, в котором будут присутствовать цифры, а так же символы. После регистрации вы сможете пользоваться чатом. Так же не забудьте активировать аккаунт через письмо, высланное вам на почту ! Администрация заботится о каждом из Вас...
  • Для просмотра разделов из категории Private Informations & Programms необходимо купить

Запуск кода с правами администратора C#

AngelOfLove

Латентный кодер
Топовый

AngelOfLove

Латентный кодер
Топовый
Регистрация
21 Фев 2017
Сообщения
219
Реакции
74
Баллы
3
Примерчик, взятый из MSDN и немного переделанный:
[HIDE]
Код:
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
using System.Windows.Forms;
 
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, UnmanagedCode = true)]
[assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")]
public class ImpersonationDemo
{
    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
        int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
 
    [DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    private unsafe static extern int FormatMessage(int dwFlags, ref IntPtr lpSource,
        int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, IntPtr* Arguments);
 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public extern static bool CloseHandle(IntPtr handle);
 
    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
        int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);
 
 
 
// тестовое использование
        [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
    public static void Main(string[] args)
    {
        IntPtr tokenHandle = new IntPtr(0);
        IntPtr dupeTokenHandle = new IntPtr(0);
        try
        {
            string userName, domainName;
            // получаем пользовательский токен для определения пользователя, домена, и пароля используется небезопасный LogonUser метод
            //Имя локальной машины может быть использовано для доменного имени, чтобы играть роль пользователя этой машины
            Console.Write("Имя домена, на которое регистрироваться: ");
            domainName = Console.ReadLine();
 
            Console.Write("Имя пользователя, учетной записью которого воспользоваться: ");
            userName = Console.ReadLine();
 
            Console.Write("Пароль: ");
            const int LOGON32_PROVIDER_DEFAULT = 0;
 
            //этот параметр вызывает LogonUser, чтобы создать первичный токен
            const int LOGON32_LOGON_INTERACTIVE = 2;
            tokenHandle = IntPtr.Zero;
 
            //Вызов LogonUser, чтобы получить дескриптор для доступа         
            bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                ref tokenHandle);
 
            Console.WriteLine("LogonUser вызван.");
 
            if (false == returnValue)
            {
                int ret = Marshal.GetLastWin32Error();
                Console.WriteLine("LogonUser failed with error code : {0}", ret);
                throw new System.ComponentModel.Win32Exception(ret);
            }
 
            Console.WriteLine("LogonUser Успешно? " + (returnValue ? "Yes" : "No"));
            Console.WriteLine("Значение токена: " + tokenHandle);
 
            // проверить идентификацию         
            Console.WriteLine("Пользователь до подмены учетной записи: " + WindowsIdentity.GetCurrent().Name);
 
            // Используемый дескриптор токена возвратить LogonUser-у.
            WindowsIdentity newId = new WindowsIdentity(tokenHandle);
            WindowsImpersonationContext impersonatedUser = newId.Impersonate();
 
            // текущий пользователь
            Console.WriteLine("После подмены учетной записи: " + WindowsIdentity.GetCurrent().Name);
 
          
            // выйти из-под учетной записи
           impersonatedUser.Undo();
 
            // текущий пользователь
            Console.WriteLine("После отмены подмены учетной записи: " + WindowsIdentity.GetCurrent().Name);
 
            // освобождаем токены
            if (tokenHandle != IntPtr.Zero)
            CloseHandle(tokenHandle);
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Произошла ошибка: " + ex.Message);         
            Console.ReadLine();
        }     
    }
}
[/HIDE]
 
Сверху Снизу