-
_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 -
> наступают моменты, когда нужно запускать проги от Админа
и что, часто наступают? -
_koha (01.08.08 19:23) [3]
> easy © (01.08.08 19:19) [2]
>
>
> > наступают моменты, когда нужно запускать проги от Админа
>
> и что, часто наступают?
всегда, когда включаю комп -
KilkennyCat © (01.08.08 19:29) [4]Бедняга...
-
> пароль бессмыслица и по сто раз на дню приходится запускать
а, ну тогда на второй день должен запомнится и автоматом биваться. слепым методом.. -
Zeqfreed © (01.08.08 19:44) [6]И лишь негромким эхом откуда-то издалека донеслись два слога: su-do.
-
> донеслись два слога: 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 -
> [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]Повезло там и сорцы есть, мона изучать, права линусоидные но всеравно покатит :-)
-
> 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 плаить же "нада" ;-) -
> запускать программы от имени "Администратора"
в проводнике на любом exe-нике правой кнопкой мыши, сразу под пунктом "открыть" пункт "запуск от имени". -
> пароль нужно вписывать всегда каждый раз - это такой облом
1 раз запустить far например, под админом, все остальное требующее адмнских прав запускать из него... итого 1 раз в день вписать пароль. или это для тебя тоже облом? -
> _koha (01.08.08 22:01) [19]
>
> > Marser © (01.08.08 21:55) [18]
> > Launcher?
>
>
> - просто по рукой словаря небыло
http://translate.google.com/
bed, кстати - это кровать -
_koha (01.08.08 23:08) [23]
> sniknik © (01.08.08 22:42) [21]
>
> > пароль нужно вписывать всегда каждый раз - это такой облом
> 1 раз запустить far например, под админом, все остальное
> требующее адмнских прав запускать из него... итого 1 раз
> в день вписать пароль. или это для тебя тоже облом?
Это тоже великий блом, а если я этой хренью не люблю пользоваться, так ка весит целый день толька глаза мозолит, так и тянуться руки прихлопнуть их всех. Тем не мене "тоталом" и пользовался, у него всю панель забил значками, в общем достал он меня окончательно, пока не придумал это. Словно камень с экрана свалился. -
> > easy © (01.08.08 20:01) [8]
>
> Гибкостью настройки. И пароль оно умеет сохранять.
>runas ...... /savecred
сохраняет пароль. только вот после этого открывается дыра. -
Zeqfreed © (02.08.08 10:46) [25]> umbra © (01.08.08 23:11) [24]
Оно пароль умеет сохранять на N времени. Без дырок. -
Рамиль © (02.08.08 11:23) [26]Поставь Висту.
Правой кнопкой и без паролей. -
ПЛОВ © (02.08.08 11:36) [27]Мне не хватает только двух программ для полного счастья: запуздыривателя иконки в трей от имени админа, и админской открывалки СД-привода. Жду пока хто-нить напишет...
-
Правильный$Вася (02.08.08 15:14) [28]
> админской открывалки СД-привода.
а закрывалка?!!!