Найти тему
mamaich

Патчим образ Linux kernel для отключения selinux

Напишу просто чтобы сохранить изыскания.

Есть Андроид, версия ядра 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:

-2

Видим, что в adb shell заработало то, что ранее было недоступно.