wtorek, 30 grudnia 2014

Rootowanie Samsung Galaxy S5 z zachowaniem KNOX 0x0

Pamiętaj że podążając za tym poradnikiem, instalując własny system lub jakkolwiek ingerując w swoje urządzenie działasz na własną odpowiedzialnośc.

Co to KNOX

http://www.samsung.com/pl/business/solutions-services/mobile-solutions/security/samsung-knox

Uważam ze sam cel KNOX'a jest szczytny a sama platforma jak najbardziej pomocna dla firm i administratorów IT.

Niestety, aktualnie zastosowane rozwiązanie sprzętowa sprowadza się do flagi 0-1 która może zostać zmieniona tylko raz. W przypadku ingerencji w system zostaje on oznaczony na zawsze jako 0x1 i platforma KNOX na nim już nie zadziała, rozwiązanie wciąż trafne.

Po zakupie Samsung Galaxy S5 dowiedziałem się następującej rzeczy - zdarza się ze punkty serwisowe odmawiają uznania gwarancji jeśli KNOX posiada flagę 0x1. Czyli gdy wgramy system CyanogenMod (a dokładniej w trakcie jego wgrywania) możemy się pożegnać z gwarancją.

Przyczyna flag 0x1

Według mojej wiedzy zarządzanie flagą znajduje się w bootloaderze (odpowiednikiem świata PC byłyby LILO, GRUB, NTDLR - czyli po prostu program który odpowiada na pytanie co zrobić by uruchomić system). Download mode w tym konteksćie także jest uruchamiany przez bootloader'a.

Bootloader KNOX sprawdza czy kernel i recovery (możliwe że też sam bootloader) są poprawne. Jeśli nie - zapisuje flagę 0x1. Nie jest możliwe więc wgranie custom recovery czy kernela, nawet z download mode.

Ratunek

Bez wgrania custom recovery nie ma możliwości root'owania urządzenia, na szczęście dla posiadaczy Samsung Galaxy S5 kernel użyty w stockowych romach posiada lukę bezpieczeństwa. Dzięki towelroot i przy użyciu odpowiednio starego systemu wciąż istnieje możliwość rootowania!

Strona domowa towelroot: https://towelroot.com/

Do dzieła

Zainstaluj towelroot i spróbuj zrootować urządzenie. Następnie, jeśli posiadasz:

System bez root'a

Oryginalny tutorial (po angielsku): http://forum.xda-developers.com/galaxy-s5/development/rom-neatrom-v1-t2828562

Zaczynamy od rozdziału Installation Instructions: If you're coming from a Samsung stock NON-Rooted NG2/NG7/NG9/NH4/NH6/NJ1 ROM (KNOX 0x0). Opisuje on wgrywanie starszej wersji systemu która posiada lukę wykrzystywaną przez towelroot.

Dostępne firmware: http://samsung-updates.com/device/?id=SM-G900F

Użytą przeze mnie wersją była G900FXXU1ANCE_G900FXEO1ANC7_G900FXXU1ANCE_HOME.tar.md5, po jej wgraniu można uzyskać root'a za pomocą towelroot.

Przejdź teraz do System z root'em.

System z root'em

Rebootujemy i instalujemy SuperSu, po jego uruchomieniu zgadzamy się na wyłączenie KNOX'a.

Dokonujemy zakupu Mobile Odin Pro, pozwoli on na proste wgranie systemu w formie pliku zip bez zmiany flagi KNOX.

Wybranym przeze mnie systemem był: http://forum.xda-developers.com/galaxy-s5/development/rom-ane4-kitkat-4-4-2-multi-csc-t2813628

Wgrywanie pliku zip sprowadza się do wybrania go w Mobile Odin Pro poprzez opcję OTA/Update ZIP. Pamiętaj o przeczytaniu opisu instalacji wybranego firmware, w opisywanym tu przypadku należy też odznaczyć Everroot.

Naciśnij Flash Firmware".

Po restarcie i na końcu instalacji systemu odznacz Reboot Device. Powinieneś znaleźć się wkrótce w Download Mode.

Aktualizacja firmware

Jeśli twój bootloader lub modem wymagają aktualizacji możęsz to zrobić z Download Mode.

Zainstaluj PC Odin, podłącz telefon w trybie download. Modem dodaj jako CP, bootloader jako BL. Wgraj wybrane pliki.

W momencie pisania tego poradnika od Samsunga dostępne były:

  • BL_G900FXXU1ANK7.tar.md5

  • CP_G900FXXU1ANK1.tar.md5

Wgrywany system był bazowany na wersji ANK7 więc mogę stwierdzić że wgranie CP w lekko starszej wersji nie powoduje problemów.

Na zakończenie

Idź do Settings/Security:

  • odznacz Reactivation lock

  • odznacz Send security reports

idź do Security policy updates i odznacz Automatic updates.

Koniec, jesteś w posiadaniu zrootowanego systemu :)

Usuwanie zbędnych aplikacji

Do pozbycia się poniższych subiektywnie zbędnych programów użyłem Usuwanie Aplikacji Systemowych od Jumobile.

  • Aktualizac. oprog.

  • ANT HAL Service

  • ANT Radio Service

  • ANT+ Plugins

  • Application Kontyngent SCloud

  • Beaming Service

  • BlurbCheckout

  • Dodatek do usług drukowania Samsung

  • FWUpdate

  • HealthService

  • Konto Samsung

  • Moduł dodatkowy HP Print Service

  • Rozliczenia Samsung

  • S Szukacz

  • S Terminarz (12MB)

  • S Terminarz (908KB)

  • S Voice

  • Samsung Apps

  • Samsung Celandar SyncAdapter

  • Samsung Cloud Data Relay

  • Samsung Contact SyncAdapter

  • Samsung Galaxy

  • Samsung GALAXY Apps Widget

  • Samsung Link Platform Connectivity

  • Samsung Memo SyncAdapter

  • Samsung Push Service

  • Samsung SBrowser SyncAdapter

  • Samsung SNote3 SyncAdapter

  • Samsung Syncadapters

niedziela, 28 grudnia 2014

Bezpieczniejsze i przyjaźniejsze sterowniki drukarek Brother

Jest to czystszy sposób na instalację sterowników do drukarek firmy Brother dla systemów 32bit i 64bit (z lub bez multilib).

Poniżej przedstawiam sposób instalacji sterowników do drukarek Brother’a bez zbędnych zamknięto źródłowych programów. Ostatecznie z aplikacji w pakietach dostarczanych przez brother potrzebny jest tylko 1 plik, br<model drukarki>filter, gdzie <model drukarki> jest Twoim modelem drukarki, np. mfcj6510dw.

Przygotowanie

mfcj6510dwcupswrapper-3.0.0-1.i386.deb

Potrzebny jest nam jedynie plik opt/brother/Printers/<model drukarki>/cupswrapper/brother_<model drukarki>_printer_en.ppd (np. brother_mfcj6510dw_printer_en.ppd).

Na początku pliku znajduje sie linijka (gdzie mfcj6510dw jest modelem Twojej drukarki):

*cupsFilter: "application/vnd.cups-postscript 0 brlpdwrappermfcj6510dw"``

Zmieniamy ją na:

*cupsFilter: "application/vnd.cups-postscript 0 /opt/brother/bin/filter_mfcj6510dw"
mfcj6510dwlpr-3.0.0-1.i386.deb

Z opt/brother/Printers/<model drukarki> potrzebne są:

  • lpd/br<model drukarki>filter => przenosimy do /opt/brother/Printers/<model>/filter

  • lpd/psconvertij2 => przenosimy do /opt/nbrother/bin/

  • inf/ - cały katalog z wykluczeniem setupPrintcapij => przenosimy do /opt/brother/Printers/<model>/inf/

Struktura katalogów

/opt/brother
├── bin
│   ├── filter
│   ├── filter_mfcj6510dw -> filter
│   └── psconvertij2
├── lib
│   ├── ld-linux.so.2
│   ├── libc.so.6
│   └── libm.so.6
├── lib32 -> lib
├── opt
│   └── brother -> ..
└── Printers
    └── mfcj6510dw
        ├── filter
        └── inf
            ├── brmfcj6510dwfunc
            ├── brmfcj6510dwrc
            ├── ImagingArea
            ├── lut
            │   ├── BRPRI10IA.BCM
            │   ├── BRPRI10IB.BCM
            │   ├── BRPRI10IC.BCM
            │   ├── BRPRI10ID.BCM
            │   ├── BRPRI10IE.BCM
            │   ├── BRPRI10IF.BCM
            │   ├── BRPRI10IG.BCM
            │   ├── BRPRI10IH.BCM
            │   └── BRPRI10II.BCM
            └── paperinfij2

Instalacja

[x86] Dla systemów 64bit i 32bit [x64] Dla systemów 64bit no-multilib

  • kernel - enable ia32 [x64]

  • sudo [x64]

  • chroot [x64]

  • libs [x64]

  • script [x86] [x64]

kernel - ia32 [x64]

Sterownik od Brother’a jest 32bitowym plikiem wykonywalnym więc musimy właczyć w kernelu obsługę takich plików

Executable file formats / Emulations, IA32 Emulation
sudo [x64]

Instalacja Sudo jest wymagana do uruchamiania skryptu w chroot. Próbowałem zrobić to poprzez program z setuid lecz CUPS wymaga odpowiednich uprawnień pliku filtrów (driver)

chroot [x64]

Podane w Strukturze katalogów ścieżki lib, lib32 i opt/brother są wymagane do poprawnego działania drivera w chroocie

libs [x64]

By zobaczyć które biblioteki są potrzebne, na maszynie ze środowiskiem 32bitowym wykonaj komendę ldd <ścieżka do filtra>:

glorpen@example ../brother $ ldd brmfcj6510dwfilter
    linux-gate.so.1 (0xf779f000)
    libm.so.6 => /lib32/libm.so.6 (0xf7719000)
    libc.so.6 => /lib32/libc.so.6 (0xf756b000)
    /lib/ld-linux.so.2 (0xf77a1000)

Podane pliki kopiujemy do docelowego katalogu chroot.

script [x86] [x64]

Stwórz /opt/brother/bin/filter:

#!/bin/sh

DIR="/opt/brother"

PRINTER="$(echo $0 | sed -e 's/.*_//')"

BRCONV="${DIR}/Printers/${PRINTER}/filter"

if [[ -d /usr/lib64  && ! -d /usr/lib32 ]];
then
    BRCONV="/usr/bin/sudo /usr/bin/chroot --userspec=``id -u``:``id -g`` /opt/brother ${BRCONV}"
fi

PSCONV="${DIR}/bin/psconvertij2"

FILE_RC="${DIR}/Printers/${PRINTER}/inf/br${PRINTER}rc"
FILE_PAPERINF="${DIR}/Printers/${PRINTER}/inf/paperinfij2"
FILE_IMAGINGAREA="${DIR}/Printers/${PRINTER}/inf/ImagingArea"

cat | "${PSCONV}" "${FILE_PAPERINF}" "${FILE_RC}" "${FILE_IMAGINGAREA}" | ${BRCONV} -pi "${FILE_PAPERINF}" -rc "${FILE_RC}"

exit $?

Nadaj mu uprawnienie wykonywalne

chmod a+x /opt/brother/bin/filter

Następnie tworzymy symlink’a filter_mfcj6510dw -> filter

Przygotowany wcześniej plik PPD powinien wskazywać na stworzony przez nas filter_mfcj6510dw.

CUPS

Podczas dodawania drukarki podajemy przygotowany wcześniej plik ppd, jeśli wszystko jest ustawione poprawnie drukarka jest gotowa do użytku.

Jeśli wydrukowane strony mają zbyt mały górny margines (są obcięte) zmień linię w /opt/brother/Printers/<model>/inf/br<model>dwrc z PaperType=Letter na PaperType=A4.

Prosty i stabilny w obsłudze serwer Minecraft'a

Minecraft w sesji SCREEN’a

Istnieją działające rozwiązania wykorzystujące screen, pozwalają one na uruchomienie serwera Minecraft w tle i umożliwiają na dostęp do konsoli gry. Niestety wysyłanie poleceń ( np. /stop ) do serwera wymaga lekkiej gimnastyki i pomimo tego czasami po prostu nie działa.

Rozwiązania które znalazłem nie uznałem za wystarczająco niezawodne.

Dostęp do sesji screen’a z poziomu innego użytkownika należy odpowiednio skonfigurować, możliwe jest przypadkowe zamknięcie konsoli. Spotkałem, się też również z problemamy podwójnej daemonizacji - skrypt startowy nie może znaleźć PID serwera gdyż ten jest zakrywany przez screen który z kolei sam staje sie daemonem.

Przykład rozwiązania z użyciem komendy screen:

http://minecraft.gamepedia.com/Tutorials/Server_startup_script

Coś lepszego

Głównym problemem do rozwiązania był dostęp do konsoli oraz bezpieczne wyłączanie serwera by ten zdążył zapisać wygenerowane światy. Miłym dodatkiem jest też logowanie błędów serwera do logów systemowych.

Skrypt MiencraftD: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraftd.py

Zalety
  • logi serwera trafiają do logów systemowych

  • akcje start/stop możliwe do uruchomienia z konsoli

  • bezpieczne zatrzymywanie - to serwer Minecraft’a decyduje o momencie swojego wyłączenia

  • możliwość uruchomienia konsoli serwera

  • wysyłanie komend z linii poleceń prosto do serwera

Wymagania skryptu
  • python 2.7 lub 3.3+

  • python-daemon

  • lockfile

Użycie
usage: minecraftd.py [-h] [--instance INSTANCE] {start,shell,stop,cmd} ...

Minecraft server daemonizer

positional arguments:
  {start,shell,stop,cmd}
    start               Starts minecraft daemon for given instance
    shell               Connects to Minecraft shell of given instance
    stop                Stops Minecraft daemon for given instance
    cmd                 Sends command to given instances shell

optional arguments:
  -h, --help            show this help message and exit
  --instance INSTANCE, -i INSTANCE
                        Instance name

Gdzie zdobyć

Skrypt ten jest częścią mojego portage overlay które można znaleźć:

Gentoo overlay: https://github.com/glorpen/gentoo-overlay

Gotowe ebuild dla serwera Minecraft znajduje się pod adresem: https://github.com/glorpen/gentoo-overlay/tree/master/games-server/minecraft

Skrypt init.d używany wraz z MinecraftD: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraft.daemon.d

I jeszcze raz, skrypt daemonizujący aplikację: https://github.com/glorpen/gentoo-overlay/blob/master/games-server/minecraft/files/minecraftd.py