Напишу просто чтобы сохранить изыскания.
Есть Андроид, версия ядра 4.9.113. Задача - отключить Selinux, чтобы не мешал.
Как известно, в релизных билдах Андроид отключение Selinux невозможно - поэтому патчим ядро.
Настройка режима Selinux в ядре хранится в переменной selinux_enforcing. Чтобы отключить - требуется установить значение переменной в 0.
Открываем ядро в IDA (предварительно обрабатываем ядро замечательной утилитой vmlinux-to-elf). Находим XREFы:
Нас интересуют два STR, которые записывают значение переменной.
Первое:
FFFFFF80093EDDCC C0 2E 05 B9 STR W0, [X22,#selinux_enforcing@PAGEOFF]
меняем на
FFFFFF80093EDDCC DF 2E 05 B9 STR WZR, [X22,#selinux_enforcing@PAGEOFF]
Второе
FFFFFF800A219A44 01 2C 05 B9 STR W1, [X0,#selinux_enforcing@PAGEOFF]
меняем на
FFFFFF800A219A44 1F 2C 05 B9 STR WZR, [X0,#selinux_enforcing@PAGEOFF]
Возможно, достаточно пропатчить только одно из них - но мне не сложно и оба.
Загружаемся в патченный Image, подключаемся по ADB:
Видим, что в adb shell заработало то, что ранее было недоступно.