todo/root/LSPosed.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

174 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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.08.1** — на новых версиях не работает.
- **LSPosed** — преемник (через промежуточный EdXposed), даёт **полную совместимость с Xposed API**: модуль под Xposed работает под LSPosed и наоборот. Оригинальный LSPosed поддерживал **Android 8.114**, а актуальные форки (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 810), **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).