Посмотрите видео ниже, чтобы узнать, как установить наш сайт в виде веб-приложения на главном экране.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
как минимум можно закинуть в вирус тотал или нейронку типо клодыча, что б протестили на наличие вредоносного кодаz0n4r1e, почему мне страшно прожимать ехе?)
ну вот скачиваю например с акуму тот л2ини
Посмотреть вложение 97247
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрация
да, если ты запустил локальный то 127.0.0.1Что то все равно не получается зайти на сервер. Нужно адрес вставить в строку? ServerAddr=
да хоспади даже если ты напишешь екзешник на 2 строки кода и там будет какая то шифровка\кодировка\дешифровка то 100% выдаст ложно положительный резульбтат любой более менее антивирусник
Где ты там вирус то увидел?)збс форум, екзешники с вирусами
"""Переключает l2.ini между открытым видом и Lineage2Ver413."""
import os
import shutil
import sys
import tempfile
import zlib
from pathlib import Path
from typing import Optional, Sequence
HEADER_TEXT = "Lineage2Ver413"
HEADER = HEADER_TEXT.encode("utf-16le")
HEADER_PREFIX = "Lineage2Ver".encode("utf-16le")
HEADER_SIZE = 28
RSA_BLOCK_SIZE = 128
RSA_BODY_SIZE = 124
LEGACY_MODULUS = int(
"97df398472ddf737ef0a0cd17e8d172f"
"0fef1661a38a8ae1d6e829bc1c6e4c3c"
"fc19292dda9ef90175e46e7394a18850"
"b6417d03be6eea274d3ed1dde5b5d7bd"
"e72cc0a0b71d03608655633881793a02"
"c9a67d9ef2b45eb7c08d4be329083ce4"
"50e68f7867b6749314d40511d09bc574"
"4551baa86a89dc38123dc1668fd72d83",
16,
)
LEGACY_PRIVATE_EXPONENT = 0x35
MODERN_MODULUS = int(
"75b4d6de5c016544068a1acf125869f4"
"3d2e09fc55b8b1e289556daf9b875763"
"5593446288b3653da1ce91c87bb1a5c1"
"8f16323495c55d7d72c0890a83f69bfd"
"1fd9434eb1c02f3e4679edfa43309319"
"070129c267c85604d87bb65bae205de3"
"707af1d2108881abb567c3b3d069ae67"
"c3a4c6a3aa93d26413d4c66094ae2039",
16,
)
MODERN_PUBLIC_EXPONENT = int(
"30b4c2d798d47086145c75063c8e841e"
"719776e400291d7838d3e6c4405b504c"
"6a07f8fca27f32b86643d2649d1d5f12"
"4cdd0bf272f0909dd7352fe10a77b34d"
"831043d9ae541f8263c6fe3d1c14c2f0"
"4e43a7253a6dda9a8c1562cbd493c1b6"
"31a1957618ad5dfe5ca28553f746e2fc"
"6f2db816c7db223ec91e955081c1de65",
16,
)
MODERN_PRIVATE_EXPONENT = 0x1D
DECRYPTION_KEYS = (
(LEGACY_MODULUS, LEGACY_PRIVATE_EXPONENT),
(MODERN_MODULUS, MODERN_PRIVATE_EXPONENT),
)
class L2IniError(Exception):
"""Ошибка проверки или преобразования l2.ini."""
def decode_rsa_blocks(data: bytes, modulus: int, exponent: int) -> bytes:
payload = data[HEADER_SIZE:]
if len(payload) % RSA_BLOCK_SIZE == 20:
payload = payload[:-20]
if not payload or len(payload) % RSA_BLOCK_SIZE:
raise L2IniError("Некорректная длина RSA-данных")
packed = bytearray()
for offset in range(0, len(payload), RSA_BLOCK_SIZE):
encrypted_block = payload[offset : offset + RSA_BLOCK_SIZE]
encrypted_number = int.from_bytes(encrypted_block, "big")
plain_number = pow(encrypted_number, exponent, modulus)
plain_block = plain_number.to_bytes(RSA_BLOCK_SIZE, "big")
if plain_block[:3] != b"\0\0\0":
raise L2IniError("Некорректный заголовок RSA-блока")
body_length = plain_block[3]
if not 1 <= body_length <= RSA_BODY_SIZE:
raise L2IniError("Некорректный размер данных RSA-блока")
aligned_length = (body_length + 3) & ~3
body_offset = RSA_BLOCK_SIZE - aligned_length
packed.extend(plain_block[body_offset : body_offset + body_length])
if len(packed) < 10:
raise L2IniError("Сжатый поток слишком короткий")
expected_size = int.from_bytes(packed[:4], "little")
try:
plain = zlib.decompress(packed[4:])
except zlib.error as error:
raise L2IniError(f"Не удалось распаковать zlib: {error}") from error
if len(plain) != expected_size:
raise L2IniError(
"Размер после распаковки не совпал: "
f"ожидалось {expected_size}, получено {len(plain)}"
)
return plain
def decrypt_l2_ini(data: bytes) -> bytes:
last_error: Optional[Exception] = None
for modulus, exponent in DECRYPTION_KEYS:
try:
return decode_rsa_blocks(data, modulus, exponent)
except (L2IniError, OverflowError, ValueError) as error:
last_error = error
raise L2IniError("RSA-ключ не подошёл или данные повреждены") from last_error
def encrypt_l2_ini(plain: bytes) -> bytes:
packed = len(plain).to_bytes(4, "little") + zlib.compress(plain, level=9)
encrypted = bytearray(HEADER)
for offset in range(0, len(packed), RSA_BODY_SIZE):
body = packed[offset : offset + RSA_BODY_SIZE]
plain_block = bytearray(RSA_BLOCK_SIZE)
plain_block[3] = len(body)
aligned_length = (len(body) + 3) & ~3
body_offset = RSA_BLOCK_SIZE - aligned_length
plain_block[body_offset : body_offset + len(body)] = body
plain_number = int.from_bytes(plain_block, "big")
encrypted_number = pow(
plain_number, MODERN_PUBLIC_EXPONENT, MODERN_MODULUS
)
encrypted.extend(encrypted_number.to_bytes(RSA_BLOCK_SIZE, "big"))
tail = bytearray(20)
tail[12:16] = (zlib.crc32(encrypted) & 0xFFFFFFFF).to_bytes(4, "little")
encrypted.extend(tail)
return bytes(encrypted)
def replace_with_backup(path: Path, data: bytes) -> None:
backup = path.with_name(path.name + ".bak")
descriptor, temporary_name = tempfile.mkstemp(
prefix=f".{path.name}.", suffix=".tmp", dir=path.parent
)
temporary = Path(temporary_name)
try:
with os.fdopen(descriptor, "wb") as output:
output.write(data)
output.flush()
os.fsync(output.fileno())
os.chmod(temporary, path.stat().st_mode)
if not backup.exists():
shutil.copy2(path, backup)
os.replace(temporary, path)
finally:
if temporary.exists():
temporary.unlink()
def switch_l2_ini(input_path: str) -> None:
path = Path(input_path).expanduser().absolute()
if not path.is_file():
raise L2IniError(f"Файл не найден: {path}")
if path.is_symlink():
raise L2IniError(f"Символические ссылки не поддерживаются: {path}")
file_data = path.read_bytes()
if file_data.startswith(HEADER_PREFIX):
if len(file_data) < HEADER_SIZE:
raise L2IniError("Повреждён заголовок Lineage2Ver")
try:
header = file_data[:HEADER_SIZE].decode("utf-16le")
except UnicodeDecodeError as error:
raise L2IniError("Повреждён заголовок Lineage2Ver") from error
if header != HEADER_TEXT:
raise L2IniError(
f"Поддерживается только {HEADER_TEXT}, получен: {header}"
)
result = decrypt_l2_ini(file_data)
action = "Расшифрован"
else:
result = encrypt_l2_ini(file_data)
action = "Зашифрован"
replace_with_backup(path, result)
print(f"{action}: {path}")
print(f"Резервная копия: {path}.bak")
def main(arguments: Sequence[str]) -> int:
if not arguments:
print("Перетащите l2.ini на этот Python-скрипт или передайте путь аргументом.")
return 2
failed = False
for input_path in arguments:
try:
switch_l2_ini(input_path)
except (L2IniError, OSError) as error:
failed = True
print(f"Ошибка для '{input_path}': {error}", file=sys.stderr)
return 1 if failed else 0
if __name__ == "__main__":
raise SystemExit(main(sys.argv[1:]))