Skip to main content

RM (ReMandochka) v0.0.6 — Библиотека хукинга, обхода защит ART/R8, UI и KDL v2 рантайма

(PyPI: remandochka | Python import: import rm или import remandochka)

ReMandochka (RM) — высокопроизводительная инструментальная библиотека для разработчиков плагинов exteraGram, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая архитектурный каркас UI компонентов, встроенный ультра-быстрый парсер документов KDL v2 (2.0.0) и безопасную Java-рефлексию.

  • PyPI: remandochka (установка: pip install remandochka).
  • Сборщик: Hatchling (PEP 621 / pyproject.toml).
  • Архитектура: 1 единственный __init__.py на всю библиотеку без лишнего бойлерплейта.
  • Производительность: оптимизирована под мульти-плагинный сценарий (кэширование дескрипторов полей, JNI-классов, версий, memoization KDL, мультиплексирование хуков).
  • Импорт в плагинах: import rm или import remandochka.

⚡ Структура библиотеки (src/)

  • remandochka.core:
    • rm.parse_kdl(text) / rm.dumps_kdl(doc): моментальный парсер KDL 2.0.0 (~100 микросекунд с LRU-кэшем).
    • rm.is_dev_mode(), rm.dev_log(plugin, msg): Zero Log Spam логирование (TTL-кэшировано).
    • rm.get_app_version(): автоопределение версии клиента Telegram / exteraGram.
    • rm.get_field(), rm.set_field(), rm.get_java_class(): безопасная Java-рефлексия с кэшированием Field и JNI-классов.
  • remandochka.bypass:
    • rm.Bypass(plugin): фасад управления хуками с защитой от дублирования и безопасной выгрузкой плагинов.
    • @bypass.hook("ClassName", "methodName"): декоратор для классов MethodHook или функций.
    • Внешняя база правил: remandochka/resources/rules.jsonl.
  • remandochka.ui:
    • views: View, SheetView, DialogView, PanelView.
    • cells: Cell, HeaderCell, TextCell, ButtonCell, SwitchCell, InputCell.
    • fragment: BaseFragment, SettingsFragment, TabFragment.
    • layout: LinearLayout, FrameLayout, ScrollLayout, StackLayout.
    • components: BadgeComponent, AvatarComponent, ProgressBarComponent, SearchBarComponent, DividerComponent, IconComponent, ActionSheetComponent.

⚡ Моментальный KDL v2/v1 парсер (rm.parse_kdl)

Пакет содержит оптимизированный парсер новейшей спецификации KDL 2.0.0 с поддержкой:

  • Всех современных конструкций KDL v2 (#true, #false, #null, #inf, #-inf, #nan, шестнадцатеричные 0x..., восьмеричные 0o..., двоичные 0b..., децимальные числа с экспонентой и разделителями _).
  • Многострочных строк """ ... """ и #""" ... """# с автоматическим дедентированием по спецификации KDL v2.
  • Сырых строк #"..."#, ##"..."##.
  • Эскейп-последовательностей (\n, \r, \t, \s, \u{1F600}, whitespace escapes \).
  • Комментариев //, вложенных блочных комментариев /* /* ... */ */ и слешдаш-комментариев /- (для нод, аргументов, свойств и дочерних блоков).
  • Типовых аннотаций (type)node и (type)value.

Использование KDL в коде:

import rm

# 1. Быстрый парсинг KDL-строки
doc = rm.parse_kdl("""
package name="ReMandochka" version="0.0.6" {
    flags active=#true debug=#false test=#null
    numbers hex=0xDEAD_BEEF dec=1_000_000
    multiline \"\"\"
        Привет, мир!
        Вторая строка с отступом.
        \"\"\"
    raw #"C:\\Path\\Without\\Escapes"#
    (role)node (u8)255 (date)"2026-10-26"
}
""")

# 2. Доступ к узлам и свойствам
pkg = doc["package"]
print(pkg["name"])              # "ReMandochka"
print(pkg.get("version"))        # "0.0.6"

flags = pkg.child("flags")
print(flags["active"])           # True

# 3. Конвертация в словарь
data_dict = doc.to_dict()

# 4. Сериализация обратно в KDL
kdl_text = rm.dumps_kdl(doc)

🛡️ Модуль обхода блокировок ART/R8 (rm.Bypass)

from base_plugin import BasePlugin, MethodHook
import rm

class MyPlugin(BasePlugin):
    def on_plugin_load(self):
        self.bypass = rm.Bypass(self)

        @self.bypass.hook("InstallPluginBottomSheet", "<init>")
        class CtorHook(MethodHook):
            def before_hooked_method(self, param):
                # param.args[2] — PluginInstallParams
                param.args[2].setTrusted(True)

            def after_hooked_method(self, param):
                sheet = param.thisObject # живой экземпляр шторки

        @self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
        class ButtonHook(MethodHook):
            def after_hooked_method(self, param):
                sheet = param.thisObject
                # кастомизация кнопки

        self.bypass.install()

    def on_plugin_unload(self):
        self.bypass.uninstall()

🎨 Модуль UI (rm.ui)

Архитектурный каркас для построения интерфейсов плагинов exteraGram:

import rm
from rm.ui.views import SheetView
from rm.ui.cells import HeaderCell, TextCell, SwitchCell, ButtonCell
from rm.ui.layout import LinearLayout
from rm.ui.components import BadgeComponent, AvatarComponent

sheet = SheetView(title="Настройки плагина")
layout = LinearLayout(orientation="vertical", spacing=8)

layout.add(AvatarComponent(initials="RM", size=48))
layout.add(BadgeComponent(text="Beta", color="#4CAF50"))
layout.add(HeaderCell("Основное"))
layout.add(TextCell("Статус", "Активен"))
layout.add(SwitchCell("Авто-обновление", value=True))
layout.add(ButtonCell("Сохранить", on_click=lambda: print("Saved!")))

sheet.add_child(layout)

🔇 Интеллектуальное логирование (Zero Log Spam)

Библиотека не засоряет логи приложения:

  • Логи выводятся ТОЛЬКО тогда, когда в настройках плагин-системы включен Режим разработчика (rm.is_dev_mode() == True).
  • При выключенном режиме разработчика библиотека работает в режиме полной тишины.

📦 Спецификация для плагинов exteraGram

  • В файлах .plugin:
    __requirements__ = ["remandochka 0.0.6"]
    
  • В архивах .elyx (metainfo.json):
    "requirements": "remandochka 0.0.6"
    

Metadata

Release files for remandochka 0.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for remandochka 0.0.7
File Size Uploaded Provenance
remandochka-0.0.7.tar.gz 25.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for remandochka 0.0.7
File Interpreter ABI Platform
remandochka-0.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 54.2 kB

Release files / remandochka-0.0.7.tar.gz

Download URL remandochka-0.0.7.tar.gz
Size 25.3 kB
Tags Source
SHA-256 checksum
How to use checksums
57ec83b71bb0bb91f02b0da0425b978205053c524ca3dba598aff9d5bcfc94e7
BLAKE2b-256 checksum
How to use checksums
06cf8f929bd0304454685c5d457c61e6b2a21b543e57282152b6c6e6282795c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / remandochka-0.0.7-py3-none-any.whl

Download URL remandochka-0.0.7-py3-none-any.whl
Size 28.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b7b73b07e5f4de5a752b1d10a753676c8a931cdd00a8f165be886ba8b525171
BLAKE2b-256 checksum
How to use checksums
edacbf4fa3861e4b261a93ba4f465b117920e64cf7ea6c79afd22f0e9b542cd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Security for remandochka 0.0.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page