Пишем простой модуль Magisk для Android

  • Tutorial

Введение


Одним вечером я устал менять TTL после перезагрузки устройства и подумал как можно было бы делать это автоматически. Android же Linux и на нем должен быть аналог systemd или он сам. В процессе исследований мой взор пал на Magisk.


На удивление разработать модуль для него было очень просто.


Подготовка


Быстрым гуглением находим дефолтный модуль Magisk. Не пугайтесь того что репозиторий Archived. Так задумано. Давайте форкнем его. Это будет наша основа модуля.


├── META-INF
│   └── com
│       └── google
│           └── android
│               ├── update-binary
│               └── updater-script
├── README.md
├── common
│   ├── post-fs-data.sh
│   ├── service.sh
│   └── system.prop
├── install.sh
├── module.prop
└── system
    └── placeholder

Скрипт install.sh выполняется в момент установки. Скрипт post-fs-data.sh выполняется синхронно с загрузкой перед загрузкой зиготы. Скрипт service.sh запускается после загрузки системы асинхронно. Подробнее тут.


Модифицируем


В начале давайте поменяем module.prop. Именно там находится служебная информация по модулю. У меня получилось так:


id=yotattlfix
name=Yota TTL Fix
version=v1
versionCode=1
author=lionzxy
description=Change TTL on startup to 63
minMagisk=17000

В файле install.sh нужно, во-первых, выставить в true те вещи, которые мы будем использовать:


SKIPMOUNT=false
PROPFILE=false
POSTFSDATA=false
LATESTARTSERVICE=true 

В файле подробнейшие комментарии по каждой строчке, так что разобраться не сложно.


Далее я поправил шапку при установке


print_modname() {
  ui_print "*******************************"
  ui_print "     Magisk Yota TTL Fix       "
  ui_print "*******************************"
}

В дополнении, вы можете на этом этапе сделать проверку различных параметров. Тут обычный баш. Скорее всего, вам поможет getprop: getprop ro.product.device. Подробнее можете глянуть на своем устройстве в /system/build.prop или в гугле.


Ну и добавляем нужный нам код в common/service.sh


iptables -t mangle -A POSTROUTING -j TTL --ttl-set 63

Запускаем


Компилировать ничего не нужно. Просто запакуйте в архив :) Можете воспользоваться Github


Download ZIP


Далее открываем Magisk->Modules->Add на нашем аппарате и выбираем наш архив. Если мы попробуем запустить прям так, то увидим странную ошибку.



Пока я не сравнил свой модуль побайтово с рабочим модулем с 4pda, не понял где моя ошибка.



Для теста копируем исходник к нам в проект. И все заработает
Итого:



Публикация


У Magisk существует каталог модулей. Было бы классно туда попасть.


Все модули хранятся в организации на GitHub github.com/Magisk-Modules-Repo
Чтобы попасть туда нужно следовать ряду условий и создать Issues в главном репозитории. Однако будьте готовы что принимать его будут очень и очень долго


Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 2

    0
    Но у вас же ошибочка — для POSTROUTING задаётся 64.
    И почему бы вам заодно не добавить блэклист, на содержимое которого у Йоты аллергия?
      0
      1) Это было сделано намеренно. В случае ошибки TTL будет одинаковый (что именно и трекают операторы), так как с Linux/Mac отдается TTL 64, на телефоне срезается до 63 и сам телефон отдает 63. Таким образом, TTL отдаваемых пакетов оператору одинаковый
      2) Очень тяжело составить Blacklist с актуальными сведениями и оперативно обновлять его. Текущие списки не часто обновляются и редко можно там увидеть ложные записи. Неприятно при раздаче будет увидеть что какой-то сайт вдруг недоступен или наоборот увидеть плашку о запрете раздачи. Я пользуюсь Mac/Linux и там такой проблемы нет, соответственно я и не замотивирован. Но если будут запросы, могу сделать.

      В любом случае, статья про то как писать модули, а не про обход раздачи :)

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое