Типо плюсы устарели и все перешли на Раст?Пожалуйста, авторизуйтесь для просмотра ссылки.
Типо плюсы устарели и все перешли на Раст?Пожалуйста, авторизуйтесь для просмотра ссылки.
Типо плюсы устарели и все перешли на Раст?
никто не устаревалТипо плюсы устарели и все перешли на Раст?
как настоящий девелопер по питону скажу что писал чат гптУважаемый модератор itskekoff знаю что лоадер написал ты
но Никита 1 кодер не хотел тебе платить 10к по сути он тя кинул
а Теперь к кодеру чита Никита зачем ты продаеш свою фигню на виссенде
если ты даже не умееш худ с угейма спастить пздц
Код:import ctypes import functools import hashlib import inspect import os import subprocess import time import zipfile import requests from tqdm import tqdm IGNORED_MODULES = [] class MODULEENTRY32(ctypes.Structure): _fields_ = [ ("dwSize", ctypes.c_ulong), ("th32ModuleID", ctypes.c_ulong), ("th32ProcessID", ctypes.c_ulong), ("GlblcntUsage", ctypes.c_ulong), ("ProccntUsage", ctypes.c_ulong), ("modBaseAddr", ctypes.POINTER(ctypes.c_byte)), ("modBaseSize", ctypes.c_ulong), ("hModule", ctypes.c_void_p), ("szModule", ctypes.c_char * 256), ("szExePath", ctypes.c_char * 260) ] def check_for_injection(): previous_modules = get_loaded_modules() while True: current_modules = get_loaded_modules() new_modules = [module for module in current_modules if module not in previous_modules and module not in IGNORED_MODULES] if new_modules: print("[!] Обнаружена попытка инжекта кода") os.kill(os.getpid(), 9) previous_modules = current_modules time.sleep(0.001) def get_loaded_modules(): module_list = [] snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(0x00000008, 0) # TH32CS_SNAPMODULE if snapshot == -1: return [] me32 = MODULEENTRY32() me32.dwSize = ctypes.sizeof(MODULEENTRY32) ret = ctypes.windll.kernel32.Module32First(snapshot, ctypes.byref(me32)) while ret != 0: if me32.szExePath.endswith(b".dll"): module_list.append(me32.szModule) ret = ctypes.windll.kernel32.Module32Next(snapshot, ctypes.byref(me32)) ctypes.windll.kernel32.CloseHandle(snapshot) return module_list def generate_hash(func): source_code = inspect.getsource(func) lines = source_code.splitlines() non_decorator_lines = [line for line in lines if not line.strip().startswith('@')] return hashlib.sha256('\n'.join(non_decorator_lines).encode("utf-8")).hexdigest() def verify_hash(original_hash): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): current_hash = generate_hash(func) if current_hash != original_hash: raise ValueError("Integrity check failed.") return func(*args, **kwargs) return wrapper return decorator def execute_command(command, ram): try: subprocess.run(command) except subprocess.CalledProcessError as e: print(f"[!] Процесс не запустился, ошибка: {e}") def download_and_extract(url: str, extract_dir: str): target_folder = os.path.join(extract_dir) response = requests.get(url, stream=True) filename = url.split('/')[-1].split(".zip")[0] + ".zip" target_path = os.path.join(target_folder, filename) total_size = int(response.headers.get('content-length', 0)) block_size = 1024 t = tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=True) with open(target_path, 'wb') as file: for data in response.iter_content(block_size): t.update(len(data)) file.write(data) t.close() with zipfile.ZipFile(target_path, 'r') as zip_ref: zip_ref.extractall(target_folder) try: os.remove(target_path) except OSError: pass def main_func(): print(" /$$ /$$$$$$ /$$ /$$ /$$ ") print("| $$ /$$__ $$| $$|__/ | $$ ") print("| $$ /$$ /$$ /$$ /$$ | $$ \__/| $$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ ") print("| $$ | $$ | $$| $$ /$$/ | $$ | $$| $$ /$$__ $$| $$__ $$|_ $$_/ ") print("| $$ | $$ | $$ \ $$$$/ | $$ | $$| $$| $$$$$$$$| $$ \ $$ | $$ ") print("| $$ | $$ | $$ >$$ $$ | $$ $$| $$| $$| $$_____/| $$ | $$ | $$ /$$") print("| $$$$$$$$| $$$$$$/ /$$/\ $$ | $$$$$$/| $$| $$| $$$$$$$| $$ | $$ | $$$$/") print("|________/ \______/ |__/ \__/ \______/ |__/|__/ \_______/|__/ |__/ \___/ ") if not os.path.isdir("C:\\LuxClient"): os.mkdir("C:\\LuxClient") print("[!] Stage 1: Created main directory") print("[!] Stage 2: Downloading & extracting required files...") download_and_extract( "http://gondonclient.xyi/main.zip", "C:\\LuxClient\\") while True: memory_input = input("[>] Введите кол-во оперативной памяти (в гигабайтах): ") try: memory = int(memory_input) print("[!] Stage 3: Launching client...") launch_command = [ "C:\\LuxClient\\jvm\\bin\\java.exe", f"-Xmx{memory}G", "-Djava.library.path=C:\\LuxClient\\natives", "-cp", "C:\\LuxClient\\libraries\\*;C:\\LuxClient\\client.jar", "net.minecraft.client.main.Main", "--username", "itskekoff", "--width", "854", "--height", "480", "--version", "xyipenis141", "--gameDir", "C:\\LuxClient\\game", "--assetsDir", "C:\\LuxClient\\assets", "--assetIndex", "1.16", "--accessToken", "0" ] execute_command(launch_command, ram=memory) break except ValueError: print("[!] Введенное значение не является целым числом. Пожалуйста, попробуйте снова.") if __name__ == '__main__': main_func() while True: pass
а чем в контексте РЕЙДЖ ЧИТА НА МАЙНКРАФТ лоадер на расте (о котором ты узнал минуту назад от меня) или плюсах лучше чем на питонеЛоадер на питоне... Ужас просто. Лучше уж написать на каком нибудь расте или плюсах тех же
xuitaУважаемый модератор itskekoff знаю что лоадер написал ты
но Никита 1 кодер не хотел тебе платить 10к по сути он тя кинул
а Теперь к кодеру чита Никита зачем ты продаеш свою фигню на виссенде
если ты даже не умееш худ с угейма спастить пздц
Код:import ctypes import functools import hashlib import inspect import os import subprocess import time import zipfile import requests from tqdm import tqdm IGNORED_MODULES = [] class MODULEENTRY32(ctypes.Structure): _fields_ = [ ("dwSize", ctypes.c_ulong), ("th32ModuleID", ctypes.c_ulong), ("th32ProcessID", ctypes.c_ulong), ("GlblcntUsage", ctypes.c_ulong), ("ProccntUsage", ctypes.c_ulong), ("modBaseAddr", ctypes.POINTER(ctypes.c_byte)), ("modBaseSize", ctypes.c_ulong), ("hModule", ctypes.c_void_p), ("szModule", ctypes.c_char * 256), ("szExePath", ctypes.c_char * 260) ] def check_for_injection(): previous_modules = get_loaded_modules() while True: current_modules = get_loaded_modules() new_modules = [module for module in current_modules if module not in previous_modules and module not in IGNORED_MODULES] if new_modules: print("[!] Обнаружена попытка инжекта кода") os.kill(os.getpid(), 9) previous_modules = current_modules time.sleep(0.001) def get_loaded_modules(): module_list = [] snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(0x00000008, 0) # TH32CS_SNAPMODULE if snapshot == -1: return [] me32 = MODULEENTRY32() me32.dwSize = ctypes.sizeof(MODULEENTRY32) ret = ctypes.windll.kernel32.Module32First(snapshot, ctypes.byref(me32)) while ret != 0: if me32.szExePath.endswith(b".dll"): module_list.append(me32.szModule) ret = ctypes.windll.kernel32.Module32Next(snapshot, ctypes.byref(me32)) ctypes.windll.kernel32.CloseHandle(snapshot) return module_list def generate_hash(func): source_code = inspect.getsource(func) lines = source_code.splitlines() non_decorator_lines = [line for line in lines if not line.strip().startswith('@')] return hashlib.sha256('\n'.join(non_decorator_lines).encode("utf-8")).hexdigest() def verify_hash(original_hash): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): current_hash = generate_hash(func) if current_hash != original_hash: raise ValueError("Integrity check failed.") return func(*args, **kwargs) return wrapper return decorator def execute_command(command, ram): try: subprocess.run(command) except subprocess.CalledProcessError as e: print(f"[!] Процесс не запустился, ошибка: {e}") def download_and_extract(url: str, extract_dir: str): target_folder = os.path.join(extract_dir) response = requests.get(url, stream=True) filename = url.split('/')[-1].split(".zip")[0] + ".zip" target_path = os.path.join(target_folder, filename) total_size = int(response.headers.get('content-length', 0)) block_size = 1024 t = tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=True) with open(target_path, 'wb') as file: for data in response.iter_content(block_size): t.update(len(data)) file.write(data) t.close() with zipfile.ZipFile(target_path, 'r') as zip_ref: zip_ref.extractall(target_folder) try: os.remove(target_path) except OSError: pass def main_func(): print(" /$$ /$$$$$$ /$$ /$$ /$$ ") print("| $$ /$$__ $$| $$|__/ | $$ ") print("| $$ /$$ /$$ /$$ /$$ | $$ \__/| $$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ ") print("| $$ | $$ | $$| $$ /$$/ | $$ | $$| $$ /$$__ $$| $$__ $$|_ $$_/ ") print("| $$ | $$ | $$ \ $$$$/ | $$ | $$| $$| $$$$$$$$| $$ \ $$ | $$ ") print("| $$ | $$ | $$ >$$ $$ | $$ $$| $$| $$| $$_____/| $$ | $$ | $$ /$$") print("| $$$$$$$$| $$$$$$/ /$$/\ $$ | $$$$$$/| $$| $$| $$$$$$$| $$ | $$ | $$$$/") print("|________/ \______/ |__/ \__/ \______/ |__/|__/ \_______/|__/ |__/ \___/ ") if not os.path.isdir("C:\\LuxClient"): os.mkdir("C:\\LuxClient") print("[!] Stage 1: Created main directory") print("[!] Stage 2: Downloading & extracting required files...") download_and_extract( "http://gondonclient.xyi/main.zip", "C:\\LuxClient\\") while True: memory_input = input("[>] Введите кол-во оперативной памяти (в гигабайтах): ") try: memory = int(memory_input) print("[!] Stage 3: Launching client...") launch_command = [ "C:\\LuxClient\\jvm\\bin\\java.exe", f"-Xmx{memory}G", "-Djava.library.path=C:\\LuxClient\\natives", "-cp", "C:\\LuxClient\\libraries\\*;C:\\LuxClient\\client.jar", "net.minecraft.client.main.Main", "--username", "itskekoff", "--width", "854", "--height", "480", "--version", "xyipenis141", "--gameDir", "C:\\LuxClient\\game", "--assetsDir", "C:\\LuxClient\\assets", "--assetIndex", "1.16", "--accessToken", "0" ] execute_command(launch_command, ram=memory) break except ValueError: print("[!] Введенное значение не является целым числом. Пожалуйста, попробуйте снова.") if __name__ == '__main__': main_func() while True: pass
Для запуска лоудера на питоне придётся скачать сам питон, на плюсах или расте нужно лишь запустить легковесный бинарника чем в контексте РЕЙДЖ ЧИТА НА МАЙНКРАФТ лоадер на расте (о котором ты узнал минуту назад от меня) или плюсах лучше чем на питоне
это что? java loader?Уважаемый модератор itskekoff знаю что лоадер написал ты
но Никита 1 кодер не хотел тебе платить 10к по сути он тя кинул
а Теперь к кодеру чита Никита зачем ты продаеш свою фигню на виссенде
если ты даже не умееш худ с угейма спастить пздц
Код:import ctypes import functools import hashlib import inspect import os import subprocess import time import zipfile import requests from tqdm import tqdm IGNORED_MODULES = [] class MODULEENTRY32(ctypes.Structure): _fields_ = [ ("dwSize", ctypes.c_ulong), ("th32ModuleID", ctypes.c_ulong), ("th32ProcessID", ctypes.c_ulong), ("GlblcntUsage", ctypes.c_ulong), ("ProccntUsage", ctypes.c_ulong), ("modBaseAddr", ctypes.POINTER(ctypes.c_byte)), ("modBaseSize", ctypes.c_ulong), ("hModule", ctypes.c_void_p), ("szModule", ctypes.c_char * 256), ("szExePath", ctypes.c_char * 260) ] def check_for_injection(): previous_modules = get_loaded_modules() while True: current_modules = get_loaded_modules() new_modules = [module for module in current_modules if module not in previous_modules and module not in IGNORED_MODULES] if new_modules: print("[!] Обнаружена попытка инжекта кода") os.kill(os.getpid(), 9) previous_modules = current_modules time.sleep(0.001) def get_loaded_modules(): module_list = [] snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(0x00000008, 0) # TH32CS_SNAPMODULE if snapshot == -1: return [] me32 = MODULEENTRY32() me32.dwSize = ctypes.sizeof(MODULEENTRY32) ret = ctypes.windll.kernel32.Module32First(snapshot, ctypes.byref(me32)) while ret != 0: if me32.szExePath.endswith(b".dll"): module_list.append(me32.szModule) ret = ctypes.windll.kernel32.Module32Next(snapshot, ctypes.byref(me32)) ctypes.windll.kernel32.CloseHandle(snapshot) return module_list def generate_hash(func): source_code = inspect.getsource(func) lines = source_code.splitlines() non_decorator_lines = [line for line in lines if not line.strip().startswith('@')] return hashlib.sha256('\n'.join(non_decorator_lines).encode("utf-8")).hexdigest() def verify_hash(original_hash): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): current_hash = generate_hash(func) if current_hash != original_hash: raise ValueError("Integrity check failed.") return func(*args, **kwargs) return wrapper return decorator def execute_command(command, ram): try: subprocess.run(command) except subprocess.CalledProcessError as e: print(f"[!] Процесс не запустился, ошибка: {e}") def download_and_extract(url: str, extract_dir: str): target_folder = os.path.join(extract_dir) response = requests.get(url, stream=True) filename = url.split('/')[-1].split(".zip")[0] + ".zip" target_path = os.path.join(target_folder, filename) total_size = int(response.headers.get('content-length', 0)) block_size = 1024 t = tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=True) with open(target_path, 'wb') as file: for data in response.iter_content(block_size): t.update(len(data)) file.write(data) t.close() with zipfile.ZipFile(target_path, 'r') as zip_ref: zip_ref.extractall(target_folder) try: os.remove(target_path) except OSError: pass def main_func(): print(" /$$ /$$$$$$ /$$ /$$ /$$ ") print("| $$ /$$__ $$| $$|__/ | $$ ") print("| $$ /$$ /$$ /$$ /$$ | $$ \__/| $$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ ") print("| $$ | $$ | $$| $$ /$$/ | $$ | $$| $$ /$$__ $$| $$__ $$|_ $$_/ ") print("| $$ | $$ | $$ \ $$$$/ | $$ | $$| $$| $$$$$$$$| $$ \ $$ | $$ ") print("| $$ | $$ | $$ >$$ $$ | $$ $$| $$| $$| $$_____/| $$ | $$ | $$ /$$") print("| $$$$$$$$| $$$$$$/ /$$/\ $$ | $$$$$$/| $$| $$| $$$$$$$| $$ | $$ | $$$$/") print("|________/ \______/ |__/ \__/ \______/ |__/|__/ \_______/|__/ |__/ \___/ ") if not os.path.isdir("C:\\LuxClient"): os.mkdir("C:\\LuxClient") print("[!] Stage 1: Created main directory") print("[!] Stage 2: Downloading & extracting required files...") download_and_extract( "http://gondonclient.xyi/main.zip", "C:\\LuxClient\\") while True: memory_input = input("[>] Введите кол-во оперативной памяти (в гигабайтах): ") try: memory = int(memory_input) print("[!] Stage 3: Launching client...") launch_command = [ "C:\\LuxClient\\jvm\\bin\\java.exe", f"-Xmx{memory}G", "-Djava.library.path=C:\\LuxClient\\natives", "-cp", "C:\\LuxClient\\libraries\\*;C:\\LuxClient\\client.jar", "net.minecraft.client.main.Main", "--username", "itskekoff", "--width", "854", "--height", "480", "--version", "xyipenis141", "--gameDir", "C:\\LuxClient\\game", "--assetsDir", "C:\\LuxClient\\assets", "--assetIndex", "1.16", "--accessToken", "0" ] execute_command(launch_command, ram=memory) break except ValueError: print("[!] Введенное значение не является целым числом. Пожалуйста, попробуйте снова.") if __name__ == '__main__': main_func() while True: pass
Даэто что? java loader?
А кто бы тебя не заблокал?передай этому человеку чтобы разблочил, я с ним поговорю. утром спрашиваю и где бабки - а он тупо меня блокает везде)
ЗАДАВАЙ ПО ДЖАВЕ, ДАВААААЙможет тебе пару вопросов за нормальные яп задать? (Раст, джава)
да похуй же на лоадеры в Майнкрафте, их не надо защищать и они ничего в себе важного не хранят
не будем забывать что кубоголовые жоска любят базу экспы:)может тебе пару вопросов за нормальные яп задать? (Раст, джава)
да похуй же на лоадеры в Майнкрафте, их не надо защищать и они ничего в себе важного не хранят
в каком-то компиляторе в .exe есть функция встраивания питона в сам экзешник, но тогда он весить намного больше начинаетДля запуска лоудера на питоне придётся скачать сам питон
Пащу лоудеры для читов на майнкрафт на питоне задавайте вопросы. Ты б его ещё на скретче делаля так понимаю ты знаешь за питон? можно задать пару вопросов?)
А как же лоадер на php ?Пащу лоудеры для читов на майнкрафт на питоне задавайте вопросы. Ты б его ещё на скретче делал
ты НИЧЕМ (ВООБЩЕ) не лучше егоПащу лоудеры для читов на майнкрафт на питоне задавайте вопросы. Ты б его ещё на скретче делал
че за кринж на змееУважаемый модератор itskekoff знаю что лоадер написал ты
но Никита 1 кодер не хотел тебе платить 10к по сути он тя кинул
а Теперь к кодеру чита Никита зачем ты продаеш свою фигню на виссенде
если ты даже не умееш худ с угейма спастить пздц
Код:import ctypes import functools import hashlib import inspect import os import subprocess import time import zipfile import requests from tqdm import tqdm IGNORED_MODULES = [] class MODULEENTRY32(ctypes.Structure): _fields_ = [ ("dwSize", ctypes.c_ulong), ("th32ModuleID", ctypes.c_ulong), ("th32ProcessID", ctypes.c_ulong), ("GlblcntUsage", ctypes.c_ulong), ("ProccntUsage", ctypes.c_ulong), ("modBaseAddr", ctypes.POINTER(ctypes.c_byte)), ("modBaseSize", ctypes.c_ulong), ("hModule", ctypes.c_void_p), ("szModule", ctypes.c_char * 256), ("szExePath", ctypes.c_char * 260) ] def check_for_injection(): previous_modules = get_loaded_modules() while True: current_modules = get_loaded_modules() new_modules = [module for module in current_modules if module not in previous_modules and module not in IGNORED_MODULES] if new_modules: print("[!] Обнаружена попытка инжекта кода") os.kill(os.getpid(), 9) previous_modules = current_modules time.sleep(0.001) def get_loaded_modules(): module_list = [] snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(0x00000008, 0) # TH32CS_SNAPMODULE if snapshot == -1: return [] me32 = MODULEENTRY32() me32.dwSize = ctypes.sizeof(MODULEENTRY32) ret = ctypes.windll.kernel32.Module32First(snapshot, ctypes.byref(me32)) while ret != 0: if me32.szExePath.endswith(b".dll"): module_list.append(me32.szModule) ret = ctypes.windll.kernel32.Module32Next(snapshot, ctypes.byref(me32)) ctypes.windll.kernel32.CloseHandle(snapshot) return module_list def generate_hash(func): source_code = inspect.getsource(func) lines = source_code.splitlines() non_decorator_lines = [line for line in lines if not line.strip().startswith('@')] return hashlib.sha256('\n'.join(non_decorator_lines).encode("utf-8")).hexdigest() def verify_hash(original_hash): def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): current_hash = generate_hash(func) if current_hash != original_hash: raise ValueError("Integrity check failed.") return func(*args, **kwargs) return wrapper return decorator def execute_command(command, ram): try: subprocess.run(command) except subprocess.CalledProcessError as e: print(f"[!] Процесс не запустился, ошибка: {e}") def download_and_extract(url: str, extract_dir: str): target_folder = os.path.join(extract_dir) response = requests.get(url, stream=True) filename = url.split('/')[-1].split(".zip")[0] + ".zip" target_path = os.path.join(target_folder, filename) total_size = int(response.headers.get('content-length', 0)) block_size = 1024 t = tqdm(total=total_size, unit='B', unit_scale=True, desc=filename, leave=True) with open(target_path, 'wb') as file: for data in response.iter_content(block_size): t.update(len(data)) file.write(data) t.close() with zipfile.ZipFile(target_path, 'r') as zip_ref: zip_ref.extractall(target_folder) try: os.remove(target_path) except OSError: pass def main_func(): print(" /$$ /$$$$$$ /$$ /$$ /$$ ") print("| $$ /$$__ $$| $$|__/ | $$ ") print("| $$ /$$ /$$ /$$ /$$ | $$ \__/| $$ /$$ /$$$$$$ /$$$$$$$ /$$$$$$ ") print("| $$ | $$ | $$| $$ /$$/ | $$ | $$| $$ /$$__ $$| $$__ $$|_ $$_/ ") print("| $$ | $$ | $$ \ $$$$/ | $$ | $$| $$| $$$$$$$$| $$ \ $$ | $$ ") print("| $$ | $$ | $$ >$$ $$ | $$ $$| $$| $$| $$_____/| $$ | $$ | $$ /$$") print("| $$$$$$$$| $$$$$$/ /$$/\ $$ | $$$$$$/| $$| $$| $$$$$$$| $$ | $$ | $$$$/") print("|________/ \______/ |__/ \__/ \______/ |__/|__/ \_______/|__/ |__/ \___/ ") if not os.path.isdir("C:\\LuxClient"): os.mkdir("C:\\LuxClient") print("[!] Stage 1: Created main directory") print("[!] Stage 2: Downloading & extracting required files...") download_and_extract( "http://gondonclient.xyi/main.zip", "C:\\LuxClient\\") while True: memory_input = input("[>] Введите кол-во оперативной памяти (в гигабайтах): ") try: memory = int(memory_input) print("[!] Stage 3: Launching client...") launch_command = [ "C:\\LuxClient\\jvm\\bin\\java.exe", f"-Xmx{memory}G", "-Djava.library.path=C:\\LuxClient\\natives", "-cp", "C:\\LuxClient\\libraries\\*;C:\\LuxClient\\client.jar", "net.minecraft.client.main.Main", "--username", "itskekoff", "--width", "854", "--height", "480", "--version", "xyipenis141", "--gameDir", "C:\\LuxClient\\game", "--assetsDir", "C:\\LuxClient\\assets", "--assetIndex", "1.16", "--accessToken", "0" ] execute_command(launch_command, ram=memory) break except ValueError: print("[!] Введенное значение не является целым числом. Пожалуйста, попробуйте снова.") if __name__ == '__main__': main_func() while True: pass
rustmustdie.com бро, раст хуйняможет тебе пару вопросов за нормальные яп задать? (Раст, джава)
да похуй же на лоадеры в Майнкрафте, их не надо защищать и они ничего в себе важного не хранят
1. Кринж сам лоадер, который сделан за 5-10 минут и был дан бесплатноче за кринж на змее
зачем вообще проверки на инджект в код
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz