Конференция "Прочее" » Разрабатываю новую утилиту AdminLancher
 
  • _koha (01.08.08 19:11) [0]
    Решил поделиться идеей, и обсудить некоторые нюансы.
    Смысл ее в том, чтобы запускать программы от имени "Администратора", так как я постоянно тусуюсь в интернете, то нахожусь всегда под учетной записью пользователя (дабы вирусы всякие не доставали), наступают моменты, когда нужно запускать проги от Админа, "AdminLancher" и пригождается.
    Вы скажете, а чем плох "RunAs"? да тем, что эту пароль нужно вписывать всегда каждый раз - это такой облом, если учесть, что пароль бессмыслица и по сто раз на дню приходится запускать. Не судите строго, но лень двигатель прогресса.

    Сама идея:
    1. Есть сам AdminLancher.exe - это консольное приложение но запускается через контекстное меню windows при открытии файла
      а)получает путь к программе
      б)читает свои параметры из реестра и сохраненный зашифрованный профиль Администратора (имя, пароль)
      в)запускает программу от имени Администратора.
    2. Есть конфигуратор, который
      a)шифрует и сохраняет имя Администратора и пароль в раздел пользователя HKEY_CURRENT_USER\Software\...
        (т.е. другой пользователь вошедший в систему уже не сможет запускать...)
      б)Настраивает контекстное меню windows, чтобы программы можно было запускать через пункт "Run as Admin" подобный "запустить от имени", но при это пароль         писаться не будет.
      Есть проблема:
    3. Касательно самого конфигуратора, если у учетной записи нет прав Админа, то конфигуратор не сможет занести настройки в реестр в ключ exefile/shell/RunAsAdmin/command т.е. необходима поднятие своих прав до уровня Администратора - а это я еще не научился, если подскажете то научусь,
    а так как бы все работает...

    Вот ссылка на действующую программу, для тестирования:
    - запускающий : AdminLancher.exe
    - конфигуратор: LanchConfig.exe
     
    Если будут возникать ошибки или не будет работать, то сообщения из программы сбрасываются в специальную утилиту,
    ее можно скачать здесь:
    http://www.elsetrue.narod.ru/Softfolder/msgloger.7z  

    Код программы AdminLancher.exe:

    program AdminLancher;
    uses
     Windows, SysUtils, Registry, Users, Scrb, MsgLog;
    Type
     PUser = ^TUser;
     TUser = Record
       UserName   : String[20];
       Domain     : String[MAX_COMPUTERNAME_LENGTH];
       UserPass   : String[14];
       UserStatus : String[255];
     end;

    Var
     Reg         : TRegistry;
     Buff        : String;
     BuffSize    : Integer;
     User        : PUser;
     StartupInfo : TStartupInfo;
     ProcessInfo : TProcessInformation;
     AppName     : String;
    Const
     ConfigPath = '\Software\elsetrue\AdminLancher';
     Profile    = 'Profile';
    begin

     if ParamCount = 0 then begin
       SendDebugMsg('Exit: ParamCount = '+IntToStr(ParamCount));
       exit;
     end;

     for BuffSize:=1 to ParamCount do
       AppName:=AppName+ParamStr(BuffSize)+' ';

     SendDebugMsg('ParamCount = '+IntToStr(ParamCount));
     AppName := Trim(AppName);
     SendDebugMsg('AppName = '+AppName);

     try
       Reg:=TRegistry.Create;
       Reg.RootKey:=HKEY_CURRENT_USER;

       if Not Reg.OpenKeyReadOnly(ConfigPath) Then begin
         SendDebugMsg('error: no open key = '+ConfigPath);
         Exit;
       end;

       if Not REg.ValueExists(Profile) Then begin
         SendDebugMsg('error: no value exists = '+Profile);
         Exit;
       end;

       BuffSize:=Reg.GetDataSize(Profile);

       if BuffSize = 0 then begin
         SendDebugMsg('error: GetDataSize = 0');
         Exit;
       end;

       SetLength(Buff,BuffSize);
       FillChar(Buff[1], BuffSize, #0);

       if Reg.ReadBinaryData(Profile,Buff[1],BuffSize) = 0 then begin
         SendDebugMsg('Exet. error: ReadBinaryData readSize = 0');
         Exit;
       end;

     finally
       Reg.Free;
     end;

       //Декодированние прочитанного буффера
       Buff:=DeCode(Buff);

       try
         try
           New(User);
           BuffSize := Sizeof(TUser);
           FillChar(User^, BuffSize, #0);
           Move(Buff[1], User^, BuffSize);

           SendDebugMsg('User Name = '     + User.UserName);
           SendDebugMsg('User Domain = '   + User.Domain);
           SetLength(Buff,Length(User.UserPass));
           FillChar(buff[1],Length(User.UserPass), Ord('*'));
           SendDebugMsg('User Password = ' + Buff);
           SendDebugMsg('User Status = '   + User.UserStatus);

           if Not CreateProcessWithLogonW(
                         PWideChar(StringToWideString(User^.UserName,CP_ACP)),
                         PWideChar(StringToWideString(User^.Domain,CP_ACP)),
                         PWideChar(StringToWideString(User^.UserPass,CP_ACP)), 0, Nil,
                         PWideChar(StringToWideString(AppName,CP_ACP)), 0, Nil, Nil,
                         StartupInfo,
                         ProcessInfo) then
           begin
             SendDebugMsg('CreateProcessWithLogonW = false, GetLastError: '+IntToStr(GetLastError));
             Exit;
           end;

         finally
           Dispose(User);
         end;
       Except
         SendDebugMsg('Critical error: bed copy buffer');
       end;
    end.

  • _koha (01.08.08 19:18) [1]

    > Вот ссылка на действующую программу, для тестирования:
    > - запускающий : AdminLancher.exe
    > - конфигуратор: LanchConfig.exe


    вот ссылка:
    http://webfile.ru/2131244
  • easy © (01.08.08 19:19) [2]

    > наступают моменты, когда нужно запускать проги от Админа

    и что, часто наступают?
  • _koha (01.08.08 19:23) [3]

    > easy ©   (01.08.08 19:19) [2]
    >
    >
    > > наступают моменты, когда нужно запускать проги от Админа
    >
    > и что, часто наступают?

    всегда, когда включаю комп
  • KilkennyCat © (01.08.08 19:29) [4]
    Бедняга...
  • easy © (01.08.08 19:32) [5]

    > пароль бессмыслица и по сто раз на дню приходится запускать

    а, ну тогда на второй день должен запомнится и автоматом биваться. слепым методом..
  • Zeqfreed © (01.08.08 19:44) [6]
    И лишь негромким эхом откуда-то издалека донеслись два слога: su-do.
  • easy © (01.08.08 19:56) [7]

    > _koha (01.08.08 19:11) [0]


    > Zeqfreed © (01.08.08 19:44) [6]


    http://sudown.sourceforge.net/
  • easy © (01.08.08 20:01) [8]

    > донеслись два слога: su-do.

    а чем sudo от runas отличается?
  • Zeqfreed © (01.08.08 20:21) [9]
    > easy ©   (01.08.08 20:01) [8]

    Гибкостью настройки. И пароль оно умеет сохранять.
  • ketmar © (01.08.08 20:24) [10]
    >[8] easy © (2008-08-01 20:01:00)
    >а чем sudo от runas отличается?

    а ты man sudoers скажи и сильно удивись. а потом покажи хотя бы половину таких возможностей в runas.

    ---
    All Your Base Are Belong to Us
  • easy © (01.08.08 20:28) [11]

    > [9][10]

    а че я сказал-то? спросил просто..
  • _koha (01.08.08 20:29) [12]
    Про Su-do конечно же не ухом и не рылом не вел, так бы уже установил, но все равно такую утилиту написал бы, хотя бы для саморазвития. Мне многое еще не понятно, например, как свой процесс поднять в привилегиях повыше и использовать чужие, пытался понять заблудился в этих "токинах" нигде толком не написано, хоть бы талмуд найти по лучше  :-(
  • ketmar © (01.08.08 20:30) [13]
    >[11] easy © (2008-08-01 20:28:00)
    да и мы так… ничо…

    ---
    All Your Base Are Belong to Us
  • _koha (01.08.08 20:37) [14]
    Повезло там и сорцы есть, мона изучать, права линусоидные но всеравно покатит :-)
  • easy © (01.08.08 20:41) [15]

    > ketmar © (01.08.08 20:24) [10]

    если честно - так парит эти маны читать..  у мне и так чтива хватает.. =|
  • ketmar © (01.08.08 20:44) [16]
    >[15] easy © (2008-08-01 20:41:00)
    а я вот избранные места люблю перечитывать…

    ---
    Understanding is not required. Only obedience.
  • Anatoly Podgoretsky © (01.08.08 21:14) [17]
    > ketmar  (01.08.2008 20:44:16)  [16]

    А читать все подряд - это что то с головой.
  • Marser © (01.08.08 21:55) [18]
    Launcher?
  • _koha (01.08.08 22:01) [19]

    > Marser ©   (01.08.08 21:55) [18]
    > Launcher?


    - просто по рукой словаря небыло, за всякие PROMT плаить же "нада" ;-)
 
Конференция "Прочее" » Разрабатываю новую утилиту AdminLancher
Есть новые Нет новых   [134439   +51][b:0][p:0.003]