вот от нех делать решил написать статью ) если это можно так назвать.
Сразу говорю ненадо реплик типа "Да это каждый ламер знает!" "Гавно накодил!" статья была расчитана на тех кто незнает.
Ку! Сегодня я вам поведаю о том как можно за несколько десятков минут написать программу с помощью которой мы сможем отследить кто и когда включал ваш комп либо заходил в ваш профиль ).
Ну что приступим, писать мы будем на Delphi, поэтому стоит запустить именно его.
Создадим новый проект.
Для начала поясню принцип работы программы. Значит, наша программа будет запускаться в невидимом для пользователя режиме, а иначе нах тогда она нужна. После ее запуска программа будет записывать в файл некие начальные данные, а именно:
User – имя пользователя
Start Date – дата включения компьютера или входа в профиль
Start Time – время включения компьютера или входа в профиль
Ну, вот для начала хватит. После того как эти данные были внесены в наш лог, программа просто висит в процессах и ждет сообщения о ее закрытии. После того как программе приходит такое сообщение она снова обращается к нашему логу и вносит туды следующие данные:
Active – время в течении которого был включен компьютер или активен ваш профиль
Close – время закрытия профиля или выключения компьютера
А вот как будет выглядеть наш лог в целом.
Код:
<<<<< ------ New Session ----- >>>>>
User: Иван
Start Date: 29.09.2006
Start Time: 17:39:14
Active: 5:16:35
Close: 22:55:49
<<<<< ------ Close Session ------ >>>>>
Ну вот с принципом работы программы мы разобрались, теперь переходим непосредственно к кодингу.
Опишем несколько глобальных переменных, которые нам понадобятся в дальнейшем
Код:
var
Form1: TForm1;
UserName,result:string;
UserNameLen:Dword;
buff:TstringList; - буфер для временного хранения данных
timestart:Tdatetime; - начало отсчета времени при включении компьютера или
входе в профиль пользователя
Такс с переменными все понятно. Следующим шагом будет написание процедуры для определения имени пользователя, под которым был совершен вход в систему
Код:
procedure user_name;
begin
UserNameLen:=255;
SetLength(userName, UserNameLen);
if GetUserName(PChar(UserName), UserNameLen) then
Result:=Copy(UserName,1,UserNameLen - 1)
else
Result:='Nobody'; //пользователь не определен поэтому Nobody (нет тела =)
end;
следующая процедура внесения начальных данных в наш лог файл, назовем ее старт
Код:
procedure start;
begin
buff:=Tstringlist.Create; //создадим стринглист
buff.LoadFromFile(‘C:\stat.txt'); //открываем файл
buff.Add('<<<<< ------ New Session ----- >>>>>'); //запишем строку в файл
buff.add('User: '+result); // запишем имя пользователя
buff.Add('Start Date: '+datetostr(date)); // запишем дату открытия профиля либо включения компа
buff.add('Start Time: '+timetostr(timestart)); // время открытия профиля либо включения компа
buff.SaveToFile(‘C:stat.txt'); // сохраним данные в файл
buff.Free;
end;
ну, вот теперь начальные данные у нас есть.
По событию формы FormClose пишем следующий код, который будет записывать конечные данные при закрытии программы.
Код:
buff:=Tstringlist.Create;
buff.LoadFromFile('C:\stat.txt');
buff.Add('Active: '+timetostr(Time-Timestart)); //время работы компьютера либо профиля
buff.add('Close: '+timetostr(Time)); // время выключения компьютера или выхода из профиля
buff.Add('<<<<< ------ Close Session ------ >>>>>');
buff.add(''); // для удобства чтения лога
buff.SaveToFile('C:\stat.txt'); //сохраним данные
еще одна процедура будет отслеживать сообщения которые посылаются нашей программе при выходе их профиля
Код:
procedure ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do;
end;
//нашу прогу закрывают
procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
begin
buff:=Tstringlist.Create;
buff.LoadFromFile('C:\stat.txt');
buff.Add('Active: '+timetostr(Time-Timestart));
buff.add('Close: '+timetostr(Time));
buff.Add('<<<<< ------ Close Session ------ >>>>>');
buff.add('');
buff.SaveToFile('C:\stat.txt');
Msg.Result:=1;
end;
все функции мы написали, осталось только дать им управления, это мы сделаем по созданию нашей формы (FormCreate), ну и за одно пропишем нашу программу в автозапуск иначе она будет бесполезной )
Не забудьте внести модуль registry в раздел uses иначе вы не сможете работать с реестром!
Код:
procedure TForm1.FormCreate(Sender: TObject);
var reg:Treginifile;
begin
reg:=TRegIniFile.Create('');
reg.RootKey:=HKEY_Current_User;
reg.WriteString('SOFTWARE\Microsoft\Windows\CurrentVersion\Run\','Sec_bot',application.ExeName); //прописываем в автозапуск
reg.Destroy;
timestart:=time; //присваиваем время запуска
user_name; //определяем имя пользователя
start; //заносим начальные данные в файл
end;
ну вот наша программа и готова, а да чуть не забыл последний штрих )) скрываем программу от глаз пользователя
Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
ShowWindow(Handle,SW_HIDE);
ShowWindow(Application.Handle,SW_HIDE);
end;
ну, вот теперь наша программа невидима, но в процессах она есть! Скрытие программы из процессов потребовало бы включения в программу специально написанной DLL.
Осталось только откомпилить, запустить и иногда посматривать логи ) Конечно программа не идеальна и не претендует на такое звание )))) но это лишний повод стремиться к лучшему
С вами был NeX aka Neo.
Специально для Hackedpro.org