Rozglądając się po moim systemie plików Androida, zauważyłem, że tak, w rzeczywistości ma /etc/init.d/
katalog. Po rozejrzeniu się, znalazłem /etc/init.d/20userinit
następujące linie:
if [ -e /data/local/userinit.sh ];
then
log -p -i -t userinit "Executing /data/local/userinit.sh";
busybux chmod +x /data/local/userinit.sh;
logwrapper /system/bin/sh /data/local/userinit.sh;
setprop cm.userinit.active 1;
fi;
Jest to oczywiście dokładnie to , czego potrzebowałem, napisałem następujący skrypt na moim komputerze, a następnie wypchnąłem go na urządzenie:
#!/system/bin/sh
dropbear -s -g
(przekazane do urządzenia za pośrednictwem scp userinit.sh phone:/data/local/userinit.sh
, pamiętaj:))
Uruchom ponownie urządzenie, a następnie uruchomione ps | grep "[d]ropbear"
i na pewno działa. Chłód!
/data/init.sh
uruchamia się przy rozruchu, jeśli masz root, możesz go edytować tak, jak chcesz. Bądź ostrożny ;)Edycja: Najwyraźniej może być konieczne dodanie edytowanego skryptu do obrazu rozruchowego. Informacje o tym, jak to zrobić tutaj: http://forum.xda-developers.com/showthread.php?t=443994
źródło
find / -name "init.sh"
coś się pojawi . Czy są jakieś inne skrypty uruchamiane przy starcie systemu?/etc/init.rc
który uruchamia powłokę. Powinien wywołać init.sh, ale jeśli nie, możesz po prostu wywołać własny skrypt./data
ale nie ma/data/init/.sh
lub/etc/init.rc
. Grep nie znajdzie jakieś ciekawe wystąpienie napisuinit
w/etc
(nawet rekurencyjne).Zajrzyj do
/etc/
katalogu. Zwykle umieszczany jest na/system/
partycji, którą można zamontować jako RW:Niektóre powyższe kroki mogą zostać zastąpione przez:
a później ponownie zamontować RO:
Teraz Twoim zadaniem jest znalezienie pliku wykonywalnego lub
*rc
pliku, który zmodyfikujesz, aby osiągnąć swój cel:Google o każdym kandydacie, aby dowiedzieć się, jak ten plik został wykorzystany.
Dobrym kandydatem do włączenia niestandardowych skryptów są wiersze z:
Ponieważ każde urządzenie jest unikalne, konieczne może być odgadnięcie kryteriów wyszukiwania ...
Na przykład znalazłem,
/etc/mkshrc
który używany przez powłokę Korna. Aktualizuję ten plik, aby rozszerzyćPATH
env var, a teraz za każdym razem mamadb shell
w swojej ŚCIEŻCE dowiązania symboliczne Busybox!Zobacz także trudny sposób (jeśli nie masz szczęścia ze znalezieniem magicznego pliku): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
źródło
/system
jestsystem.img
i/etc
jest dowiązaniem symbolicznym do/system
.Wypróbowałem wszystkie te metody i żadna z nich nie działała dla mnie. Jednak to, co zadziałało, opierało się na odpowiedzi lorda-ralfa-adolfa tutaj Jak uruchomić skrypt przy rozruchu w CM12.1?
w zasadzie znajdź plik
/system/etc/install-recovery.sh
i dodaj następujący wiersz na początku/data/init.sh &
następnie
Gotowy! Możesz teraz włożyć wszystko, co chcesz,
/data/init.sh
i będzie działać podczas uruchamiania. Jeśli pliku/system/etc/install-recovery.sh
nie ma w systemie, ta odpowiedź nie zadziała. Nie zawracaj sobie głowy tworzeniem go.źródło
/system/etc/install-recovery.sh
nie był obecny, ale nadal jest uruchamiany przy rozruchu, jeśli jest obecny, więc warto to sprawdzić.Przed Androidem 5 sprawy były proste, kiedy SELinux nie był
enforcing
. Możesz umieścić swój kod w dowolnym skrypcie lub zastąpić plik binarny skryptem, który został uruchomiony z uprawnieniami roota podczas rozruchu. Inną metodą było zdefiniowanieinit
usługi niestandardowej specjalnie w celu wykonywania skryptów wsadowych z jakiegoś katalogu.Na podstawie tych podejść niestandardowe programistów ROM wprowadzony inny pseudo
init.d
zjawiska jak/etc/init.d/
,/etc/install-recovery.sh
,/etc/init.qcom.post_boot.sh
,/system/bin/debuggerd
,/data/init.sh
,/data/local/userinit.sh
,/data/local/init.d/
itd.Jednak proces działający z UID,
0
ale w ograniczonym kontekście SELinux jest dość bezradny. Usługa rozpoczęła się winit.rc
pliku zu:r:init:s0
kontekstu nawet nie może uruchomić skrypt z/system/bin/
, więc polityka SELinux musi być poprawione do wstrzykiwania nieograniczony kontekst np Magisk definiujeu:r:magisk:s0
. Następnie możliwe jest uruchomienie skryptu bezpośrednio jakoinit
usługa lub zinit.d
katalogu podobnego do.Aby uzyskać szczegółowe informacje, zobacz Jak uruchomić plik wykonywalny podczas rozruchu i utrzymać go w działaniu?
źródło
Prosty sposób (działa):
Przygotuj polecenia post boot w skrypcie, powiedz / system / xbin / post-boot (ustaw perm perm)
Dodaj powyższą niestandardową ścieżkę skryptu na końcu pliku /system/etc/init.qcom.post_boot.sh
Na przykład:
echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh
Gotowy!
(Jeśli nie możesz znaleźć qcom post_boot (urządzenia Qualcomm), poszukaj skryptów post_boot)
źródło
Jeśli masz zainstalowany magisk , możesz umieścić .sh w:
lub
Nie zapomnij, aby uczynić go wykonywalnym:
chmod +x your-script.sh
.Więcej informacji: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
źródło