Что нового

[Сеть / Интернет] Написание instant messaging Бота на AutoIt

araneon

Новичок
Сообщения
59
Репутация
0
Привет всем ;)
На Ru.Board есть такая темка
Написание instant messaging Бота на AutoIt
Вот решил и здесь поднять этот вопрос, может у кого есть какие соображения на это счёт, или вдруг что-то готовое, выкладывайте, будем только рады ;)

Цель:

Написание бота под протоколы популярных instant messaging сервисов. ( ICQ, Jabber, MRA и т.д.)
В него будут входить функции удалённого управления компьютером, на котором бот запущен (UIN Админа).
Погода, анекдоты и прочее (любой UIN)
Никаких зловредных функций и скрытой работы! (мы не троян пишем)
Какие команды будут полезны?
- получить список процессов
- список файлов в определённой директории
- выключение \ перезагрузка компьютера
- скачивание файла из интернета
- копирование, перемещение, удаление файлов
- запуск файлов
- запуск \ остановка служб
- работа с реестром
- компиляция и выполнение произвольного кода AutoIt, переданного в сообщении

:IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Ну и собственно ссылка на рабочий образец:
Autoit-Delphi-IcqBot (850 Kb) (vicbox777)
Список изменений: Выброшены все встроенные в icqbot.exe команды, кроме единcтсенной(команду .close, которая закрывает обе проги, все таки оставил). И еще, раз я уже взялся за переделку, то, в связи с тем, что мной было замечено, что icqbot отказывается пересылать текст, где знаков больше 2500 тысяч, я доделал, чтобы если сообщение очень большое (больше 2500 знаков), то такие сообщения будут автоматом разбиваться icqboto-м,и по 2500 тыс.знаков отсылаться одна за другой; Таким образом можна переслать даже очень большое сообщение (правда больше 10 000 знаков не пробовал) и притом эти сообщения приходят почти как одно, только отделенные в контакт листе ником и датой... Еще по просьбе коллеги, было добавлено в ini файл опцию, где можно указать текст, которым бот будет отвечать, если нужно, своему хозяину при коннекте, получении сообщения.(В связи с этим скрипт-код Receivera тоже изменил, так что имейте в виду)

P.S. Когда были убраны все встроенные в icqbot.exe команды, то на этом сайте по он-лайн проверке файлов на вирусы: http://www.virustotal.com/ru/ , в результате проверки файла icqbot.exe 40-ми антивирусами, вирусов не обнаружено!
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
публичный ответ на вопрос в ПМ по поводу бота:
как к боту прикрутить команду !help, которая будет список команд выводить ?

по аналогии с другими командами. если в сообщении есть фрагмент.
Вот нашёл у себя делал уже:

Код:
Case '!help'
    _SendData($hWnd_IcqWindow, _help_bot())


Код:
;~~~~~~~~~~~~~~
; функция _help_bot Возвращает список доступных команд.
; команда для вызова этой функции: !help
;~~~~~~~~~~~~~~
Func _help_bot()
Local $otvet = "Добро пожаловать в справочную систему бота Lanosco."& _ 
    @CRLF&"!proclist - получает список запущеных процессов"& _ 
	@CRLF&"!dir путь_к_каталогу - получает список файлов\папок указанной директории"& _ 
	@CRLF&"!filedel - удаляет указанный файл"& _ 
	@CRLF&"!folderdel - удаляет указанный каталог"& _
	@CRLF&"!alldrives - список имеющихся дисков и их типы"& _ 
	@CRLF&"!allprogs - список установленных программ"
Return $otvet
EndFunc
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Оооохх СПАСИБО, выручил, а я туплю сижу, в Local пишу просто $otvet='', а затем ниже уже пытаюсь прикрутить список команд, но неполучалось, )))) забыл про &_@CRLF& )))). Кстатии как думаешь получиться сделать функцию запуска сканирования антивирусом (использую avast) дериктории или файла ? Тоесть посылаю команду типа (!scan "путь") и avast начинает её сканировать.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
ну я не юзал его никогда. но раз есть такой пункт в контекстном меню файлов\папок, то значить это команда экзешнику антивиря передаёт, осталось только найти её в реестре.
А далее встаёт проблема удастся ли тебе считать результаты сканирования из окна.
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Аха, понятненько, будем рыть реестр, спасибо. А на счёт считывания результатов сканирования, думаю можно, по всплывающему окошку если что-то нашлось, хотя неуверен пока, надобы проверить. Просто когда avast сканит, весит одно окошко, а если что нашол то выскакивает другое. Думаю надо, что бы после запуска, скрипт проверял наличие этих окошек и в случае появления второго окна (типа, найден вирь) отослал мне имя файла с адресом и что за вирус, а если второе окошко не появилось, а первое закрылось, то значит ничего не найдено и значит всё чисто.
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Понадобился мне когда-то этот instant messaging bot...
Но т.к. асечный протокол рыть не хотелось, я полез в перспективный XMPP aka Jabber
Вопщем вот что получилось, при наличии прямых рук у вас будет полноценный бот для управления компом :smile:
Download
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Так мы бы с радостью на джаббера перешли, но у нас небыло джабберной UDF. Спасибо что выложил свои наработки.
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
ну насчет жаббера - я его сначала ваще не знал, потом на ru-board форуме (ты там был, не отговаривайся ypblrb :D) я скачал на автоите мессенжер, переделал его под себя, добавил функции...
кстати - !help там тоже есть ;D
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Респект за жаббера.
Тока можно попрасить хотя бы кратенькое описание к нему ?
Чё как, чё к чему
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
ну если бы некоторые заглядывали в код, то увидели все сами =)

Все просто, запускаем бота, идем в свой жаб-клиент и шлем боту месаги как сообщения
(бот берет регистрационные данные из config.ini, вы должны сидеть под одним из акков из admin.ini)
Команды:
Тут нужно пояснить, что команды могут вводится как /cmd, !cmd и .cmd - разницы нет
<тупой месаг> - в игнор таой месаг
<хоть чё не от админа> - то же самое
!help - вывод команд, описаных ниже
!cmd <команда> - командная строка (имхо, самое полезное)
!tree <папка> - выводит список файлов - [папок]
!sd - вырубает бота
!plist - лист процессов
!cln <path> - очищает папку (!cln %WINDIR% :DD)
!del <file or path> - удаляет папку или файл
!drv - лист дисков (Fixed = жескач, Removable = флоппи, CDROM = сиди/дивиди-ром)
!kill <процесс> - убить процесс нах ;D
!send <кому> <что> - отсылка сообщения
!tsd - вырубить комп
!reboot - перезагрузить комп

Вот собственно и все, приличную систему логина никак не мог придумать (юзал array, но там он фиксированный... или тут есть _ArrayInsert?), да и пароли/логины вытаскивать тяжело... вопщем сделал через ini файл.

ЗЫ: так как выложил, думаю нужно и поддержку организовать) принимаем заявки на функции (в пределах разумного)
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Новые команды:
!cnt <файл> - показывает контент файла
!wmod <файл> - режим создания файла
В пежиме создания:
<строка> - ввод строки
!wmsave - сохранение всех изменений

Вопщем пока работаю, скоро выложу новую версию :smile:


Добавлено:
Сообщение автоматически объединено:

Ура товарищи!
New release, новые команды:
Как обещал, !wmod <file>, !wsave и !wcancel - отмена без сохранения
!cnt <file> - содержание файла file
И пара бонусов:
!addadmin <jid> - добавляет нового админа :D
!deladmin <jid> - удаляет админа :shok:
dOwNLoaD
 
Автор
A

araneon

Новичок
Сообщения
59
Репутация
0
Вауу вещь по ходу клёвая, теперь буду курить что такое есть jabber, а то как то ни разу с ним не сталкивался. Вот ещё вопросик, есть варик добавить команду для запуска какой либо программы, а также запуск программы с параметром ?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
На самом деле половинаВСЕХ команд винды тут уже есть)
Запуск:
!cmd <программа> <параметры>
Пример:
!cmd start cmd.exe /c copy C:\env.txt C:\1.txt
и... ву-а-ля, появилась копия файла C:\env.txt под названием 1.txt :D

Юзай консоль, это ИМХО самая рулезная вещь здесь :smile:


Добавлено:
Сообщение автоматически объединено:

Итак, можно сказать что у меня тут "революция", я разделил бота на 3 файла:
  • bot-no-gui.au3Бот собственной персоной
  • BotFunc.au3 - локальные функции
  • Jabber.au3 - библиотека для работы с Jabber'ом
dOwNLoAd
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
ВНИМАНИЕ! Очень большое обновление!

Теперь админ-конфиг выглядит более пристойно:
Код:
[Admin]
[email protected],[email protected]
spassword=your_password_for_login
[Bans]
[email protected]
Как видите, теперь ничего не надо считать, через запятую перечисляем админов и рулим :smile:

А самое интересное - система банов. В парсере jid проверяется на бан первым, поэтому бяк не пропускает полюбэ :D
+ если бан поставлен и jid не был разбанен, то при следующем запуске этот бан останется (автоматически пишет в ini-файл)

spassword - пароль для входа систему jid'ам, которые не перечислены в admins (и banned конечно ;))

Конфиг:
Код:
[Config]
[email protected]
password=your_bot_jid_password
GUI=1
log=1

Да-да! Как вы заметили появилась поддержка параметров GUI и ведение лога присланных команд

Ну и конечно куча новых команд:
1) Улучшены все команды, чуть прибавлена производительность
2) You simply can use !command or .command or /command - первая строка хелпа гласит: можете юзать как .help, как !help так и /help - все эти команды тождественно равны
3) !login <пароль> - вход в систему для jid, не перечисленных в admins
4) !logout - выход изи сессии
5) !rb - перезагрузка бота (вобщем сделал скорее для себя... так как надоело при выловке багов перезапускать эту махину)
6) !logoff - выход из сессии винды
7) !download <файл в интернете> <локальный путь> - качает файл <инет> в файл <локальный>
8) !ban <jid> - забанить jid
9) !unban <jid> - разбанить jid
10) !banlist - список забаненых
11) !admins - админы онлайн

Что важно заметить - теперь админы в отдельном массиве (как и список банов), wmod работает мультиюзерно, это были две "глобальные" траблы бота, но упорство труд и mozZzg перетерли их в пух и прах :smile:

Юзайте, наслаждайтесь :smile:
DoWnLoAd
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Погонял. Работает норм. Хороша идея с логином.
Большая работа проделана и в одиночку. :ok:
Разделять на два модуля всётаки нужно ибо функции будут мешать работе протокола.
Мелкие пожелания: шифрование пароля в ini (хотябы RC4 встроенный в автоите), в !cmd ответ от консоли чтоб приходил, окно бота всётаки не закрывается ;) .
Жаль что мало кто заглядывает в этот топик.
Помнится sproxy обещал поработать над Jaber UDF
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Насчет разделения: либа джаббера НЕ ЗАВИСИТ НИКОИМ ОБРАЗОМ от бота, там все на сокетах, и функциях.
Насчет незакрытия окна:
Код:
if $gui="1" Then
	if GUIGetMsg() = $GUI_EVENT_CLOSE Then
		_JabExit($socket)
	EndIf
EndIf

WTF? баг? я хз...

А передачу выдачи командной строки - это можно :smile:


Добавлено:
Сообщение автоматически объединено:

Вобщем вывод из cmd строки я сделал... но столкнулся с проблемой - в командной строке используется cp1251 а в афтоите явно не такая кодировка... BinaryToString(StringToBinary) не помогает!!! что делать?
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
По запросу одного из участников форума
 
Верх