Тотальный контроль на Delphi (статья)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Utochka, 30 Sep 2006.

  1. Utochka

    Utochka Elder - Старейшина

    Joined:
    21 Dec 2005
    Messages:
    495
    Likes Received:
    106
    Reputations:
    54
    вот от нех делать решил написать статью ) если это можно так назвать.
    Сразу говорю ненадо реплик типа "Да это каждый ламер знает!" "Гавно накодил!" статья была расчитана на тех кто незнает.

    Ку! Сегодня я вам поведаю о том как можно за несколько десятков минут написать программу с помощью которой мы сможем отследить кто и когда включал ваш комп либо заходил в ваш профиль ).



    Ну что приступим, писать мы будем на 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
     
    3 people like this.
  2. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Если такого файла нету програма выругается,тем самым сдаст себя

    Для этого существует функция fileexists();

    Зачем нашей програме форма???Чтобы весило 400кб? ))

    Этого не достаточно для невидимости.В процессах будет видно

    TStringList тоже лучше не использовать в програме-шпионе.Пополнение логов сразу может вызвать подозрение у различных програм.Можно "обмануть" такие програмы или с помощью MapViewOfFile либо WinExec ("echo 1 > 1.txt'); ( не факто что прокатит )
     
  3. Utochka

    Utochka Elder - Старейшина

    Joined:
    21 Dec 2005
    Messages:
    495
    Likes Received:
    106
    Reputations:
    54
    gemaglabin я же написал программа не идеальна! написал что в процессах она видна!
    Просто ты решил показать, что шаришь в программировании, ну молодец
     
    1 person likes this.
  4. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    ооо да это ХЕЕЕКККК SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ нихуевый способ загрузки вауууууу я лучше делфи для нахеров почитаю
     
    2 people like this.
  5. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    NeX я просто указал указал на недочеты,не стоит воспринимать все так буквально

    Всегда должны быть статьи для новичков,все мы с чегото начинали.Я не собираюсь красоваться познаниями в кодинге и "срать" в каментах каждой статьи,чей уровень не дотягивает до Мс-Ремовских ).Но представь,что кому-то придется воспроизвести твою програму и будет не очень хорошо когда он увидит недочеты твоего кода.
     
    1 person likes this.