PDA

Просмотр полной версии : [релиз] IcqMod DLL


slesh
28.11.2009, 01:25
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 классе работы с аськой. Так что сильно прошу не пинать ))

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

(С) SLESH 2009

Irdis
28.11.2009, 01:30
слеш крут!

antiWM
28.11.2009, 01:35
И главное - не спамте мою аську :'(
забили))) большой респект, спс.

slesh
28.11.2009, 01:35
Вообще DLL написана на Си но спокойно компилится и как СИ код и как С++ так что норм.
А на делфи в основном демки делаю потому, что когда тестирую какуюто DLL то побыстрому в дельфе это делаю.

Вот пример на Си как работать через прокси

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();

slesh
28.11.2009, 01:37
в демке работы в С++/С просто привел как юзать функции. т.е. не проверял результат выполнения их

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

Имея на руках эти исходники и исходники компонента TICQClient можно в легкую расширить возможности.

Chrome~
28.11.2009, 01:53
slesh, крутой релиз, ты мастер! Спасибо тебе!
Количество ICQ спамеров и флудеров явно теперь увеличиться.

Вы должны добавить репутацию кому-то еще, прежде чем сможете снова добавить ее slesh.

~Shapaev~
28.11.2009, 02:30
Офигенный релиз , большой тебе респект и + конечно.
Количество ICQ спамеров и флудеров явно теперь увеличиться.
100%

И насчет исходников , может будешь давать людям с репутацией ? Мало ли возможно кто - то захочет расширить функционал.

ErrorNeo
28.11.2009, 02:41
И насчет исходников , может будешь давать людям с репутацией ? Мало ли возможно кто - то захочет расширить функционал.кроме слеша у нас таких на форуме все равно нет.*

слэш крут...

t04
28.11.2009, 03:13
slesh откровенно сказать то мне не оч понравился релиз этой dll, просто спамеры за...колебали, ты хорошо подумал прежде чем давать код в руки публики? Может стоит убрать по крайней мере функцию запроса авторизации?

Sleep(1); // маленькая пауза чтобы не вешать систему

Я бы сделал 100-500 мс. зачем лишний раз прогонять цикл, с такой микро паузой.

0ldbi4
28.11.2009, 03:53
отлично, буду СИ изучать вспомню а пока + за старания! Хотя я уверен такому профессионалу это не многова стоило..

=Zeus=
28.11.2009, 04:01
Написал малвар - спас сотни людей от голода и безработицы!
Воистину малвар!!!

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

slesh
28.11.2009, 11:46
2 ErrorNeo

кроме слеша у нас таких на форуме все равно нет.*

C чего ты это взял? Есть люди, но все они заняты другими вещами и проектами в другой области )

2 t04

откровенно сказать то мне не оч понравился релиз этой dll, просто спамеры за...колебали, ты хорошо подумал прежде чем давать код в руки публики? Может стоит убрать по крайней мере функцию запроса авторизации?

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

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

2 =Zeus=

Теперь ICQ клиент для Делфи нервно курит в сторонке ))

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


Воистину малвар!!!


Моя подпись чуть в другую тематику направлена.
Там я имел в виду, что пока будут вредоносные проги, то всегда будет работа у админов, специалистов по защите инфы, всякого обслуживающего персонала, который будет переустанавливать проги после вирей, у программистов работа, по созданию антивирусных прог. )

=Zeus=
28.11.2009, 17:02
Моя подпись чуть в другую тематику направлена.
Там я имел в виду, что пока будут вредоносные проги, то всегда будет работа у админов, специалистов по защите инфы, всякого обслуживающего персонала, который будет переустанавливать проги после вирей, у программистов работа, по созданию антивирусных прог. )
Так я это понял :)

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

t04
28.11.2009, 17:34
Теперь ICQ клиент для Делфи нервно курит в сторонке ))

Не думаю так как он хорошо документирован и поддерживается "сообществом" если можно так сказать. Так же его функционал более впечетляющий.

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

ErrorNeo
28.11.2009, 17:39
2 ErrorNeo

C чего ты это взял? Есть люди, но все они заняты другими вещами и проектами в другой области )
именно по этой причине я и поставил звездочку. (*) :)

intNet
29.12.2009, 21:40
2 slesh: почему ты не стал делать поддержку https прокси?

Retimiled
29.12.2009, 23:02
Slesh маладес!!! :D Хороший джоб!!!


... хотя мог бы выложить как новогодний падарок :D а не просто так....

slesh
30.12.2009, 00:03
2 intNet HTTPS - влом было. Да и делал просто так, чтобы отдохнуть от написания других прог.

2 Retimiled А это идея )

1 Января если будет время выложу исходники данной либы )

Nik(rus)
31.12.2009, 20:04
2 Slesh
Спасибо за dll-ку, сделал из него стоящего бота :)

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

.Life
31.12.2009, 22:27
хорошая вещь, слеш как всегда на высоте.
хотелось бы увидень не демо.

Retimiled
31.12.2009, 22:58
dll - не демковая 8))

Gar|k
26.03.2010, 00:46
IcqMod.cpp строка 154 столбец 89

if (recv(sock, (char*)&s4, sizeof(S4_REQ), 0) != sizeof(S4_REQ) || s4.command != 91)

CD - результирующий код, возможны следующие значения:
90: запрос выполнен
91: запрос отклонен или завершился ошибкой
92: запрос отклонен потому, что SOCKS4 сервер не может соединиться с identd (*) клиента
93: запрос отклонен потому, что клиентская программ и identd (*) сообщают SOCKS4 серверу различные userid

FIX:
if (recv(sock, (char*)&s4, sizeof(S4_REQ), 0) != sizeof(S4_REQ) || s4.command != 90)

;)

WAYS
27.03.2010, 13:33
Возможно ли использовать под .NET?

W!z@rD
27.03.2010, 13:44
да.
Советую прочитать про атрибут DllImport, а так же про unmanagement code

WAYS
28.03.2010, 01:15
да.
Советую прочитать про атрибут DllImport, а так же про unmanagement code
А можно пример любой функции?, запутался в типах :(

vitaliy-den
17.06.2010, 17:40
Спасибо тебе slesh!
То что нужно нашел)