remandochka 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.1
2
+ Name: remandochka
3
+ Version: 0.0.1
4
+ Summary: RM (ReMandochka) — Высокопроизводительная библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма для плагинов exteraGram
5
+ Author: swagnonher
6
+ Requires-Python: >=3.8
7
+ Description-Content-Type: text/markdown
8
+
9
+ # RM (ReMandochka) v0.0.1 — Библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма
10
+ ### (PyPI: `ReMandochka` | Python import: `import rm`)
11
+
12
+ **ReMandochka (RM)** — инструментальная библиотека для разработчиков плагинов **exteraGram**, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая встроенный ультра-быстрый парсер документов **KDL v2 (2.0.0)** и безопасную Java-рефлексию.
13
+
14
+ - **PyPI**: `ReMandochka` (установка: `pip install ReMandochka`).
15
+ - **Импорт в плагинах**: `import rm` (краткое имя для удобства написания кода) или `import remandochka`.
16
+
17
+ ---
18
+
19
+ ## ⚡ Моментальный KDL v2/v1 парсер (`rm.kdl`)
20
+
21
+ Пакет содержит оптимизированный парсер новейшей спецификации **KDL 2.0.0** с поддержкой:
22
+ - Всех современных конструкций KDL v2 (`#true`, `#false`, `#null`, `#inf`, `#-inf`, `#nan`, шестнадцатеричные `0x...`, восьмеричные `0o...`, двоичные `0b...`, децимальные числа с экспонентой и разделителями `_`).
23
+ - Многострочных строк `""" ... """` и `#""" ... """#` с автоматическим дедентированием по спецификации KDL v2.
24
+ - Сырых строк `#"..."#`, `##"..."##`.
25
+ - Эскейп-последовательностей (`\n`, `\r`, `\t`, `\s`, `\u{1F600}`, whitespace escapes `\`).
26
+ - Комментариев `//`, вложенных блочных комментариев `/* /* ... */ */` и слешдаш-комментариев `/-` (для нод, аргументов, свойств и дочерних блоков).
27
+ - Типовых аннотаций `(type)node` и `(type)value`.
28
+ - Обратной совместимости с KDL v1 (`true`, `false`, `null`, `r"..."`).
29
+
30
+ ### Скорость парсинга
31
+ Парсинг типового конфигурационного блока плагина занимает **~100 микросекунд** (0.0001 сек) на чистом Python 3.11 без внешних бинарных зависимостей, обеспечивая 100% совместимость с Android Chaquopy (`py3-none-any.whl`).
32
+
33
+ ### Использование KDL в коде:
34
+
35
+ ```python
36
+ import rm
37
+
38
+ # 1. Быстрый парсинг KDL-строки
39
+ doc = rm.parse_kdl("""
40
+ package name="ReMandochka" version="0.0.1" {
41
+ flags active=#true debug=#false test=#null
42
+ numbers hex=0xDEAD_BEEF dec=1_000_000
43
+ multiline \"\"\"
44
+ Привет, мир!
45
+ Вторая строка с отступом.
46
+ \"\"\"
47
+ raw #"C:\\Path\\Without\\Escapes"#
48
+ (role)node (u8)255 (date)"2026-10-26"
49
+ }
50
+ """)
51
+
52
+ # 2. Доступ к узлам и свойствам
53
+ pkg = doc["package"]
54
+ print(pkg["name"]) # "ReMandochka"
55
+ print(pkg.get("version")) # "0.0.1"
56
+
57
+ flags = pkg.child("flags")
58
+ print(flags["active"]) # True
59
+
60
+ # 3. Конвертация в словарь
61
+ data_dict = doc.to_dict()
62
+
63
+ # 4. Сериализация обратно в KDL
64
+ kdl_text = rm.dumps_kdl(doc)
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 🛡️ Модуль обхода блокировок ART/R8 (`rm.Bypass`)
70
+
71
+ Архитектура типизирована по физическим барьерам ART/R8 и поддерживает моментальный прием правил конфигурации прямо из KDL-строк:
72
+
73
+ ```python
74
+ from base_plugin import BasePlugin, MethodHook
75
+ import rm
76
+
77
+ class MyPlugin(BasePlugin):
78
+ def on_plugin_load(self):
79
+ self.bypass = rm.Bypass(self)
80
+
81
+ # Можно передать правила напрямую в KDL формате!
82
+ self.bypass.apply_kdl("""
83
+ class "InstallPluginBottomSheet" full_name="com.exteragram.messenger.plugins.ui.components.InstallPluginBottomSheet" {
84
+ method "<init>" routine="constructor_trap" {
85
+ pre_caller class="com.exteragram.messenger.plugins.PythonPluginsEngine" method="showInstallDialog"
86
+ post_lifecycle class="org.telegram.ui.ActionBar.BottomSheet" method="show" filter="InstallPluginBottomSheet"
87
+ }
88
+ }
89
+ """)
90
+
91
+ @self.bypass.hook("InstallPluginBottomSheet", "<init>")
92
+ class CtorHook(MethodHook):
93
+ def before_hooked_method(self, param):
94
+ # param.args[2] — PluginInstallParams
95
+ param.args[2].setTrusted(True)
96
+
97
+ def after_hooked_method(self, param):
98
+ sheet = param.thisObject # живой экземпляр шторки
99
+
100
+ @self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
101
+ class ButtonHook(MethodHook):
102
+ def after_hooked_method(self, param):
103
+ sheet = param.thisObject
104
+ # кастомизация кнопки
105
+
106
+ self.bypass.install()
107
+
108
+ def on_plugin_unload(self):
109
+ self.bypass.uninstall()
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 🔇 Интеллектуальное логирование (Zero Log Spam)
115
+
116
+ Библиотека не засоряет логи приложения:
117
+ * Логи выводятся **ТОЛЬКО** тогда, когда в настройках плагин-системы включен **Режим разработчика (`rm.is_dev_mode() == True`)**.
118
+ * При выключенном режиме разработчика библиотека работает в режиме **полной тишины**.
119
+
120
+ ---
121
+
122
+ ## 📦 Спецификация для плагинов exteraGram
123
+
124
+ - В файлах `.plugin`:
125
+ ```python
126
+ __requirements__ = ["ReMandochka 0.0.1"]
127
+ ```
128
+ - В архивах `.elyx` (`metainfo.json`):
129
+ ```json
130
+ "requirements": "ReMandochka 0.0.1"
131
+ ```
@@ -0,0 +1,123 @@
1
+ # RM (ReMandochka) v0.0.1 — Библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма
2
+ ### (PyPI: `ReMandochka` | Python import: `import rm`)
3
+
4
+ **ReMandochka (RM)** — инструментальная библиотека для разработчиков плагинов **exteraGram**, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая встроенный ультра-быстрый парсер документов **KDL v2 (2.0.0)** и безопасную Java-рефлексию.
5
+
6
+ - **PyPI**: `ReMandochka` (установка: `pip install ReMandochka`).
7
+ - **Импорт в плагинах**: `import rm` (краткое имя для удобства написания кода) или `import remandochka`.
8
+
9
+ ---
10
+
11
+ ## ⚡ Моментальный KDL v2/v1 парсер (`rm.kdl`)
12
+
13
+ Пакет содержит оптимизированный парсер новейшей спецификации **KDL 2.0.0** с поддержкой:
14
+ - Всех современных конструкций KDL v2 (`#true`, `#false`, `#null`, `#inf`, `#-inf`, `#nan`, шестнадцатеричные `0x...`, восьмеричные `0o...`, двоичные `0b...`, децимальные числа с экспонентой и разделителями `_`).
15
+ - Многострочных строк `""" ... """` и `#""" ... """#` с автоматическим дедентированием по спецификации KDL v2.
16
+ - Сырых строк `#"..."#`, `##"..."##`.
17
+ - Эскейп-последовательностей (`\n`, `\r`, `\t`, `\s`, `\u{1F600}`, whitespace escapes `\`).
18
+ - Комментариев `//`, вложенных блочных комментариев `/* /* ... */ */` и слешдаш-комментариев `/-` (для нод, аргументов, свойств и дочерних блоков).
19
+ - Типовых аннотаций `(type)node` и `(type)value`.
20
+ - Обратной совместимости с KDL v1 (`true`, `false`, `null`, `r"..."`).
21
+
22
+ ### Скорость парсинга
23
+ Парсинг типового конфигурационного блока плагина занимает **~100 микросекунд** (0.0001 сек) на чистом Python 3.11 без внешних бинарных зависимостей, обеспечивая 100% совместимость с Android Chaquopy (`py3-none-any.whl`).
24
+
25
+ ### Использование KDL в коде:
26
+
27
+ ```python
28
+ import rm
29
+
30
+ # 1. Быстрый парсинг KDL-строки
31
+ doc = rm.parse_kdl("""
32
+ package name="ReMandochka" version="0.0.1" {
33
+ flags active=#true debug=#false test=#null
34
+ numbers hex=0xDEAD_BEEF dec=1_000_000
35
+ multiline \"\"\"
36
+ Привет, мир!
37
+ Вторая строка с отступом.
38
+ \"\"\"
39
+ raw #"C:\\Path\\Without\\Escapes"#
40
+ (role)node (u8)255 (date)"2026-10-26"
41
+ }
42
+ """)
43
+
44
+ # 2. Доступ к узлам и свойствам
45
+ pkg = doc["package"]
46
+ print(pkg["name"]) # "ReMandochka"
47
+ print(pkg.get("version")) # "0.0.1"
48
+
49
+ flags = pkg.child("flags")
50
+ print(flags["active"]) # True
51
+
52
+ # 3. Конвертация в словарь
53
+ data_dict = doc.to_dict()
54
+
55
+ # 4. Сериализация обратно в KDL
56
+ kdl_text = rm.dumps_kdl(doc)
57
+ ```
58
+
59
+ ---
60
+
61
+ ## 🛡️ Модуль обхода блокировок ART/R8 (`rm.Bypass`)
62
+
63
+ Архитектура типизирована по физическим барьерам ART/R8 и поддерживает моментальный прием правил конфигурации прямо из KDL-строк:
64
+
65
+ ```python
66
+ from base_plugin import BasePlugin, MethodHook
67
+ import rm
68
+
69
+ class MyPlugin(BasePlugin):
70
+ def on_plugin_load(self):
71
+ self.bypass = rm.Bypass(self)
72
+
73
+ # Можно передать правила напрямую в KDL формате!
74
+ self.bypass.apply_kdl("""
75
+ class "InstallPluginBottomSheet" full_name="com.exteragram.messenger.plugins.ui.components.InstallPluginBottomSheet" {
76
+ method "<init>" routine="constructor_trap" {
77
+ pre_caller class="com.exteragram.messenger.plugins.PythonPluginsEngine" method="showInstallDialog"
78
+ post_lifecycle class="org.telegram.ui.ActionBar.BottomSheet" method="show" filter="InstallPluginBottomSheet"
79
+ }
80
+ }
81
+ """)
82
+
83
+ @self.bypass.hook("InstallPluginBottomSheet", "<init>")
84
+ class CtorHook(MethodHook):
85
+ def before_hooked_method(self, param):
86
+ # param.args[2] — PluginInstallParams
87
+ param.args[2].setTrusted(True)
88
+
89
+ def after_hooked_method(self, param):
90
+ sheet = param.thisObject # живой экземпляр шторки
91
+
92
+ @self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
93
+ class ButtonHook(MethodHook):
94
+ def after_hooked_method(self, param):
95
+ sheet = param.thisObject
96
+ # кастомизация кнопки
97
+
98
+ self.bypass.install()
99
+
100
+ def on_plugin_unload(self):
101
+ self.bypass.uninstall()
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 🔇 Интеллектуальное логирование (Zero Log Spam)
107
+
108
+ Библиотека не засоряет логи приложения:
109
+ * Логи выводятся **ТОЛЬКО** тогда, когда в настройках плагин-системы включен **Режим разработчика (`rm.is_dev_mode() == True`)**.
110
+ * При выключенном режиме разработчика библиотека работает в режиме **полной тишины**.
111
+
112
+ ---
113
+
114
+ ## 📦 Спецификация для плагинов exteraGram
115
+
116
+ - В файлах `.plugin`:
117
+ ```python
118
+ __requirements__ = ["ReMandochka 0.0.1"]
119
+ ```
120
+ - В архивах `.elyx` (`metainfo.json`):
121
+ ```json
122
+ "requirements": "ReMandochka 0.0.1"
123
+ ```
@@ -0,0 +1,13 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "remandochka"
7
+ version = "0.0.1"
8
+ description = "RM (ReMandochka) — Высокопроизводительная библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма для плагинов exteraGram"
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ authors = [
12
+ { name = "swagnonher" }
13
+ ]
@@ -0,0 +1,25 @@
1
+ """
2
+ ReMandochka (RM) — PyPI package alias for `rm`.
3
+ """
4
+
5
+ from rm import *
6
+ from rm import (
7
+ __version__,
8
+ bypass,
9
+ kdl,
10
+ reflection,
11
+ parse_kdl,
12
+ dumps_kdl,
13
+ loads_kdl,
14
+ is_dev_mode,
15
+ dev_log,
16
+ get_app_version,
17
+ Bypass,
18
+ get_field,
19
+ set_field,
20
+ get_java_class,
21
+ Document,
22
+ Node,
23
+ TaggedValue,
24
+ KDLParseError,
25
+ )
@@ -0,0 +1,131 @@
1
+ Metadata-Version: 2.1
2
+ Name: remandochka
3
+ Version: 0.0.1
4
+ Summary: RM (ReMandochka) — Высокопроизводительная библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма для плагинов exteraGram
5
+ Author: swagnonher
6
+ Requires-Python: >=3.8
7
+ Description-Content-Type: text/markdown
8
+
9
+ # RM (ReMandochka) v0.0.1 — Библиотека хукинга, обхода защит ART/R8 и KDL v2 рантайма
10
+ ### (PyPI: `ReMandochka` | Python import: `import rm`)
11
+
12
+ **ReMandochka (RM)** — инструментальная библиотека для разработчиков плагинов **exteraGram**, решающая проблемы с защитами, барьерами Android Runtime (ART), компилятора R8, предоставляющая встроенный ультра-быстрый парсер документов **KDL v2 (2.0.0)** и безопасную Java-рефлексию.
13
+
14
+ - **PyPI**: `ReMandochka` (установка: `pip install ReMandochka`).
15
+ - **Импорт в плагинах**: `import rm` (краткое имя для удобства написания кода) или `import remandochka`.
16
+
17
+ ---
18
+
19
+ ## ⚡ Моментальный KDL v2/v1 парсер (`rm.kdl`)
20
+
21
+ Пакет содержит оптимизированный парсер новейшей спецификации **KDL 2.0.0** с поддержкой:
22
+ - Всех современных конструкций KDL v2 (`#true`, `#false`, `#null`, `#inf`, `#-inf`, `#nan`, шестнадцатеричные `0x...`, восьмеричные `0o...`, двоичные `0b...`, децимальные числа с экспонентой и разделителями `_`).
23
+ - Многострочных строк `""" ... """` и `#""" ... """#` с автоматическим дедентированием по спецификации KDL v2.
24
+ - Сырых строк `#"..."#`, `##"..."##`.
25
+ - Эскейп-последовательностей (`\n`, `\r`, `\t`, `\s`, `\u{1F600}`, whitespace escapes `\`).
26
+ - Комментариев `//`, вложенных блочных комментариев `/* /* ... */ */` и слешдаш-комментариев `/-` (для нод, аргументов, свойств и дочерних блоков).
27
+ - Типовых аннотаций `(type)node` и `(type)value`.
28
+ - Обратной совместимости с KDL v1 (`true`, `false`, `null`, `r"..."`).
29
+
30
+ ### Скорость парсинга
31
+ Парсинг типового конфигурационного блока плагина занимает **~100 микросекунд** (0.0001 сек) на чистом Python 3.11 без внешних бинарных зависимостей, обеспечивая 100% совместимость с Android Chaquopy (`py3-none-any.whl`).
32
+
33
+ ### Использование KDL в коде:
34
+
35
+ ```python
36
+ import rm
37
+
38
+ # 1. Быстрый парсинг KDL-строки
39
+ doc = rm.parse_kdl("""
40
+ package name="ReMandochka" version="0.0.1" {
41
+ flags active=#true debug=#false test=#null
42
+ numbers hex=0xDEAD_BEEF dec=1_000_000
43
+ multiline \"\"\"
44
+ Привет, мир!
45
+ Вторая строка с отступом.
46
+ \"\"\"
47
+ raw #"C:\\Path\\Without\\Escapes"#
48
+ (role)node (u8)255 (date)"2026-10-26"
49
+ }
50
+ """)
51
+
52
+ # 2. Доступ к узлам и свойствам
53
+ pkg = doc["package"]
54
+ print(pkg["name"]) # "ReMandochka"
55
+ print(pkg.get("version")) # "0.0.1"
56
+
57
+ flags = pkg.child("flags")
58
+ print(flags["active"]) # True
59
+
60
+ # 3. Конвертация в словарь
61
+ data_dict = doc.to_dict()
62
+
63
+ # 4. Сериализация обратно в KDL
64
+ kdl_text = rm.dumps_kdl(doc)
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 🛡️ Модуль обхода блокировок ART/R8 (`rm.Bypass`)
70
+
71
+ Архитектура типизирована по физическим барьерам ART/R8 и поддерживает моментальный прием правил конфигурации прямо из KDL-строк:
72
+
73
+ ```python
74
+ from base_plugin import BasePlugin, MethodHook
75
+ import rm
76
+
77
+ class MyPlugin(BasePlugin):
78
+ def on_plugin_load(self):
79
+ self.bypass = rm.Bypass(self)
80
+
81
+ # Можно передать правила напрямую в KDL формате!
82
+ self.bypass.apply_kdl("""
83
+ class "InstallPluginBottomSheet" full_name="com.exteragram.messenger.plugins.ui.components.InstallPluginBottomSheet" {
84
+ method "<init>" routine="constructor_trap" {
85
+ pre_caller class="com.exteragram.messenger.plugins.PythonPluginsEngine" method="showInstallDialog"
86
+ post_lifecycle class="org.telegram.ui.ActionBar.BottomSheet" method="show" filter="InstallPluginBottomSheet"
87
+ }
88
+ }
89
+ """)
90
+
91
+ @self.bypass.hook("InstallPluginBottomSheet", "<init>")
92
+ class CtorHook(MethodHook):
93
+ def before_hooked_method(self, param):
94
+ # param.args[2] — PluginInstallParams
95
+ param.args[2].setTrusted(True)
96
+
97
+ def after_hooked_method(self, param):
98
+ sheet = param.thisObject # живой экземпляр шторки
99
+
100
+ @self.bypass.hook("InstallPluginBottomSheet", "applyButtonState")
101
+ class ButtonHook(MethodHook):
102
+ def after_hooked_method(self, param):
103
+ sheet = param.thisObject
104
+ # кастомизация кнопки
105
+
106
+ self.bypass.install()
107
+
108
+ def on_plugin_unload(self):
109
+ self.bypass.uninstall()
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 🔇 Интеллектуальное логирование (Zero Log Spam)
115
+
116
+ Библиотека не засоряет логи приложения:
117
+ * Логи выводятся **ТОЛЬКО** тогда, когда в настройках плагин-системы включен **Режим разработчика (`rm.is_dev_mode() == True`)**.
118
+ * При выключенном режиме разработчика библиотека работает в режиме **полной тишины**.
119
+
120
+ ---
121
+
122
+ ## 📦 Спецификация для плагинов exteraGram
123
+
124
+ - В файлах `.plugin`:
125
+ ```python
126
+ __requirements__ = ["ReMandochka 0.0.1"]
127
+ ```
128
+ - В архивах `.elyx` (`metainfo.json`):
129
+ ```json
130
+ "requirements": "ReMandochka 0.0.1"
131
+ ```
@@ -0,0 +1,26 @@
1
+ README.md
2
+ pyproject.toml
3
+ setup.py
4
+ remandochka/__init__.py
5
+ remandochka.egg-info/PKG-INFO
6
+ remandochka.egg-info/SOURCES.txt
7
+ remandochka.egg-info/dependency_links.txt
8
+ remandochka.egg-info/top_level.txt
9
+ rm/__init__.py
10
+ rm/bypass/__init__.py
11
+ rm/bypass/bypass.py
12
+ rm/bypass/engine.py
13
+ rm/bypass/rules.jsonl
14
+ rm/bypass/rules.kdl
15
+ rm/bypass/routines/__init__.py
16
+ rm/bypass/routines/base.py
17
+ rm/bypass/routines/constructor_trap.py
18
+ rm/bypass/routines/final_devirtualized.py
19
+ rm/bypass/routines/inlined_method.py
20
+ rm/kdl/__init__.py
21
+ rm/kdl/document.py
22
+ rm/kdl/exceptions.py
23
+ rm/kdl/formatter.py
24
+ rm/kdl/node.py
25
+ rm/kdl/parser.py
26
+ rm/reflection/__init__.py
@@ -0,0 +1,2 @@
1
+ remandochka
2
+ rm
@@ -0,0 +1,85 @@
1
+ """
2
+ RM (ReMandochka) — Инструментальная библиотека для разработчиков плагинов exteraGram:
3
+ - Обход барьеров ART/R8 и хукинг (rm.bypass, rm.Bypass)
4
+ - Моментальный парсер KDL v2/v1 (rm.kdl, rm.parse_kdl)
5
+ - Безопасная Java-рефлексия с автоприведением типов (rm.reflection)
6
+ - Zero-Spam логирование и определение окружения (rm.is_dev_mode, rm.get_app_version, rm.dev_log)
7
+ """
8
+
9
+ try:
10
+ from hook_utils import find_class
11
+ except ImportError:
12
+ def find_class(_):
13
+ return None
14
+
15
+
16
+ def is_dev_mode() -> bool:
17
+ """Проверяет режим разработчика плагинов в настройках exteraGram."""
18
+ try:
19
+ c = find_class("com.exteragram.messenger.ExteraConfig")
20
+ return bool(c.getPluginsDevMode()) if c and hasattr(c, "getPluginsDevMode") else False
21
+ except Exception:
22
+ return False
23
+
24
+
25
+ def dev_log(plugin, msg: str):
26
+ """Zero Log Spam: логирует ТОЛЬКО при включенном режиме разработчика."""
27
+ if is_dev_mode():
28
+ t = f"[RM] {msg}"
29
+ if plugin and hasattr(plugin, "log"):
30
+ try:
31
+ return plugin.log(t)
32
+ except Exception:
33
+ pass
34
+ print(t)
35
+
36
+
37
+ def get_app_version() -> str:
38
+ """Определяет версию клиента exteraGram."""
39
+ try:
40
+ bv = find_class("org.telegram.messenger.BuildVars")
41
+ if bv and hasattr(bv, "BUILD_VERSION_STRING"):
42
+ return str(bv.BUILD_VERSION_STRING)
43
+ except Exception:
44
+ pass
45
+ return "13.1.1"
46
+
47
+
48
+ __version__ = "0.0.1"
49
+
50
+ from . import bypass, kdl, reflection
51
+ from .bypass import Bypass, ProtectionEngine
52
+ from .kdl import Document, KDLParseError, Node, TaggedValue, dump, dumps, load, loads, parse
53
+ from .reflection import get_field, get_java_class, set_field
54
+
55
+ # Top-level convenience functions
56
+ parse_kdl = parse
57
+ dumps_kdl = dumps
58
+ loads_kdl = loads
59
+
60
+ __all__ = [
61
+ "__version__",
62
+ "is_dev_mode",
63
+ "dev_log",
64
+ "get_app_version",
65
+ "bypass",
66
+ "Bypass",
67
+ "ProtectionEngine",
68
+ "kdl",
69
+ "reflection",
70
+ "get_java_class",
71
+ "get_field",
72
+ "set_field",
73
+ "Document",
74
+ "Node",
75
+ "TaggedValue",
76
+ "KDLParseError",
77
+ "parse",
78
+ "loads",
79
+ "load",
80
+ "dumps",
81
+ "dump",
82
+ "parse_kdl",
83
+ "dumps_kdl",
84
+ "loads_kdl",
85
+ ]
@@ -0,0 +1,8 @@
1
+ """
2
+ RM (ReMandochka) Bypass: Advanced ART/R8 protection bypass module with KDL v2 support.
3
+ """
4
+
5
+ from .bypass import Bypass
6
+ from .engine import ProtectionEngine
7
+
8
+ __all__ = ["Bypass", "ProtectionEngine"]
@@ -0,0 +1,57 @@
1
+ """
2
+ RM (ReMandochka) Bypass: Developer-facing hook interface with KDL support.
3
+ """
4
+
5
+ from typing import Any, Optional, Union
6
+ from .engine import ProtectionEngine
7
+
8
+
9
+ class Bypass:
10
+ """
11
+ Обход защиты хуков RM (ReMandochka).
12
+ Предоставляет чистый, простой и ультра-быстрый API для плагин-мейкеров.
13
+ Поддерживает моментальную загрузку конфигураций и правил в формате KDL v2.
14
+ """
15
+
16
+ def __init__(self, plugin_instance, rules_path: Optional[str] = None):
17
+ self.plugin = plugin_instance
18
+ self.engine = ProtectionEngine(plugin_instance, rules_path)
19
+
20
+ def apply_kdl(self, kdl_text: str):
21
+ """
22
+ Моментально парсит и применяет конфигурацию правил обхода из KDL-строки.
23
+ """
24
+ self.engine.load_kdl_rules(kdl_text)
25
+ return self
26
+
27
+ def hook_method(self, target_class: Union[str, Any], method_name: str, hook_handler: Any):
28
+ """
29
+ Регистрирует хук на метод или конструктор любого защищенного класса.
30
+ """
31
+ cname = target_class if isinstance(target_class, str) else target_class.__name__
32
+ self.engine.register_hook(cname, method_name, hook_handler)
33
+ return self
34
+
35
+ def hook(self, target_class: Union[str, Any], method_name: str):
36
+ """
37
+ Декоратор для классов MethodHook / MethodReplacement.
38
+
39
+ Пример:
40
+ @bypass.hook("InstallPluginBottomSheet", "startAnalysis")
41
+ class MyHook(MethodHook):
42
+ def before_hooked_method(self, param):
43
+ param.returnEarly = True
44
+ """
45
+ def decorator(cls_or_instance):
46
+ instance = cls_or_instance() if isinstance(cls_or_instance, type) else cls_or_instance
47
+ self.hook_method(target_class, method_name, instance)
48
+ return cls_or_instance
49
+ return decorator
50
+
51
+ def install(self) -> bool:
52
+ """Активирует движок обхода защит."""
53
+ return self.engine.activate()
54
+
55
+ def uninstall(self):
56
+ """Снимает все хуки."""
57
+ self.engine.deactivate()