[релиз] IcqMod DLL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 28 Nov 2009.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    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 описаны константы и прототипы функций. Кому нужно разберутся.

    Подробное описание функций? констант и структур
    Code:
      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");
    --------------------------------
    Code:
      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 классе работы с аськой. Так что сильно прошу не пинать ))

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

    (С) SLESH 2009
     

    Attached Files:

    19 people like this.
  2. Irdis

    Irdis Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    слеш крут!
     
    #2 Irdis, 28 Nov 2009
    Last edited: 28 Nov 2009
  3. antiWM

    antiWM New Member

    Joined:
    7 Sep 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    забили))) большой респект, спс.
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще DLL написана на Си но спокойно компилится и как СИ код и как С++ так что норм.
    А на делфи в основном демки делаю потому, что когда тестирую какуюто DLL то побыстрому в дельфе это делаю.

    Вот пример на Си как работать через прокси
    Code:
    	WSADATA ws;
    	ICQ_CLIENT cl;
    	char UIN[10];
    	char msg[4096];
    	int msglen;
    	PROXY_INFO proxy;
    
    	WSAStartup(0x202, &ws);	
    
    	proxy.ProxyType = PROXY_TYPE_SOCKS_5;
    	proxy.ProxyPort = 1222;
    	proxy.ProxyIp = inet_addr("127.0.0.1");
    
    	ICQConnect(&cl, "login.icq.com", 5190, "UIN", "PASS", &proxy);
    	ICQSendMsg(&cl, "454042", "hello slesh");
    	
    	printf("Conn ok\n");
    	ICQAuth(&cl, "454042", 1);
    // матаем цикл пока есть коннект
    	while (cl.status == ICQ_CLIENT_STATUS_CONNECTED)
    	{
    		if (ICQReadMsg(&cl, UIN, msg, &msglen)) // если есть сообщение
    		{
    			printf("UIN=%s\nMSG=%s\n", UIN, msg); // выведем сообщение
    			ICQSendMsg(&cl, UIN, "Yes"); //  пошлем слово YES
    		}
    		Sleep(1); // маленькая пауза чтобы не вешать систему
    	}
    	
    	printf("finish");
    	getch();
    
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    в демке работы в С++/С просто привел как юзать функции. т.е. не проверял результат выполнения их

    Насчет исходников - я уже описал. Выкладывать в паблике както не охото. Потому что потом быстро они будут встроены во всякие другие проги. А так придется таскать DLL и юзать ограниченный набор функций.

    Имея на руках эти исходники и исходники компонента TICQClient можно в легкую расширить возможности.
     
    #5 slesh, 28 Nov 2009
    Last edited: 28 Nov 2009
    1 person likes this.
  6. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    slesh, крутой релиз, ты мастер! Спасибо тебе!
    Количество ICQ спамеров и флудеров явно теперь увеличиться.

     
  7. ~Shapaev~

    ~Shapaev~ Member

    Joined:
    24 Oct 2009
    Messages:
    29
    Likes Received:
    7
    Reputations:
    0
    Офигенный релиз , большой тебе респект и + конечно.
    100%

    И насчет исходников , может будешь давать людям с репутацией ? Мало ли возможно кто - то захочет расширить функционал.
     
    #7 ~Shapaev~, 28 Nov 2009
    Last edited: 28 Nov 2009
  8. ErrorNeo

    ErrorNeo Elder - Старейшина

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    кроме слеша у нас таких на форуме все равно нет.*

    слэш крут...
     
  9. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    slesh откровенно сказать то мне не оч понравился релиз этой dll, просто спамеры за...колебали, ты хорошо подумал прежде чем давать код в руки публики? Может стоит убрать по крайней мере функцию запроса авторизации?

    Я бы сделал 100-500 мс. зачем лишний раз прогонять цикл, с такой микро паузой.
     
    #9 t04, 28 Nov 2009
    Last edited: 28 Nov 2009
  10. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    отлично, буду СИ изучать вспомню а пока + за старания! Хотя я уверен такому профессионалу это не многова стоило..
     
  11. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Воистину малвар!!!

    Обязательно будем юзать! Теперь ICQ клиент для Делфи нервно курит в сторонке ))
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 ErrorNeo
    C чего ты это взял? Есть люди, но все они заняты другими вещами и проектами в другой области )

    2 t04
    Ну вообще от спама можно защититься, но влом ) настрой антиспам бота или непринимать запрос на авторизацию.
    Паузу в 1 миллисекунду - это для теста просто поставил. На реале она будет 16 миллисекунд минимум.
    А вообще я думал над тем что выкладывать или нет и именно по этой причине выложил без исходников. По этому первое же изменение протокола и пахать не будет и не исправишь без исходников.

    Также может с играть такой факт: Когда спам очень сильно увеличится, то это подтолкнет владельцев аськи на введение какойнить защиты или на смену протокола.

    2 =Zeus=
    Смотря для чего. делфовый конпонент довольно классный, удобный и функциональный. Но он большой. Смотря для чего юзать. Моя либа в основном тока для спама, флуда и других узкоспециализированных задач. Ну или для тех вещей где важен небольшой размер или нужно писать не на Делфи.

    Моя подпись чуть в другую тематику направлена.
    Там я имел в виду, что пока будут вредоносные проги, то всегда будет работа у админов, специалистов по защите инфы, всякого обслуживающего персонала, который будет переустанавливать проги после вирей, у программистов работа, по созданию антивирусных прог. )
     
    #12 slesh, 28 Nov 2009
    Last edited: 28 Nov 2009
    1 person likes this.
  13. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Так я это понял :)

    А вообще очень хорошо, что появилась твоя либа. Я вот писал программу, которая должна была отправлять IP на асю. Пришлось юзать VCL из-за компонента. В результате 300 кб веса )).
    К слову того же самого ICQClient так много версий, потому что часто меняют протокол. Его автор говорил, что это всего 2 строчки изменить, а столько проблем. И он хотел выпустить (а может уже) програмку для автосмены кода, чтоб каждый раз не выкладывать весь обновленный компонент. Так что еще 1 плюс - у тебя всего 1 длл, просто перекомпилить и выложить, если протокол сменят ))
     
  14. t04

    t04 Elder - Старейшина

    Joined:
    10 Jan 2007
    Messages:
    137
    Likes Received:
    40
    Reputations:
    8
    Не думаю так как он хорошо документирован и поддерживается "сообществом" если можно так сказать. Так же его функционал более впечетляющий.

    А если кого интересует только размер то на делфи можно написать компактный icq клиент. Например написанный мной icq клиент после upx весит 15 кб, умеет все то же самое что и длл от слеша, но сообщения отправляет длиной около 2400 символов, если же подключить функции запроса контакт листа и работы с ним + определение смены статусов то размер растет до 17 кб, но я делал под бот (не спам), и поэтому из последней разработки убрал контакт лист за ненадобностью.
     
  15. ErrorNeo

    ErrorNeo Elder - Старейшина

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    838
    Reputations:
    402
    именно по этой причине я и поставил звездочку. (*) :)
     
  16. intNet

    intNet Member

    Joined:
    31 May 2009
    Messages:
    29
    Likes Received:
    14
    Reputations:
    5
    2 slesh: почему ты не стал делать поддержку https прокси?
     
  17. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    Slesh маладес!!! :D Хороший джоб!!!


    ... хотя мог бы выложить как новогодний падарок :D а не просто так....
     
    #17 Retimiled, 29 Dec 2009
    Last edited: 29 Dec 2009
  18. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 intNet HTTPS - влом было. Да и делал просто так, чтобы отдохнуть от написания других прог.

    2 Retimiled А это идея )

    1 Января если будет время выложу исходники данной либы )
     
    1 person likes this.
  19. Nik(rus)

    Nik(rus) Member

    Joined:
    19 Jun 2009
    Messages:
    45
    Likes Received:
    7
    Reputations:
    0
    2 Slesh
    Спасибо за dll-ку, сделал из него стоящего бота :)

    Я вот сделал оболочку под эту либу на AutoIt, а вот на питоне никак не допру как сделать структуру Оо (через ctypes), кто-нибудь знает?
     
  20. .Life

    .Life Banned

    Joined:
    26 Dec 2009
    Messages:
    81
    Likes Received:
    3
    Reputations:
    0
    хорошая вещь, слеш как всегда на высоте.
    хотелось бы увидень не демо.