Analiza dnevnika pomoću dmesg. Pronalaženje informacija o hardveru u terminalu Pokušavam onemogućiti SELinux

U fazi učitavanja mogu se pojaviti mnoge pogreške u uslugama ili opremi. Pregledavanje ovih poruka može biti vrlo korisno, ali one prolaze vrlo brzo i ne možemo uvijek imati vremena pročitati ih. Ali sve ih je moguće vidjeti pomoću naredbe dmesg.

Dmesg - kakav je ovo pomoćni program i čemu služi?

Tijekom pokretanja sustava, dok se kernel, sustav inicijalizacije, upravljački programi, moduli kernela učitavaju i hardver se inicijalizira, na ekranu se prikazuje veliki broj poruka koje prikazuju informacije o stanju kernela, procesu pokretanja i stanje uređaja.

U fazi učitavanja mogu se pojaviti mnoge pogreške u uslugama ili opremi. Pregledavanje ovih poruka može biti vrlo korisno, ali one prolaze vrlo brzo i ne možemo uvijek imati vremena pročitati ih. Ali svi se mogu vidjeti pomoću naredbe dmesg.

1. Pregledajte poruke tijekom preuzimanja

Pokretanjem naredbe dmesg s pravima superkorisnika, dobit ćete sve poruke koje kernel ispisuje tijekom dizanja. Ovdje možete vidjeti puno toga korisna informacija. Možete ih samo gledati red po red i pokušati shvatiti što znače. Sada kada znate kako izgledaju poruke pri pokretanju, lako se možete nositi s mnogim problemima ako se pojave.

$dmesg | više [ 0.000000] mikrokod: mikrokod CPU0 rano ažuriran na reviziju n 0x29, datum = 2013-06-12 [ 0.000000] Inicijalizacija cpuseta cgroup subsys [ 0.000000] Inicijalizacija cpuca cgroup subsys [ 0.000000] Inicijalizacija cgroup subsys cpuacct [ 0.0 00000] Linux verzija 4. 1. 20-11-default() (gcc verzija 4.8.5 (SUSE Linux)) #1 SMP PREEMPT pet, 18. ožujka 14:42:07 UTC 2016. (0a392b2)

2. Pregled memorije

Koristeći dmesg možete vidjeti količinu memorije dostupne na sustavu:

$dmesg | grep Memorija

0.000000] Memorija: 3848228K/4006256K dostupno (6567K kod kernela, 1085K rwdata, 4852K rodata, 1560K init, 1520K bss, 158028K rezervirano, 0K cma-rezervirano)

3. Pogledajte status mrežnih adaptera

Budući da dmesg pohranjuje sve poruke o statusu uređaja, možemo vidjeti status mrežni adapter, ili možda pogreške koje su se dogodile tijekom njegove inicijalizacije:

$dmesg | grep eth [ 101.043873] tg3 0000:02:00.0 eth0: Veza raste na 100 Mbps, full duplex [ 101.043885] tg3 0000:02:00.0 eth0: Kontrola protoka je isključena za TX i isključena za RX [ 101.043889] tg3 0000:0 2 :00.0 eth0: EEE je onemogućen [ 101.043909] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: veza postaje spremna

4. Promjena veličine međuspremnika dmesg

Ako mislite da zadana veličina međuspremnika dmesg nije dovoljna, možete promijeniti njegovu veličinu kako biste povećali broj poruka koje tamo mogu biti odjednom. Da biste to učinili, samo uredite datoteku i ponovno pokrenite računalo.

$ vi /boot/config-4.1.20-11-default CONFIG_LOG_BUF_SHIFT=18

Promijenite vrijednost parametra ovog retka na željenu, prema zadanim postavkama koristim 18, to znači da će se stvoriti međuspremnik veličine 18 kilobajta. Ali možete odrediti veličinu međuspremnika koja god želite.

5. Očisti dmesg međuspremnik

Ponekad ćete možda trebati očistiti Dmesg međuspremnik kako se nepotrebne poruke ne bi zapetljale. To možete učiniti sljedećom naredbom:

$dmesg -c

Ako sada ponovno pokrenete naredbu dmesg, međuspremnik će biti prazan.

6. Datum i vrijeme u dmesg

Kao što vidite, prema zadanim postavkama nema datuma u dmesg-u, koristi se samo oznaka, vremenski pomak od početka preuzimanja. Ali također je moguće vidjeti puni datum i vrijeme svake poruke. Da biste to učinili, pogledajte datoteku /var/log/kern.log:

$dmesg | grep "L2 predmemorija" 18. listopada 23:55:40 ubuntu kernel: [0.014681] CPU: L2 predmemorija: 2048K

Da bi sve radilo, usluga klogd mora biti konfigurirana i pokrenuta.

7. Pregledajte dmesg pogreške

Pomoću ove jednostavne kombinacije možete vidjeti sve pogreške koje su se dogodile tijekom pokretanja ili rada sustava:

$dmesg | grep greška

Pogledajmo mali primjer. Recimo da mi Wifi ne radi. Znam da u kompu postoji adapter, uključen je i sve radi u Windowsima. Ali ne sad. Pogledamo dmesg dnevnik i vidimo:

[ 21.772824] b43-phy0 GREŠKA: Datoteka firmvera "b43/ucode15.fw" nije pronađena [ 21.772842] b43-phy0 GREŠKA: Datoteka firmvera "b43-open/ucode15.fw" nije pronađena [ 21.772852] b43-phy0 GREŠKA: Molimo otvorite terminal i unesite naredbu "sudo /usr/sbin/install_bcm43xx_firmware" za preuzimanje ispravnog firmvera za ovu verziju upravljačkog programa. Za izvanmrežnu instalaciju idite na i slijedite upute u odjeljku "Instaliranje firmvera iz RPM paketa".

Iz poruke razumijemo da je ovdje problem u firmwareu, a sustav nam čak govori kojom naredbom se to može riješiti ili gdje pročitati o postavljanju ove stvari i preuzimanju potrebne datoteke. Tako je problem koji se činio nerješiv riješen u nekoliko minuta. Pregledavanje zapisa Linuxa vrlo je korisna stvar, nemojte je zaboraviti koristiti. To je sve, ako imate pitanja, napišite u komentarima!

Sistemski administratori, i oni obični Korisnici Linuxa, trebao bi često pregledavati datoteke dnevnika za rješavanje problema. Zapravo, ovo je prva stvar koju svaki administrator sustava treba učiniti kada se pojavi bilo kakva greška u sustavu.

sebe operacijski sustav Linux i pokrenute aplikacije generiraju Različite vrste poruke koje se bilježe u različitim datotekama dnevnika. Linux koristi poseban softver, datoteke i direktorije za pohranjivanje log datoteka. Znajući koje datoteke sadrže zapisnike kojih programa pomoći ćete uštedjeti vrijeme i brže riješiti problem.

U ovom ćemo članku pogledati glavne dijelove Linux sustava zapisivanja, datoteke dnevnika, kao i uslužne programe pomoću kojih možete pregledavati zapisnike Linuxa.

Većina Linux log datoteka nalazi se u mapi /var/log/. Možete ispisati log datoteke za vaš sustav pomoću naredbe ls:

Rw-r--r-- 1 root root 52198 10. svibnja 11:03 alternative.log
drwxr-x--- 2 root root 4096 14. studeni 15:07 apache2
drwxr-xr-x 2 root root 4096 25. travnja 12:31 apparmor
drwx------ 2 root root 4096 5. svibnja 10:15 revizija
-rw-r--r-- 1 root root 33100 10. svibnja 10:33 boot.log

U nastavku ćemo pogledati 20 različitih Linux log datoteka koje se nalaze u /var/log/ direktoriju. Neki od ovih zapisa nalaze se samo na određenim distribucijama, na primjer dpkg.log se nalazi samo na sustavima temeljenim na Debianu.

/var/log/messages- sadrži globalne zapisnike Linux sustava, uključujući one koji se bilježe pri pokretanju sustava. Nekoliko vrsta poruka bilježi se u ovom dnevniku: pošta, cron, razne usluge, kernel, autentifikacija i druge.

/var/log/dmesg- sadrži poruke primljene od kernela. Zapisuje mnoge poruke tijekom faze pokretanja, prikazuju informacije o hardverskim uređajima koji su inicijalizirani tijekom procesa pokretanja. Možete reći da je ovo još jedan zapisnik Linux sustava. Broj poruka u zapisniku je ograničen, a kada se datoteka napuni, sa svakom novom porukom stare će biti prebrisane. Također možete vidjeti poruke iz ovog dnevnika pomoću naredbe dmseg.

/var/log/auth.log- sadrži podatke o autorizaciji korisnika u sustavu, uključujući prijave korisnika i mehanizme autentifikacije koji su korišteni.

/var/log/boot.log- Sadrži informacije koje se bilježe kada se sustav podigne.

/var/log/daemon.log- Uključuje poruke raznih pozadinskih demona

/var/log/kern.log- Također sadrži poruke iz kernela, korisne u rješavanju grešaka u prilagođenim modulima ugrađenim u kernel.

/var/log/lastlog- Prikazuje informacije o posljednjoj sesiji svih korisnika. Nije tekstualna datoteka, da biste ga vidjeli morate upotrijebiti naredbu lastlog.

/var/log/maillog /var/log/mail.log- zapisnici poslužitelja E-mail radi na sustavu.

/var/log/user.log- Informacije iz svih zapisa na razini korisnika.

/var/log/Xorg.x.log- Dnevnik poruka X poslužitelja.

/var/log/alternatives.log- Informacije o radu programa ažuriranja-alternativa. Ovo su simboličke veze na zadane naredbe ili biblioteke.

/var/log/btmp- zapisnik Linux datoteka sadrži informacije o neuspjelim pokušajima prijave. Za pregled datoteke prikladno je koristiti naredbu last -f /var/log/btmp

/var/log/čaše- Sve poruke vezane uz tisak i printere.

/var/log/anaconda.log- sve poruke snimljene tijekom instalacije spremaju se u ovu datoteku

/var/log/yum.log- Zapisuje sve informacije o instalacijama paketa koristeći Yum.

/var/log/cron- Kad god Cron demon počne izvršavati program, on piše izvještaj i poruke iz samog programa u ovu datoteku.

/var/log/sigurno- sadrži podatke vezane uz autentifikaciju i autorizaciju. Na primjer, SSHd ovdje bilježi sve, uključujući neuspjele pokušaje prijave.

/var/log/wtmp ili /var/log/utmp - Dnevnici sustava Linux , sadrže dnevnik prijava korisnika. Pomoću naredbe wtmp možete saznati tko je prijavljen i kada.

/var/log/faillog- zapisnik linux sustavi, sadrži neuspjele pokušaje prijave. Koristite naredbu faillog za prikaz sadržaja ove datoteke.

/var/log/mysqld.log- Linux log datoteke s MySQL poslužitelja baze podataka.

/var/log/httpd/ ili /var/log/apache2- log datoteke linux11 Apache web poslužitelja. Dnevnici pristupa nalaze se u datoteci access_log, a zapisi pogrešaka u error_logu

/var/log/lighttpd/ - linux dnevnici lighttpd web poslužitelj

/var/log/conman/- Log datoteke ConMan klijenta,

/var/log/mail/- ovaj direktorij sadrži dodatne zapise poslužitelja pošte

/var/log/prelink/- Prelink program povezuje biblioteke i izvršne datoteke kako biste ubrzali proces preuzimanja. /var/log/prelink/prelink.log sadrži informacije o .so datotekama koje je izmijenio program.

/var/log/audit/- Sadrži informacije koje je generirao auditd demon.

/var/log/setroubleshoot/ - SE Linux koristi setroubleshootd demon (SE Trouble Shoot Daemon) za prijavu sigurnosnih problema. Ovaj dnevnik sadrži poruke ovog programa.

/var/log/samba/- sadrži informacije i zapise sa poslužitelja datoteka Samba koji se koristi za povezivanje dijeljene mape Windows.

/var/log/sa/- Sadrži .cap datoteke prikupljene paketom Sysstat.

/var/log/sssd/- Koristi ga sigurnosni demon sustava koji upravlja daljinski pristup imenicima i mehanizmima provjere autentičnosti.

Pregledavanje zapisa u Linuxu

Za pregled zapisa na Linuxu prikladno je koristiti nekoliko uslužnih programa naredbeni redak Linux. Mogao bi biti bilo tko uređivač teksta, ili posebna korisnost. Najvjerojatnije će vam trebati prava superkorisnika za pregled zapisa u Linuxu. Ovo su naredbe koje se najčešće koriste u te svrhe:

  • zgrep
  • zmore

Neću ulaziti u detalje svake od ovih naredbi, budući da je većina njih već bila detaljno raspravljena na našoj web stranici. Ali navest ću nekoliko primjera. Pregledavanje zapisa Linuxa vrlo je jednostavno:

Gledamo dnevnik /var/log/messages, s mogućnošću pomicanja:

manje /var/log/messages

Pregledajte Linux zapisnike u stvarnom vremenu:

rep -f /var/log/messages

Otvorite dmesg log datoteku:

mačka /var/log/dmesg

Prvi redovi dmesg-a:

glava /var/log/dmesg

Izbacujemo samo pogreške iz /var/log/messages:

grep -i pogreška /var/log/messages

Osim toga, možete vidjeti zapisnike na Linuxu koristeći grafičke pomoćne programe. Sistemski program Log Viewer se može koristiti za pogodno gledanje i praćenje zapisnika sustava na prijenosnom računalu ili osobno računalo s Linuxom.

Program možete instalirati na bilo koji sustav s instaliranim X poslužiteljem. Također, bilo koji grafički uređivač testa može se koristiti za pregled zapisa.

zaključke

U direktoriju /var/log možete pronaći sve potrebne informacije o radu Linuxa. Iz današnjeg članka naučili ste dovoljno da znate gdje tražiti i što tražiti. Sada vam pregledavanje zapisa u Linuxu neće stvarati probleme. Ako imate pitanja, pitajte u komentarima!


Ukratko:

  • Kontekst SELinux procesa može se promijeniti ako je takva operacija opisana u pravilima sepolicy. U Android verzije 4.4 (KitKat) moguće je eskalirati privilegije promjenom konteksta. Ali počevši od 5.x to se više ne može učiniti.
  • postoje konteksti datoteka.
  • Osim konteksta datoteka i procesa, Android implementira kontekste za parametre svojstveni_konteksti.

adbd i konzola

Jedini dostupan način da dobijete relativno privilegiranu ljusku u proizvodnji Android uređaji- način rada za programere. Način za razvojne programere pokreće adbd daemon, koji također može djelovati kao analog ssh/telneta. U Android KitKatu nalazi se u initramfs na /sbin/adbd i ne mogu ga čitati korisnici koji nisu root. U početku, adbd radi kao root i radi u SELinux kontekstu/inicijalnoj domeni (koristi je init proces i obično ima više privilegija od drugih domena). Ako je kontekst procesa eksplicitno naveden u /init.rc, npr. seclabel u:r:adbd:s0, tada proces počinje odmah u navedenom kontekstu. Prilikom pokretanja adbd-a, ovisno o opcijama kompilacije ( i Android postavke(svojstva) smanjuje privilegije, naime mijenja trenutni korisnik od korijena do ljuske, postavlja SELinux kontekst na ljuska i reže sve mogućnosti sustava osim CAP_SETUID I CAP_SETGID(što je potrebno za otklanjanje pogrešaka u aplikacijama putem run-as). Takozvani Capability Bounding Set ne dopušta dječjim aplikacijama da povećaju mogućnosti, samo da ih smanje. Ove privilegije omogućuju vam da ne radite ništa više od ničega na svom telefonu. Možete vidjeti mogućnosti trenutnog procesa pomoću naredbe cat /proc/self/status | grep CapBnd . Možete ih dešifrirati pomoću naredbe capsh (nije dostupna na Androidu), na primjer:


$ capsh --decode=0000001ffffffffff

Trenutačni SELinux kontekst može se vidjeti pomoću naredbe id ili cat /proc/self/attr/current. Kontekst prethodnog procesa može se vidjeti pomoću naredbe cat /proc/self/attr/prev.


Pregled datoteka konteksta: ls -Z
Pregledajte kontekst pokrenutih procesa: ps -Z

Dobivanje root pristupa

root, ali ne taj

Prvo što sam učinio je da sam upotrijebio dirtycow za njegovu namjenu - zamijenio sam /system/bin/run-as, koji je UID/GID postavio na 0 (su radi isto). Međutim, nisam mogao montirati datotečni sustav, čak ni tmpfs. Nisam mogao učitati ni module kernela. Pogledaj dmesg - br. Nisam mogao ni pregledavati imenike koji su imali 700 dozvola i bili su u vlasništvu drugih korisnicima sustava. Mogao sam samo čitati i pisati na blok uređaje, a pregledavanje datoteka ili direktorija bilo je moguće postavljanjem UID-a/GID-a određenog korisnika (napisao sam vlastiti bicikl - analog su, koji je mogao postaviti selinux kontekst i korisnika/grupu).


Prije svega, bacio sam cijeli firmware, boot i recovery:


$ dd if=/dev/block/mmcblk0 of=/storage/sdcard1/mmcblk0.img $ dd if=/dev/block/platform/msm_sdcc.1/by-name/boot of=/storage/sdcard1/boot.img $ dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/storage/sdcard1/recovery.img

Dump možete proučiti pomoću uslužnih programa kpartx i unpackbootimg. Naredba kpartx -a mmbblk0.img stvara virtualni blok uređaj, dostupno na /dev/mapper/loop0 . S njim možete raditi kao s bilo kojim drugim blok uređajem. Dumpovi particija za pokretanje i oporavak su raspakirani pomoću uslužnog programa unpackbootimg.


Zatim sam to pokušao napisati u recovery /dev/zero, provjeriti i odmah vratiti iz dumpa.


Budući da sam mogao pisati na blokirane uređaje, to znači da sam mogao pisati prilagođeni oporavak. Pronašao sam TWRP od Brigadiera, prebacio ga u recovery i ponovno digao u adb reboot recovery. Nisam vidio TWRP, već samo Android ikonu sa uskličnik. Ovako izgleda standardni oporavak, što znači da TWRP nije flashiran.


Ponovno se pokrećem normalni mod, pokrećem exploit, provjeravam hash particija za oporavak- hash odgovara originalnom. Pokušavam ponovno upisati podatke - hash se promijenio! Sjećam se predmemorije stranice, čistim je (echo 3 > /proc/sys/vm/drop_caches) - hash je star. Oni. sve što napišem na blok uređaj leti bez grešaka u /dev/null i ponekad završi u Linux cacheu. No događa li se nekako ažuriranje firmvera? A korisnički podaci se nekako upisuju Unutarnja memorija. Moramo dalje kopati.

Pokušavam onemogućiti SELinux

Tada sam mislio da je sve pogreške o nedostatku privilegija uzrokovao SELinux (potpuno sam zaboravio da se mogućnosti mogu skraćivati). Nisam vidio nikakve dmesg zapisnike, logcat nije pokazao ništa relevantno. I počeo sam razmišljati o tome kako onemogućiti SELinux.


Prvi trag koji sam mogao pronaći:


$ grep -A2 reload_policy boot/ramfs/init.rc na svojstvu:selinux.reload_policy=1 restart ueventd restart installd

Oni. Prije primjene ZIP-a, oporavak će demontirati sve particije, ali u mom slučaju nešto pođe po zlu.

Kopanje po izvorima kernela

GPL licenca obvezuje proizvođače pametnih telefona na izdavanje izvora kernela. Hvala Linusu i Stallmanu na ovome. Ponekad proizvođači objave nešto krivo, ponekad ispravne izvore, ali bez defconfig datoteke, ponekad su točni i vrlo rijetko s uputama kako ih sastaviti (npr. LG).


U mom slučaju, postojali su izvori s ispravnom defconfigom, ali bez uputa. Nakon malo znoja uspio sam sklopiti jezgru i uvjerio se da nije kompletna lipa.


Nakon dugo vremena odlučio sam se za dvije datoteke:

udice

Kyocera nije dugo razmišljala, već je jednostavno dodala zakačke za potencijalno opasne operacije u Androidu: mount, umount, insmod (dopušteno je učitavanje samo jednog modula - wlan i samo ako ga init proces učita) i tako dalje . Ovdje je ležao problem oporavka. Nije mogao demontirati datotečni sustav /system! Ove je operacije dopuštao samo init proces. Između ostalog, nisam mogao onemogućiti SELinux jer je ova značajka bila onemogućena kada je kernel kompajliran. Bilo je moguće zaobići ove zakačke samo ako je kernel bio učitan s određenim parametrima ( kcdroidboot.mode=f-ksg ili androidboot.mode=kcfactory, više o njima kasnije).

ponovno pokretanje

Također zanimljiva datoteka za proučavanje. Opisuje moguće opcije preuzimanje na telefon:

  • adb ponovno pokretanje pokretačkog programa - način brzog pokretanja, nije dostupno na mom telefonu (0x77665500 - hex oznaka 00556677 u odjeljku sbl1)
  • adb ponovno pokretanje oporavak- način oporavka (0x77665502 - hex oznaka 02556677 u odjeljku sbl1)
  • adb ponovno pokretanje rtc- tzv. ALARM_BOOT. Još uvijek ne razumijem zašto, nema oznake u sbl1. Možda to znači https://developer.android.com/reference/android/app/AlarmManager.html
  • adb ponovno pokretanje oem-X(u mom slučaju oem-1, 0x6f656d01 - heksadecimalna oznaka 016d656f u odjeljku sbl1). Što se događa tijekom ovog načina rada određuje proizvođač. Sudeći prema izvornom kodu, telefon se ponovno pokreće u ovom načinu rada ako postoji pogreška u provjeri autentičnosti firmvera iz odjeljka modema.
  • adb ponovno pokretanje edl - hitno preuzimanje, prebacuje telefon u standardni Qualcommov način preuzimanja. Telefon je definiran kao QHSUSB__BULK COM port, kroz koji možete prenijeti potpisani bootloader (ako se ne varam, svaki bootloader je namijenjen za jednu vrstu SoC-a i proizvođača telefona) i obavljati operacije niske razine s telefonom, uključujući flashanje. Obično se koristi u kombinaciji s QPST. Za neke telefone programi za pokretanje cure online, na primjer za Kyocera KYL22. Ne znam odakle dolaze.
  • Neki način preuzimanja, u koji kroz adb ponovno pokretanje nemoj ulaziti. Ovdje je zanimljivo ... Ali o tome kasnije.

Malo o tome kako se učitava na telefonima s Qualcomm procesorom:


Qualcommov ugrađeni ROM pokretač (pbl - primarni pokretač) učitava particiju sbl1 (sekundarni pokretač). sbl1 učitava tz (zona povjerenja), zatim ponovno (podizanje androida, mali kernel, lk). Aboot zauzvrat učitava boot, recovery ili fota.


Opis odjeljaka uključenih u učitavanje:

  • tz - Qualcomm zona povjerenja. Izvodi operacije niske razine, uključujući rad s QFuses (rpmb odjeljak).
  • rpm - firmware Resource and Power Manager. Firmware za specijalizirani SoC odgovoran za resurse i napajanje.
  • sdi - particija za pohranu zone povjerenja. Podaci koje koristi Trust Zone.

Svi ovi odjeljci potpisani su lancem certifikata.

fota

U nekim slučajevima korisno je zanemariti ažuriranja firmvera.


FOTA - firmware preko zraka. Za razliku od pokretanja i oporavka, fota je neslužbeni način pokretanja za Android. Fotin zadatak je ažurirati firmware. U tu svrhu Kyocera koristi rješenje tvrtke Red Bend, koje stane u 35Mb za ažuriranje ne samo kernela već i /system particije. Stoga je zabranjeno pisanje na /system particiju, inače bi primjena zakrpe na netočne podatke mogla blokirati telefon.


Bilo je ažuriranje za moj telefon. Mogao sam se odvažiti na to jer sam već imao priliku pisati u /cache i prekinuti ažuriranje u bilo kojem trenutku.


Proučivši izvorni kod Java aplikacije odgovorne za ažuriranje, postalo mi je jasno kako se to događa:

  • Java aplikacija preuzima posebnu datoteku /cache/delta/boot_delta.bin, stvara datoteku /cache/delta/Alt-OTA_dlcomplete, potvrđujući uspješno preuzimanje datoteke i druge datoteke sa zaglavljima.
  • Prilikom potvrde ažuriranja ponovno se provjerava prisutnost ovih datoteka.
  • Ako su datoteke na svom mjestu, tada se dio fotamng mijenja putem biblioteke libjnialtota.so.

Pišem naredbu koja kontinuirano izbacuje particiju i preimenuje /cache/delta/boot_delta.bin. Pokrećem ga odmah nakon što pristanem ponovno pokrenuti telefon. Telefon se ponovno pokreće u FOTA načinu rada, javlja da nema ažuriranja i ponovno se pokreće u normalnom načinu rada.


Počinjem proučavati podatke koje sam ostavio. U odjeljku /cache, kao bonus, dobivam fota zapise, koji čak sadrže i dmseg zapise! Samo ponovno pokretanje u fota inicijalizirano je s "1" bajtovima u odjeljku fotamng:


$ dd if=/data/local/tmp/one_bit.bin of=/dev/block/platform/msm_sdcc.1/by-name/fotamng seek=16 bs=1 count=1 $ dd if=/data/local/ tmp/one_bit.bin of=/dev/block/platform/msm_sdcc.1/by-name/fotamng seek=24 bs=1 count=1 $ dd if=/data/local/tmp/one_bit.bin of=/dev /block/platform/msm_sdcc.1/by-name/fotamng seek=131088 bs=1 count=1 $ dd if=/data/local/tmp/one_bit.bin of=/dev/block/platform/msm_sdcc.1/ by-name/fotamng seek=131096 bs=1 count=1

Nakon ponovnog pokretanja ponovno se postavljaju. U dmesg-u sam primijetio prisutnost kernel parametra kcdroidboot.mode=f-ksg. Evo ga! Oni. Bootloader uklanja zaštitu za foto. I čisto teoretski, ako napišem boot particiju na fotu i ponovno dignem telefon u ovaj mod, onda ću dobiti kernel s isključenom Kyocera zaštitom. Ali još uvijek ne mogu pisati na sistemske particije.

Proučavanje izvora malog kernela (lk).

Ono što se nalazi u odjeljku aboot je Android bootloader, čiji se originalni izvori nalaze na:


Tamo također možete pronaći informacije o tome kako se odvija učitavanje u neki od modova. Na primjer, pronašao sam informacije da ako napišete "boot-recovery" u odjeljku misc, onda bez adb ponovno pokretanje oporavak. Prilikom učitavanja u oporavak ovo . A ako se oporavak ne može pokrenuti, tada će telefon otići u petlju za pokretanje i izgubit ćete ga. Stoga budite oprezni i bolje izbjegavajte ovu opciju ponovnog pokretanja.


Tamo također možete pronaći kod koji prebacuje područje emmc sustava u način rada. Odgovor na pitanje zašto je nemoguće prebrisati oporavak. Ova se zaštita može onemogućiti iz jezgre Linuxa pisanjem odgovarajućeg modula jezgre. Sve je već napisao jedan drug iz zemlje izlazećeg sunca, koji, čini se, također ima slabu točku na Kyocera telefone. Modul nije radio prvi put, ponekad zamrzne mmc u načinu zahtjeva. Možda nije sve tako jednostavno i potrebno je detaljno proučavanje.


Ovako se provjeravaju potpisi particije za pokretanje:

Prvi uspjesi

dmesg

Google mi je pomogao odgovoriti na pitanje zašto ne mogu čitati zapise kernela: /proc/sys/kernel/dmesg_restrict. Vrijednost ovog parametra je postavljena na 1 kada se telefon pokrene. Ukoliko korisnik nema CAP_SYS_ADMIN mogućnosti, tada mu zapisnici nisu dostupni.

uevent_helper

U mom slučaju, iznenađujuće, bilo je moguće postaviti /sys/kernel/uevent_helper. Ako napišete put do izvršne datoteke u ovom parametru (radit će i skripta ljuske), tada će se pokrenuti u određenom intervalu od init procesa u init kontekstu i, što je najvažnije, s punim mogućnostima.


Napisao sam skriptu:


#!/system/bin/sh echo 0 > /proc/sys/kernel/dmesg_restrict

Skinuo sam ga na svoj telefon i zapisao njegov put u /sys/kernel/uevent_helper. Sada imam priliku vidjeti dmesg!

Zakrpan adbd


Jer Umoran sam od pristupa ogoljenoj Android konzoli, a previše sam lijen da krpam adbd binarnu datoteku, pa sam odlučio izgraditi vlastiti adbd s blackjackom i kurvama. Da bih to učinio, morao sam preuzeti 70 Gb Android izvora kako ne bih petljao sa svakom ovisnošću zasebno. Uklonio sam ček koji smanjuje mogućnosti, kompajlirao ga, zamijenio /sbin/adbd i dobio potpunu root konzolu. Sada mogu montirati datotečne sustave, gledati dmesg bez prekida veze dmesg_ograničiti, tiho pregledavati i uređivati ​​datoteke koje ne pripadaju rootu i još mnogo toga. Ali još ne mogu montirati /system particiju i učitati module u kernel.


Usput, ovaj se postupak može izbjeći kompajliranjem lsh-a i zamjenom njegove staze u /sys/kernel/uevent_helper. Preporučljivo je zamotati pokretanje lsh-a u skriptu koja specificira PATH okruženje, inače ćete morati specificirati puni put do svake naredbe.

WiFi

WiFi na mom telefonu radi preko kernel modula. WiFi je uključen - modul je učitan. WiFi je isključen - modul je istovaren. Ako zamijenite modul svojim, onda kada uključivanje WiFi-ja Lažni modul bi se trebao učitati. Na moju sreću digitalni potpis moduli nisu provjereni. Prvo što sam pokušao bilo je izgraditi i učitati modul koji onemogućuje SELinux zamjenom memorije kernela na Amazon Fire telefonu: https://github.com/chaosmaster/ford_selinux_permissive


Za izgradnju modula potrebni su vam više-manje odgovarajući kernel izvori i datoteka Module.symvers. Ako izvori točno odgovaraju kernelu koji se koristi na telefonu, tada bi Module.symvers generiran automatski prilikom izgradnje kernela trebao biti prikladan.


Ako se kernel žali prilikom učitavanja modula ( ne slaže se oko verzije simbola module_layout), tada ćete morati izdvojiti Module.symvers s particije za pokretanje. To se može učiniti pomoću skripte https://github.com/glandium/extract-symvers:


$ unpackbootimg -i boot.img -o boot $ extract-symvers.py -e le -B 0xc0008000 boot/boot.img-zImage > %PATH_TO_KERNEL%/Module.symvers

Ne možete samo uzeti i sastaviti vlastiti modul za Kyocera telefon.




Svakim rješenjem drugog problema proces sve više podsjeća na aporiju Ahileja i kornjače. Ne znam koliko će još trajati moj entuzijazam. Možda ovdje postoje upućeni ljudi koji vam mogu pomoći doći do dna zečje rupe.


Želio bih iskoristiti ovu priliku da izrazim svoju zahvalnost programerima iz Kyocere za njihove izvrsne uređaje i njihovu zaštitu. Inače ovaj članak ne bi postojao. S druge strane, nedostatak redovitih ažuriranja je vrlo razočaravajući. Ako dobijete model telefona s mogućnošću otključavanja bootloadera, sigurno ću ga kupiti.


p.s. Veliko hvala Nikolayu Elenkovu, autoru knjige Android security internals. Njegova objašnjenja o radu bootloadera pomogla su u razumijevanju procesa pokretanja Androida.


P.P.S. Još jedan stručnjak za mobilnu sigurnost, Justin Case, rekao je da poznaje ranjivost kojoj su svi izloženi moderni procesori Qualcomm, ali njegove detalje neće otkriti.

Oznake:

  • android
  • bootloader Pošalji anonimno

U ovom članku želim pisati o konzolnim programima koji će pomoći u problemu pune informacije o hardveru vašeg osobnog računala (proizvođač, marka, ID uređaja i drugi podaci o opremi). Mnogi korisnici koji su prešli na Linux s OS-a zle korporacije navikli su raditi u njemu grafički programi, ali tijekom godina rada u Linuxu shvatite da sve radi brže u Terminalu, dane informacije su potpunije i fleksibilnije.

Korisnost lspci je Unix uslužni program koji prikazuje detaljne informacije o svim PCI sabirnicama i uređajima na njima. Uslužni program lspci prvo čita informacije s PCI sabirnice, a zatim traži dodatne informacije u vlastitoj bazi podataka koja se nalazi u datoteci /usr/share/hwdata/pci.ids i sadrži podatke kao što su identifikator hardvera, proizvođač, uređaji, klase i podklase. Da biste pokrenuli program, pokrenite u terminalu:

lspci


02:00.0 Ethernet kontroler: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet kontroler (rev. 06)
03:00.0 USB kontroler: ASMedia Technology Inc. ASM1042 SuperSpeed ​​​​USB host kontroler
04:00.0 SATA kontroler: JMicron Technology Corp. JMB362 SATA kontroler (rev. 10)
05:00.0 USB kontroler: ASMedia Technology Inc. ASM1042 SuperSpeed ​​​​USB host kontroler
06:00.0 SATA kontroler: JMicron Technology Corp. JMB362 SATA kontroler (rev. 10)

07:06.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 IEEE 1394 OHCI kontroler (rev c0)

Da biste dobili više informacija, pokrenite:

lspci -v

03:00.0 USB kontroler: ASMedia Technology Inc. ASM1042 SuperSpeed ​​​​USB host kontroler (prog-if 30)

Oznake: master sabirnice, brzi razvoj, latencija 0, IRQ 46
Memorija na fe500000 (64-bitna, bez mogućnosti prethodnog dohvaćanja)
Mogućnosti:

05:00.0 USB kontroler: ASMedia Technology Inc. ASM1042 SuperSpeed ​​​​USB host kontroler (prog-if 30)
Podsustav: ASUSTeK Computer Inc. P8B WS matična ploča
Oznake: master sabirnice, brzi razvoj, latencija 0, IRQ 50
Memorija na fe300000 (64-bitna, bez mogućnosti prethodnog dohvaćanja)
Mogućnosti:
Upravljački program kernela u upotrebi: xhci_hcd

07:05.0 Multimedijski video kontroler: Conexant Systems, Inc. CX23880/1/2/3 PCI video i audio dekoder (rev. 05)
Oznake: master sabirnice, srednji razvoj, latencija 32, IRQ 20
Memorija na fb000000 (32-bitno, bez mogućnosti prethodnog dohvaćanja)
Mogućnosti:
Upravljački program kernela koji se koristi: cx8800

07:06.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 IEEE 1394 OHCI kontroler (rev c0) (prog-if 10)
Podsustav: ASUSTeK Computer Inc. Matična ploča
Oznake: master sabirnice, srednji razvoj, latencija 32, IRQ 21
Memorija na fc000000 (32-bitno, bez mogućnosti prethodnog dohvaćanja)
I/O portovi na a000
Mogućnosti:
Upravljački program kernela u upotrebi: firewire_ohci
Samim time bit će mnogo više teksta, ali će i podaci o opremi biti obimniji. Možete čak saznati, na primjer, IRQ broj na kojem željeni uređaj visi. Ako trebate saznati informacije o određenoj opremi, na primjer video Nvidia kartica, tada trebate primijeniti naredbu za pretraživanje s naredbom grep. Kao rezultat toga, naš će tim biti sljedeći:

lspci | grep NVIDIA

Imajte na umu da naredba grep razlikuje velika i mala slova, pa ako prvi put ne pronađete informacije koje su vam potrebne, trebate promijeniti riječi za pretraživanje, na primjer: nvidia, NVIDIA ili dio riječi - idia ili IDIA.

Izlaz naredbe bio je sljedeći:

01:00.0 VGA kompatibilan kontroler: NVIDIA Corporation GF108 (rev a1)
01:00.1 Audio uređaj: NVIDIA Corporation GF108 High Definicija zvuka Kontroler (rev a1)

Ako želite dobiti informacije o opremi u tekstualnoj datoteci, pokrenite naredbu:

lspci > lspci.txt

Kao rezultat toga, tekstualna datoteka lspci.txt pojavit će se u vašem početnom direktoriju

Ako trebate dobiti popis svih uređaja u sustavu, uključujući USB i SCSI, konfiguraciju memorije, saznati vrstu procesora, možete koristiti program dmesg. Prikazuje popis svog hardvera koji će otkriti jezgra sustava.

Pokrenite naredbu u terminalu:

dmesg

Ako pokrenete naredbu:

dmesg | manje

tada će popis pronađene opreme biti vrlo velik. Stoga, za analizu svih informacija, savjetujem vam da spremite izlaz ove naredbe u tekstualnu datoteku. Da biste to učinili, pokrenite naredbu:

dmesg | manje > dmesg.txt

Izlaz dmesg također se može filtrirati za pretraživanje potrebne uređaje. Sljedeća naredba prikazat će popis svih USB uređaja na sustavu:

dmesg | grep -i usb

Također možete koristiti uslužni program lshw. Ako nije instalirano, pokrenite naredbu:

sudo apt-get install lshw

Da biste ga pokrenuli, pokrenite naredbu:

sudo lshw

Program prikazuje strukturirani popis opreme zajedno s informacijama o uređajima. Podaci se pokazuju vrlo prostranim i korisnim. Neke informacije iz rezultata uslužnog programa:

*-CD ROM
Opis: DVD-RAM snimač
proizvod: DRW-24B5ST
proizvođač: ASUS
fizički ID: 0.0.0
informacije o sabirnici: scsi@3:0.0.0
logično ime: /dev/sr1

verzija: 1.00
Značajke: prijenosni audio cd-r cd-rw dvd dvd-r dvd-ram
konfiguracija: ansiversion=5 mount.fstype=iso9660 mount.options=ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500 stanje=montirano status=spremno
*-srednji
fizički ID: 0
logično ime: /dev/sr1
logički naziv: /media/dm/disk
konfiguracija: mount.fstype=iso9660 mount.options=ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500 stanje=montirano

Također možete izvući mnogo korisnih informacija iz /proc sistemskog direktorija. To je svojevrsna "snimka" stanja sustava i njegovih varijabli, koja pohranjuje puno korisnih informacija o sustavu, naime: razinu baterije prijenosnog računala, podatke o procesoru, brzinu ventilatora, podatke o povezanim uređajima , i mnogo više. Da biste vidjeli koje se datoteke nalaze u direktoriju /proc, morate pokrenuti naredbu:

ls /proc/

Da biste saznali informacije o procesoru, pokrenite naredbu:

mačka /proc/cpuinfo

U mom slučaju, izlaz je bio ovakav (prikazuje se samo dio tekstualnih informacija):

procesor: 0
vendor_id: AuthenticAMD
obitelj procesora: 21
model: 1
naziv modela: AMD FX(tm)-6100 procesor sa šest jezgri
koračanje: 2
mikrokod: 0x6000629
CPU MHz: 1400.000
veličina predmemorije: 2048 KB
fizički ID: 0
braća i sestre: 6
ID jezgre: 0
procesorske jezgre: 3
apicid: 16
početni apicid: 0
fpu: da
fpu_iznimka: da
cpuid razina: 13
wp: da

Da biste saznali status baterije prijenosnog računala, morate pokrenuti sljedeću naredbu:

mačka /proc/acpi/baterija/BAT0/info

Da biste saznali informacije o svim povezanim USB uređajima, morate koristiti uslužni program lsusb. Pokrenite naredbu:

lsusb

Autobus 003 Uređaj 004: ID 13fe:4100 Kingston Technology Company Inc.
Sabirnica 003 Uređaj 003: ID 125f:c96a A-DATA Technology Co., Ltd. Flash pogon C906
Sabirnica 003 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Uređaj 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Sabirnica 006 Uređaj 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 uređaj 004: ID 058f:6361 Alcor Micro Corp. Čitač multimedijskih kartica
Bus 002 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 uređaj 002: ID 046d:c05a Logitech, Inc. Optički miš M90/M100
Bus 005 Uređaj 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Sabirnica 001 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Sabirnica 004 Uređaj 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Sabirnica 011 Uređaj 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 010 uređaj 003: ID 04d9:1702 Holtek Semiconductor, Inc.
Bus 010 uređaj 002: ID 046d:0829 Logitech, Inc.
Sabirnica 010 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 009 Uređaj 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Sabirnica 008 Uređaj 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

I na kraju, nekoliko uslužnih programa za dobivanje informacija o tvrdi diskovi. Korisnost hdparm podešava i pregledava parametre tvrdi diskovi s ATA sučeljem. Može postaviti parametre kao što su veličina predmemorije pogona, način mirovanja, upravljanje napajanjem, upravljanje akustikom i DMA postavke. Da biste saznali informacije o povezanim tvrdim diskovima, pokrenite naredbu:

sudo hdparm -I /dev/sda

Ovom naredbom saznat ćemo informacije o vašem tvrdom disku /dev/sda. Evo dijela rezultata:

ATA uređaj, s neizmjenjivim medijem
Broj modela: WDC WD6400AARS-00Y5B1
Serijski broj: WD-WCAV5D714851
Revizija firmvera: 80.00A80
Prijenos: Serijski, SATA 1.0a, SATA II ekstenzije, SATA Rev 2.5, SATA Rev 2.6
Standardi:
Podržano: 8 7 6 5
Vjerojatno korišteno: 8
Konfiguracija:
Logična najveća struja
cilindri 16383 16383
glave 16 16
sektori/staza 63 63

CHS trenutni adresabilni sektori: 16514064
LBA korisnički adresabilni sektori: 268435455
LBA48 korisnički adresirani sektori: 1250263728
Veličina logičkog/fizičkog sektora: 512 bajtova
Ako program nije instaliran, pokrenite naredbu u terminalu:

sudo apt-get instaliraj hdparm

fdisk -l

Kao rezultat toga, vidjet ćemo popis svih povezanih tvrdih diskova, flash pogona i memorijskih kartica. Također ćemo vidjeti koliko je particija napravljeno na disku.

Disk /dev/sda: 640,1 GB, 640135028736 bajtova
255 glava, 63 sektora/staza, 77825 cilindara, ukupno 1250263728 sektora
Jedinice = sektori od 1 * 512 = 512 bajtova
Veličina sektora (logička/fizička): 512 bajtova / 512 bajtova
I/O veličina (minimalna/optimalna): 512 bajtova / 512 bajtova
ID diska: 0x0009d6f7

Učitavanje uređaja Početak Kraj Blokira ID Sustav
/dev/sda1 * 2048 61441501 30719727 83 Linux
/dev/sda2 61442048 73730031 6143992 82 Linux swap / Solaris
/dev/sda3 73730048 1250263039 588266496 83 Linux

To je sve i sretno svima!

—————————————————————————

Zgodni ÁKOS iz popularne mađarske grupe Bonanza Banzai

Problem
Unatoč svim svojim prednostima, PCI sabirnica je stvar prošlosti. Češće trebate dobiti popis svih uređaja u sustavu, a ne samo PCI uređaja: ovo i USB uređaji,
i SCSI uređaji, konfiguracija memorije pa čak i procesor.
Riješenje
Koristite program dmesg. Program prikazuje popis svog hardvera koji je otkrio kernel.
Za pregled svih dmesg izlaza, unesite naredbu
$dmesg | manje
Izlaz dmesg također se može filtrirati kako bi se pronašli specifični
uređaja. Dakle, sljedeća naredba ispisuje sve PCI uređaje:
$ dmesg I grep -i usb
Popis ISA uređaja:
$ dmesg ] grep -i isa
isapnp: Skeniranje za PnP kartice...
isapnp: SB audio uređaj quirk - povećanje raspona priključaka
isapnp: kartica "SupraExpress 56i Voice"
Određivanje količine fizičke memorije u sustavu:
$dmesg | grep -i memorija
Memorija: 256492/262080k dostupno (1467k kod kernela. 5204 rezervirano. 516k podataka. 96k
u tome . OK highmem)
Ispis popisa IDE uređaji, koristeći podsustav SCSI emulacije u kernelu 2.4 i starijim verzijama:
$dmesg | grep -i scsi
Naredbeni redak kernela: root=/dev/hda6 ro hdb=scsi hdc=scsi
ide_setup: hdb=scsi
ide_setup: hdc=scsi

hdb: priloženi ide-scsi upravljački program
hdc: priloženi ide-scsi drajver
scsio: emulacija SCSI host adaptera za IDE ATAPI uređaje
A evo kako izgledaju "pravi", neemulirani SCST uređaji:
$dmesg | grep -i scsi
Upravljački program SCSI podsustava Revizija: 1.00
scsiO: Upravljački program Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA, Rev. 6.2.8
aic7892: Ultral60 Wide Channel A, SCSI Id=7. 32/253 SCBs
...Dobavljač: IBM-PSG Model: DPSS-336950M M Rev: S9HA
Priloženi scsi disk sda na scsiO, kanal 0. id 0. lun 0
(scsi0:A:0): 160.000MB/S prijenosi (80.000MHz DT. pomak 63.16bit)
SCSI uređaj sda: 71096640 512-bajtni hdwr sektori (36401 MB)
Provjera particije:
sda: sdal sda2sda3 sda4< sda5 sda6 >
Sljedeće prikazuje informacije o USB kamera spojen na sustav, uključujući
njegov položaj u sustav datoteka. Obično informacije o USB uređaju
traje desetak redaka ili više:
% dmesg | grep -i usb
. . .
usb.s: registriran novi d r i v e r ibmcam
icmcam.c: IBM PC Camera USB kamera pronađena (model 2. rev. 0x030a)
usbvideo.c: ibmcam na /dev/videoO: canvas=352x240 videosize=352x240
Prikaz informacija o serijski priključci:
$dmesg | grep -i tty
ttySOO na 0x03f8 (irq = 4) je 16550A
Prikaz podataka o procesoru (ili procesorima):
$dmesg | grep -i procesor
Inicijalizacija CPU-a#0
CPU: LI Cache: 64K (64 bajta/liniji). D predmemorija 64K (64 bajta/liniji)
CPU: L2 predmemorija: 64K (64 bajta/liniji)
Izvještavanje o provjeri Intelovog stroja omogućeno je na CPU-u #0.
CPU: Nakon generičkog, caps: 0183f9ff clc7f9ff 00000000 00000000
CPU: Uobičajena ograničenja: 0183f9ff clc7f9ff 00000000 00000000
CPU: AMD Duron(tm) procesor stepping 01
Imajte na umu da pretraživanje vraća samo one retke koji sadrže traženi podniz. Često dodatne informacije sadržano
u susjednim redovima i nalazi se izravnim pregledom datoteke:
Inicijalizacija CPU-a#0
Otkriven procesor od 801,446 MHz.