вот от нех делать решил написать статью ) если это можно так назвать. Сразу говорю ненадо реплик типа "Да это каждый ламер знает!" "Гавно накодил!" статья была расчитана на тех кто незнает. Ку! Сегодня я вам поведаю о том как можно за несколько десятков минут написать программу с помощью которой мы сможем отследить кто и когда включал ваш комп либо заходил в ваш профиль ). Ну что приступим, писать мы будем на Delphi, поэтому стоит запустить именно его. Создадим новый проект. Для начала поясню принцип работы программы. Значит, наша программа будет запускаться в невидимом для пользователя режиме, а иначе нах тогда она нужна. После ее запуска программа будет записывать в файл некие начальные данные, а именно: User – имя пользователя Start Date – дата включения компьютера или входа в профиль Start Time – время включения компьютера или входа в профиль Ну, вот для начала хватит. После того как эти данные были внесены в наш лог, программа просто висит в процессах и ждет сообщения о ее закрытии. После того как программе приходит такое сообщение она снова обращается к нашему логу и вносит туды следующие данные: Active – время в течении которого был включен компьютер или активен ваш профиль Close – время закрытия профиля или выключения компьютера А вот как будет выглядеть наш лог в целом. Code: <<<<< ------ New Session ----- >>>>> User: Иван Start Date: 29.09.2006 Start Time: 17:39:14 Active: 5:16:35 Close: 22:55:49 <<<<< ------ Close Session ------ >>>>> Ну вот с принципом работы программы мы разобрались, теперь переходим непосредственно к кодингу. Опишем несколько глобальных переменных, которые нам понадобятся в дальнейшем Code: var Form1: TForm1; UserName,result:string; UserNameLen:Dword; buff:TstringList; - буфер для временного хранения данных timestart:Tdatetime; - начало отсчета времени при включении компьютера или входе в профиль пользователя Такс с переменными все понятно. Следующим шагом будет написание процедуры для определения имени пользователя, под которым был совершен вход в систему Code: 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; следующая процедура внесения начальных данных в наш лог файл, назовем ее старт Code: 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 пишем следующий код, который будет записывать конечные данные при закрытии программы. Code: 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'); //сохраним данные еще одна процедура будет отслеживать сообщения которые посылаются нашей программе при выходе их профиля Code: 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 иначе вы не сможете работать с реестром! Code: 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; ну вот наша программа и готова, а да чуть не забыл последний штрих )) скрываем программу от глаз пользователя Code: procedure TForm1.FormActivate(Sender: TObject); begin ShowWindow(Handle,SW_HIDE); ShowWindow(Application.Handle,SW_HIDE); end; ну, вот теперь наша программа невидима, но в процессах она есть! Скрытие программы из процессов потребовало бы включения в программу специально написанной DLL. Осталось только откомпилить, запустить и иногда посматривать логи ) Конечно программа не идеальна и не претендует на такое звание )))) но это лишний повод стремиться к лучшему С вами был NeX aka Neo. Специально для Hackedpro.org
Если такого файла нету програма выругается,тем самым сдаст себя Для этого существует функция fileexists(); Зачем нашей програме форма???Чтобы весило 400кб? )) Этого не достаточно для невидимости.В процессах будет видно TStringList тоже лучше не использовать в програме-шпионе.Пополнение логов сразу может вызвать подозрение у различных програм.Можно "обмануть" такие програмы или с помощью MapViewOfFile либо WinExec ("echo 1 > 1.txt'); ( не факто что прокатит )
gemaglabin я же написал программа не идеальна! написал что в процессах она видна! Просто ты решил показать, что шаришь в программировании, ну молодец
ооо да это ХЕЕЕКККК SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ нихуевый способ загрузки вауууууу я лучше делфи для нахеров почитаю
NeX я просто указал указал на недочеты,не стоит воспринимать все так буквально Всегда должны быть статьи для новичков,все мы с чегото начинали.Я не собираюсь красоваться познаниями в кодинге и "срать" в каментах каждой статьи,чей уровень не дотягивает до Мс-Ремовских ).Но представь,что кому-то придется воспроизвести твою програму и будет не очень хорошо когда он увидит недочеты твоего кода.