Some checks failed
Published content check / validate (push) Failing after 3s
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
174 lines
23 KiB
Markdown
174 lines
23 KiB
Markdown
---
|
||
date: 2026-07-18
|
||
tags:
|
||
- root
|
||
- android
|
||
- xposed
|
||
- lsposed
|
||
- module
|
||
- zygisk
|
||
aliases:
|
||
- LSPosed
|
||
- Xposed
|
||
- Xposed Framework
|
||
- LSPatch
|
||
- что такое LSPosed
|
||
link: https://github.com/LSPosed/LSPosed
|
||
---
|
||
|
||
# 🧩 LSPosed и Xposed — модификация приложений в рантайме
|
||
|
||
> [!info] О чём заметка
|
||
> **Xposed** — фреймворк, позволяющий менять поведение системы и приложений Android «на лету», **перехватывая вызовы методов**, без перепрошивки и без правки самих APK. **LSPosed** — его современный преемник, работающий на новых версиях Android поверх [[root/Magisk#Zygisk|Zygisk]]. Заметка объясняет, что это такое, как устроено, чем отличается от [[root/Magisk#Модули (systemless-моды)|модулей Magisk]], как ставится и какие есть подводные камни. LSPosed **требует root** ([[root/Magisk|Magisk]] или [[root/ReSukiSU|KernelSU/APatch]] с Zygisk).
|
||
|
||
> [!warning] Статус на июль 2026: оригинальный LSPosed заброшен — используйте форк
|
||
> Оригинальный проект `LSPosed/LSPosed` фактически перестал развиваться в конце 2023 (последний релиз — **v1.9.2, 11 октября 2023**), а на GitHub помечен как архивный/read-only ([дата архива — 2 мая 2026](https://github.com/LSPosed/LSPosed); сворачивание шло стадиями 2024→2026). Команда назвала причиной не технические проблемы, а выгорание от травли в сообществе. Живое развитие продолжают **форки**. На июль 2026 наиболее актуальный — **[JingMatrix/Vector](https://github.com/JingMatrix/Vector)** (переименованный из `JingMatrix/LSPosed`, Vector 2.0 от 22 марта 2026, поддержка вплоть до Android 17 beta). Это по сути проект одного мейнтейнера, поэтому **перед установкой проверьте, что он всё ещё активен**. Название «LSPosed» в обиходе осталось, но качать нужно поддерживаемую сборку.
|
||
|
||
## TL;DR
|
||
|
||
- **Xposed** (автор — rovo89) меняет поведение приложений, **перехватывая методы в памяти**. Ничего на диске не меняется: отключил модуль, перезагрузился — всё как было.
|
||
- **LSPosed** — современная реализация Xposed (на базе хук-движка **LSPlant**), работает как **[[root/Magisk#Zygisk|Zygisk]]-модуль** и внедряется в процесс **Zygote**, из которого рождаются все приложения.
|
||
- **Отличие от модулей Magisk:** Magisk-модуль подменяет **файлы** системы (systemless-оверлей), а LSPosed-модуль **перехватывает логику** конкретного приложения в рантайме.
|
||
- **Нужен root** с Zygisk: Magisk (Zygisk встроен) или KernelSU/APatch + отдельная реализация Zygisk (ReZygisk/NeoZygisk).
|
||
- **Классический Xposed мёртв** (максимум Android 8.1); современный Android держит только LSPosed/форки.
|
||
- **Без root** есть родственник — **LSPatch**: патчит один APK, но не умеет системные хуки (см. ниже).
|
||
|
||
## Что такое Xposed и зачем он
|
||
|
||
**Xposed Framework** создал разработчик **rovo89**. Его идея: дать возможность **менять поведение системы и приложений, не трогая ни один APK и не перепрошивая ROM**. Вместо правки кода приложения Xposed **перехватывает вызовы его методов** и позволяет вставить свой код до и после оригинального метода (или подменить результат).
|
||
|
||
Почему это ценно:
|
||
|
||
- **Работает между версиями приложений и разными прошивками** — пока разработчик приложения не переписал код слишком сильно, один и тот же модуль продолжает работать после обновлений.
|
||
- **Обратимость.** Все изменения — в оперативной памяти, на диске ничего не меняется. Чтобы вернуть систему в исходное состояние, достаточно **выключить модуль и перезагрузиться**.
|
||
- **Несколько модулей могут менять один и тот же метод.** С пропатченным APK пришлось бы выбирать одну модификацию; Xposed складывает хуки по приоритету и вызывает их вложенно.
|
||
|
||
**Проще говоря:** Xposed — это как «система модулей», но вместо подмены файлов она **вклинивается в работу приложения во время выполнения** и правит его поведение на ходу. Отсюда и сравнение из сообщества: «это как модули Magisk, но работает в рантайме, а не меняет саму систему».
|
||
|
||
## Как это работает: Zygote и перехват методов
|
||
|
||
Чтобы фреймворк мог влиять сразу на все приложения, он внедряется в один особый процесс — **Zygote**.
|
||
|
||
**Zygote** — это «процесс-заготовка» Android: при загрузке он предзагружает общие классы, а затем **каждое приложение запускается как его копия (fork)**. Раз все приложения ответвляются от Zygote, то код, внедрённый в Zygote, автоматически оказывается **в каждом приложении**.
|
||
|
||
- **Классический Xposed** добивался этого, подменяя системный бинарник `app_process` и подгружая свой `XposedBridge.jar` раньше старта Zygote. Именно из-за этой грубой подмены он и несовместим с современным Android.
|
||
- **LSPosed** так больше не делает: он внедряется в Zygote через **[[root/Magisk#Zygisk|Zygisk]]** (или устаревший Riru), а сам перехват методов выполняет библиотекой **LSPlant** (хук ART — Android Runtime). Результат тот же — Xposed-совместимые хуки, — но механизм современный и не ломает систему.
|
||
|
||
**Проще говоря:** LSPosed «садится» в фабрику приложений (Zygote), поэтому его хуки наследует каждое запускаемое приложение; а чем именно перехватывать методы, занимается движок LSPlant.
|
||
|
||
## LSPosed против классического Xposed
|
||
|
||
- **Классический Xposed (rovo89)** официально жил только на **Android 4.0–8.1** — на новых версиях не работает.
|
||
- **LSPosed** — преемник (через промежуточный EdXposed), даёт **полную совместимость с Xposed API**: модуль под Xposed работает под LSPosed и наоборот. Оригинальный LSPosed поддерживал **Android 8.1–14**, а актуальные форки (Vector) — **вплоть до Android 16/17 beta**.
|
||
|
||
Так что сегодня «Xposed» на практике почти всегда означает **LSPosed или его форк**.
|
||
|
||
### Zygisk и Riru — два способа попасть в Zygote
|
||
|
||
И **Zygisk**, и **Riru** решают одну задачу — внедрить код в Zygote. **Riru** — старый отдельный модуль-прослойка. **[[root/Magisk#Zygisk|Zygisk]]** («Zygote + Magisk») — встроенный в Magisk механизм (появился в Magisk v24), пришедший на смену Riru; он же лучше дружит со скрытием root. Сегодня стандарт — **Zygisk**, Riru считается устаревшим.
|
||
|
||
## Чем LSPosed-модуль отличается от модуля Magisk
|
||
|
||
Это частая путаница, поэтому разложим явно:
|
||
|
||
| | Модуль [[root/Magisk|Magisk]] | Модуль LSPosed / Xposed |
|
||
| --- | --- | --- |
|
||
| Что делает | подменяет/добавляет **файлы** системы (systemless-оверлей) | **перехватывает методы** приложения в рантайме |
|
||
| Где действует | на уровне файлов (`/system`, prop, библиотеки) | внутри процесса конкретного приложения (в памяти) |
|
||
| Когда нужен | заменить файл, свойство, установить системное приложение | точечно изменить **логику** приложения/системы |
|
||
| Устойчивость к обновлению приложения | не связана с приложением | часто переживает обновления, пока не переписан код метода |
|
||
|
||
**Проще говоря:** Magisk-модуль меняет **что лежит** в системе, а LSPosed-модуль меняет **как ведёт себя** приложение. Это дополняющие инструменты, а не конкуренты.
|
||
|
||
## Требования и установка
|
||
|
||
> [!important] Нужен root с включённым Zygisk
|
||
> - **[[root/Magisk|Magisk]] 24.0+ (лучше 26.0+)** с включённым Zygisk: Magisk → Настройки → **Zygisk → Enable** (см. [[root/Magisk-install|установку Magisk]]).
|
||
> - **[[root/ReSukiSU|KernelSU]] или APatch** — у них **нет встроенного Zygisk**, поэтому нужна **отдельная реализация**: ReZygisk / NeoZygisk (для Vector автор рекомендует NeoZygisk). Ставится Zygisk-провайдер, затем LSPosed. (На Magisk наоборот: если ставите сторонний провайдер — встроенный Zygisk сначала выключают.)
|
||
|
||
Порядок установки (по официальной инструкции):
|
||
|
||
- [ ] Скачать **zip** LSPosed/Vector из GitHub Releases поддерживаемого форка.
|
||
- [ ] В Magisk (или KernelSU/APatch) → вкладка **Модули** → **Установить из хранилища** → выбрать zip.
|
||
- [ ] Убедиться, что **Zygisk активен** (включён в Magisk либо стоит ReZygisk/NeoZygisk).
|
||
- [ ] **Перезагрузиться.**
|
||
- [ ] Дождаться **уведомления «LSPosed активен»** и **нажать на него** — откроется LSPosed Manager. По умолчанию **иконки в лаунчере нет**, вход именно через уведомление.
|
||
|
||
### LSPosed Manager: включить модуль и — обязательно — задать область (scope)
|
||
|
||
Модуль LSPosed ставится как **обычное приложение** (APK). После установки в **LSPosed Manager → Модули**:
|
||
|
||
1. Открыть модуль и **включить переключатель** («Enable»).
|
||
2. **Задать «Область» (Scope)** — отметить **конкретные приложения** (и/или «Системный фреймворк»), к которым модуль применяется.
|
||
|
||
> [!warning] Забыть область (scope) — причина №1 «модуль не работает»
|
||
> Самая частая ошибка: модуль включён, но **область не отмечена** — тогда он выглядит установленным и активным, но **ничего не делает**. Например, для твика лаунчера нужно отметить и **«Системный фреймворк» (System Framework)**, и сам **лаунчер**. Если список области пуст, модуль не запускается. Всегда проверяйте scope.
|
||
|
||
### Где брать модули и примеры
|
||
|
||
Модули берут из **репозитория** (браузится прямо в LSPosed Manager, онлайн — `modules.lsposed.org`) и ставят как обычные приложения. Несколько реальных примеров (что делают):
|
||
|
||
- **YouTube AdAway** (wanam) — убирает рекламу в официальном приложении YouTube, включает фоновое воспроизведение.
|
||
- **ReVanced Xposed** — патчи YouTube / YT Music (реклама, SponsorBlock, фон) через LSPosed вместо пропатченного APK.
|
||
- **Privacy Kit** — подмена (спуфинг) идентификаторов устройства **по приложениям**.
|
||
- **Hide My Applist (HMA OSS)** — скрывает выбранные установленные приложения от других приложений, лаунчера и настроек.
|
||
- **Enable Screenshot** (бывш. Disable FLAG_SECURE) — разрешает скриншоты там, где приложение их запрещает.
|
||
- **PlayVersionSpoofer** — подменяет версию Play Store, чтобы тот не обновлял сам себя.
|
||
|
||
## LSPatch — Xposed без root
|
||
|
||
**LSPatch** — «безрутовый» вариант на базе LSPosed. Вместо системного внедрения через Zygisk он **встраивает Xposed-модуль прямо в целевой APK** и пересобирает его. Root не нужен (требуется Android 9+), патчить можно на телефоне (`manager.apk`) или на ПК (`java -jar lspatch.jar`).
|
||
|
||
| | LSPosed | LSPatch |
|
||
| --- | --- | --- |
|
||
| Root | нужен (Magisk/Zygisk) | **не нужен** |
|
||
| Охват | системно, все приложения | **только один пропатченный APK** |
|
||
| Хук системного фреймворка | да | **нет** |
|
||
| Обновление приложения | не мешает | **нужно перепатчивать APK заново** |
|
||
|
||
Ограничения LSPatch: **нельзя хукать системный фреймворк** (модули вроде подмены геолокации не работают), после каждого обновления приложение надо патчить заново, теряется оригинальная подпись APK (ломает приложения и обновления из магазина, зависящие от подписи), часть приложений после патча не запускается.
|
||
|
||
> [!note] Не путайте LSPosed и LSPatch
|
||
> Названия похожи, суть разная. **LSP*osed*** — с root, системно, хукает всё. **LSP*atch*** — без root, патчит **по одному APK** и не умеет системные хуки. Частая путаница: люди ставят LSPatch, ждут поведения LSPosed и удивляются, что «модуль включён, а замена в системе не работает».
|
||
|
||
## Скрытие от приложений и детект
|
||
|
||
Приложения (особенно **банковские**) умеют **обнаруживать LSPosed**. Полностью спрятать его нельзя — это [[root/Magisk#DenyList и скрытие root|та же «гонка вооружений»]], что и со скрытием root. Что помогает:
|
||
|
||
- **Не добавлять чувствительные приложения в область (scope)** модулей вообще.
|
||
- **Shamiko** (скрывает root/Zygisk/LSPosed) — работает в связке с DenyList Magisk, но при **выключенном** «Enforce DenyList». Важный нюанс: включённый «Enforce DenyList» на приложении **убивает в нём и LSPosed-модули**, поэтому пользователи LSPosed берут **Shamiko**, а не Enforce DenyList.
|
||
- Для **Play Integrity / SafetyNet** — DenyList + Shamiko помогают пройти базовые уровни у «дружелюбных» приложений; строгие (аппаратные) уровни с активным LSPosed, как правило, **не проходятся**. Результат зависит от приложения и устройства.
|
||
|
||
## Риски и подводные камни
|
||
|
||
> [!danger] Модуль Xposed имеет огромные права
|
||
> LSPosed-модуль исполняется **внутри процессов других приложений** и может перехватывать и переписывать любые их методы — то есть в принципе способен читать и менять что угодно в приложениях, которые он хукает (включая данные банковских). **Ставьте только доверенные, желательно открытые модули.** OWASP MASTG относит Xposed к инструментам инструментирования/подмены.
|
||
|
||
- **Бутлупы и вылеты.** Сломанный или несовместимый модуль может уронить приложение (классика — модуль текстов песен ронял Spotify) или всё устройство в бутлуп. Восстановление: загрузиться в **Safe Mode** (отключает все модули Magisk, включая LSPosed) → перезагрузиться → выключить виновный модуль; в тяжёлом случае удалить конфиг `/data/adb/lspd` через root-файлменеджер/recovery. Держите бэкап `boot.img`/`init_boot.img`.
|
||
- **Несовпадение API (актуальная причина «модуль не грузится»).** Экосистема переходит с **libxposed API 100 на 101** (несовместимое изменение). Vector 2.0 реализует только **API 100**, поэтому модули, требующие 101, не загрузятся — проверяйте требуемую версию API у модуля.
|
||
- **Быстрое устаревание.** Весь стек волатилен: фреймворки архивируются (LSPosed, Shamiko, Zygisk Next, ReLSPosed — всё в разное время ушло в архив), мейнтейнеры уходят, модули ломаются на каждом новом Android. Считайте, что любой модуль или форк может в любой момент остаться без поддержки.
|
||
|
||
## Экосистема и форки (на июль 2026)
|
||
|
||
Из-за постоянной смены мейнтейнеров «канонический» форк меняется. Ориентиры на июль 2026 (проверяйте актуальность — всё датировано):
|
||
|
||
- **[JingMatrix/Vector](https://github.com/JingMatrix/Vector)** — самый живой преемник (переименован из `JingMatrix/LSPosed`), Vector 2.0 от 22.03.2026, Android 8.1→17 beta. **Рекомендуемая сборка сегодня**, но одноручный проект.
|
||
- **[mywalkb/LSPosed_mod](https://github.com/mywalkb/LSPosed_mod)** — популярный форк (в т.ч. под Android 15), но активность мейнтейнера снизилась.
|
||
- **ThePedroo/ReLSPosed** — усиленный форк Vector, **уже заархивирован (февраль 2026)** — мёртв.
|
||
- **Отдельные Zygisk-провайдеры** для KernelSU/APatch: **[ReZygisk](https://github.com/PerformanC/ReZygisk)** (открытый), **[NeoZygisk](https://github.com/JingMatrix/NeoZygisk)** (открытый, от автора Vector), **Zygisk Next** (стал закрытым).
|
||
- **Мёртвые/легаси альтернативы:** оригинальный Xposed (rovo89, ≤ Android 8.1), **EdXposed** (заброшен, Android 8–10), **Dreamland** (неактивен).
|
||
|
||
## 📚 См. также
|
||
|
||
- [[root/Magisk|Magisk — systemless-root и модули]] — root и **Zygisk**, на котором работает LSPosed; там же про DenyList и скрытие
|
||
- [[root/Magisk-install|Установка Magisk]] — как включить Zygisk (нужен для LSPosed)
|
||
- [[root/ReSukiSU|ReSukiSU/KernelSU]] — root через ядро; для LSPosed нужен отдельный Zygisk (ReZygisk/NeoZygisk)
|
||
- [[Zapret/android|Обход блокировок на Android]] — смежная тема: DPI и блокировки на телефоне
|
||
- 🔗 [LSPosed (оригинал, архив)](https://github.com/LSPosed/LSPosed) · [JingMatrix/Vector (актуальный форк)](https://github.com/JingMatrix/Vector) · [LSPatch](https://github.com/LSPosed/LSPatch)
|
||
- 🔗 [LSPlant — движок хука ART](https://github.com/LSPosed/LSPlant) · [туториал Xposed (rovo89)](https://github.com/rovo89/xposedbridge/wiki/development-tutorial)
|
||
- 🔗 [KernelSU FAQ — почему нужен отдельный Zygisk](https://kernelsu.org/guide/faq.html) · [OWASP MASTG: Xposed](https://mas.owasp.org/MASTG/tools/android/MASTG-TOOL-0027/)
|
||
|
||
---
|
||
|
||
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
|
||
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/root/LSPosed.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).
|