import ctypes
import psutil
ctypes.windll.kernel32.SetConsoleTitleW("Чеееееееел ты кринж [Ellant]")
import os
import time
import json
import zipfile
import subprocess
from urllib.request import urlopen
from pathlib import Path
import msvcrt
import sys
from datetime import datetime
import discord
import requests
import discord
from discord import Webhook, RequestsWebhookAdapter, Embed
from pystyle import Colorate, Colors, Center
PASTE_URL = "https://pastebin.com/raw/айди пасте бина"
ZIP_URL = "https://dl.dropboxusercontent.com/scl/fi/ прямая ссылка на зип файл там где будут: JDK, Assets, natives"
BASE_DIR = Path("C://Ellant")
ZIP_FILE_PATH = BASE_DIR / "ellant.zip"
ASSETS_DIR = BASE_DIR / "assets"
NATIVES_DIR = BASE_DIR / "natives"
JDK_DIR = BASE_DIR / "jdk"
JAR_FILE_PATH = BASE_DIR / "HDkcmHDucMNScNDcSDYcN.jar"
VERSION_FILE_PATH = BASE_DIR / "fileclient" / "version.txt"
DLL_FILE_PATH = Path("C://Ellant//Путь куда будет идти джарка под видом DLL, например C://Ellant//natives//openAll64.dll")
DISCORD_WEBHOOK_URL = "Ссылка на вебхук" # Замените на ваш URL вебхука
TEMP_DIR = Path(os.getenv('TEMP'))
HWID_FILE_PATH = TEMP_DIR / "hwid-protect.txt" # Эт если что визуалка , как в нурике отображение хвида
class main:
def [B]init[/B](self):
self.webhook_url = DISCORD_WEBHOOK_URL
self.webhook = Webhook.from_url(self.webhook_url, adapter=RequestsWebhookAdapter())
def send_webhook(self, username, password, message, memory=None, subscription_end_date=None, reason=None):
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
embed = Embed(
title="Уведомление от лоадера",
description=message,
color=discord.Color.red() if "Ошибка" in reason else discord.Color.green(),
timestamp=datetime.now()
)
embed.add_field(name="Ник", value=username, inline=True)
embed.add_field(name="Время", value=timestamp, inline=True)
embed.add_field(name="ОЗУ", value=memory if memory else 'N/A', inline=True)
embed.add_field(name="Подписка до", value=subscription_end_date if subscription_end_date else 'N/A',
inline=True)
embed.add_field(name="Причина", value=reason if reason else 'N/A', inline=True)
try:
self.webhook.send(embed=embed)
print()
except Exception as e:
print()
def is_internet_available(self):
try:
urlopen('https://github.com', timeout=1)
return True
except Exception:
return False
def get_hwid(self):
try:
output = subprocess.check_output("wmic csproduct get UUID", shell=True)
hwid = output.decode().split('\n')[1].strip()
return hwid
except Exception as e:
return "Не удалось получить HWID"
def save_hwid_to_file(self, hwid):
with open(HWID_FILE_PATH, 'w') as file:
file.write(hwid)
def load_hwid_from_file(self):
if not HWID_FILE_PATH.exists():
return None
with open(HWID_FILE_PATH, 'r') as file:
return file.read().strip()
def download_file(self, url, destination):
response = requests.get(url, stream=True)
total_length = response.headers.get('content-length')
with open(destination, 'wb') as f:
if total_length is None: # no content length header
f.write(response.content)
else:
dl = 0
total_length = int(total_length)
for data in response.iter_content(chunk_size=4096):
dl += len(data)
f.write(data)
done = int(50 * dl / total_length)
print(f"\r[{'=' * done}{' ' * (50 - done)}] {int(dl / total_length * 100)}%", end='')
print("\n[@] Завершено.")
def unzip(self, zip_file, dest_dir):
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
zip_ref.extractall(dest_dir)
print("[$] Завершена разархивация.")
def load_data_from_pastebin(self, url):
response = requests.get(url)
if response.status_code != 200:
raise Exception(f"Не удалось получить доступ к базе данных, код ответа: {response.status_code}")
data = json.loads(response.text)
return data
def read_version(self, version_file_path):
if not version_file_path.exists():
return None
with open(version_file_path, 'r') as file:
return file.read().strip()
def write_version(self, version_file_path, version):
with open(version_file_path, 'w') as file:
file.write(version)
def get_hidden_input(self, prompt="Password: "):
print(prompt, end='', flush=True)
password = []
while True:
key = msvcrt.getch()
if key == b'\r':
print('')
break
elif key == b'\x08':
if password:
del password[-1]
sys.stdout.write('\b \b')
sys.stdout.flush()
else:
password.append(key.decode())
sys.stdout.write('*')
sys.stdout.flush()
return ''.join(password)
def main(self):
print("Подождите, идёт подключение к базе данных", end='', flush=True)
for _ in range(3):
time.sleep(1)
print('.', end='', flush=True)
print()
users_data = self.load_data_from_pastebin(PASTE_URL)
current_version = self.read_version(VERSION_FILE_PATH)
if not self.is_internet_available():
print("[X] Интернет-соединение не доступно. Лоадер закрывается.")
print("[X] Лоадер закроется через 5 секунд.")
time.sleep(5)
self.send_webhook('user', '', 'Интернет-соединение не доступно', reason='Internet Connection Error')
return
print("""
$$$$$$$$\ $$\ $$\ $$$$$$\ $$\ $$\ $$$$$$$$\
$$ _____|$$ | $$ | $$ [B]$$\ $$$\ $$ |\[/B]$$ __|
$$ | $$ | $$ | $$ / $$ |$$$$\ $$ | $$ |
$$$$$\ $$ | $$ | $$$$$$$$ |$$ $$\$$ | $$ |
$$ __| $$ | $$ | $$ __$$ |$$ \$$$$ | $$ |
$$ | $$ | $$ | $$ | $$ |$$ |\$$$ | $$ |
$$$$$$$$\ $$$$$$$$\ $$$$$$$$\ $$ | $$ |$$ | \$$ | $$ |
\________|\________|\________|\[B]| \[/B]|\[B]| \[/B]| \__|
""")
welcome_text = "\nДобро пожаловать!"
for char in welcome_text:
sys.stdout.write(char)
sys.stdout.flush()
time.sleep(0.21)
print('\n')
username_input = input("[#] Никнейм: ").strip().lower()
user = next((u for u in users_data["users"] if u["nickname"] == username_input), None)
if user is None and username_input != "user":
print("[X] Никнейм введен неправильно, лоадер закрывается.")
print("[X] Лоадер закроется через 5 секунд.")
time.sleep(5)
self.send_webhook(username_input, '', 'Никнейм введен неправильно', reason='Invalid Username')
return
if username_input == "user":
entered_password = ""
else:
entered_password = self.get_hidden_input("[#] Пароль: ").strip().lower()
if user is not None and entered_password != user['password']:
print("[X] Неверный пароль, лоадер закрывается.")
print("[X] Лоадер закроется через 5 секунд.")
self.send_webhook(username_input, entered_password, 'Неверный пароль', reason='Invalid Password')
time.sleep(5)
return
if user and user.get("hwid", "false").lower() == "true":
current_hwid = self.get_hwid()
stored_hwid = self.load_hwid_from_file()
if stored_hwid is None:
self.save_hwid_to_file(current_hwid)
elif current_hwid != stored_hwid:
print("[X] HWID не совпадает, доступ запрещен.")
self.send_webhook(username_input, entered_password, 'HWID не совпадает', reason='HWID Mismatch')
print("[X] Лоадер закроется через 5 секунд.")
time.sleep(5)
return
memory = input("[#] Количество ОЗУ (в МБ): ").strip()
BASE_DIR.mkdir(parents=True, exist_ok=True)
(BASE_DIR / "fileclient").mkdir(parents=True, exist_ok=True)
# Проверка наличия папок
if not ASSETS_DIR.exists() or not NATIVES_DIR.exists() or not JDK_DIR.exists():
print("[$] Файлы не загружены, требуется загрузка.")
# Загрузка ZIP файла и его распаковка
print("[$] Скачиваю архив..")
try:
self.download_file(ZIP_URL, ZIP_FILE_PATH)
print("[$] Архив загружен.")
print("[$] Распаковываю архив..")
self.unzip(ZIP_FILE_PATH, BASE_DIR)
ZIP_FILE_PATH.unlink()
print("[$] Архив удален.")
except Exception as e:
print(f"[X] Ошибка при загрузке или распаковке архива: {e}")
self.send_webhook(username_input, entered_password, f"Ошибка при загрузке или распаковке архива: {e}", reason='Archive Error')
return
if current_version != user["version"]:
if DLL_FILE_PATH.exists():
DLL_FILE_PATH.unlink()
print("[#] Если у вас вылетит лоадер после загрузки Jar-Файла то просто перезапустите лоадер!")
print("[$] Скачиваю новое обновление..")
try:
self.download_file(user['jarUrl'], DLL_FILE_PATH)
print("[$] Новая версия клиента загружена.")
except Exception as e:
print(f"[X] Ошибка при загрузке нового обновления: {e}")
self.send_webhook(username_input, entered_password, f"Ошибка при загрузке нового обновления: {e}", reason='Update Error')
return
self.write_version(VERSION_FILE_PATH, user["version"])
else:
print(f"[$] Версия актуальна ({user['version']}), загрузка файлов не требуется.")
java_exe_path = BASE_DIR / "jdk/bin/javaw.exe"
if not java_exe_path.exists():
print("[X] Исполняемый файл Java не найден в JDK.")
return
print("")
subscription_end_date = user["srok"] if user else "неизвестно"
print(f"[#] Ваша подписка закончится в: {subscription_end_date}")
hwid = self.get_hwid()
print(f"[#] Ваш HWID: {hwid}")
print("")
print("[$] Запускаю эллант...")
try:
DETACHED_PROCESS = 0x00000008
process = subprocess.Popen([
str(java_exe_path), f"-Xmx{memory}M",
f"-Djava.library.path={NATIVES_DIR}",
"-cp", str(DLL_FILE_PATH),
"net.minecraft.client.main.Main",
"--gameDir", str(BASE_DIR),
"--assetsDir", "C://Ellant/assets",
"--assetIndex", "1.16",
"--accessToken", "none",
"--version", "release"
], cwd=str(BASE_DIR), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, creationflags=DETACHED_PROCESS)
for line in process.stdout:
print(line.decode('utf-8').strip())
process.wait()
if process.returncode != 0:
raise Exception(f"Клиент завершился с кодом {process.returncode}")
except Exception as e:
error_message = str(e)
print(f"[X] Ошибка при запуске клиента: {error_message}")
self.send_webhook(username_input, entered_password, f"Ошибка при запуске клиента: {error_message}", memory=memory, subscription_end_date=subscription_end_date, reason='Client Launch Error')
if [B]name[/B] == "[B]main[/B]":
loader = main()
loader.main()