Android Filesystem အကြောင်း သိကောင်းစရာ

date_range 26 February 2017

Android Filesystem အကြောင်း သိကောင်းစရာ

visibility 2760 Views

                ကျနော်တို့ Android OS ရဲ့ တခြားအကြောင်းအရာတွေ မပြောသေးခင် Android ရဲ့ Filesystem အကြောင်း သိသင့်သိထိုက်တာလေးတွေကို အရင် စ ပြောကြရအောင်။ ကျနော် ဖတ်ရလွယ်ကူအောင် Categories လေးတွေခွဲပြီး ရှင်းပြပေးသွားပါမယ်။

Root & Root Admin Acess 

                Android filesystem ဟာ Root  file hierarchy ကို ကိုယ်စားပြုပါတယ်။ Root ဆိုတာကတော့ “/” (တစ်နည်း) File တွေရယ် Filesystem တွေမရှိခင် သစ်ပင်အမြစ်တစ်ခုလို ကိုယ်စားပြုတဲ့ အက္ခရာလေးပါ။ ထိုနေရာမှ တစ်ဆင့် filesystem အမျိုးမျိုးကွဲပြားသွားတာပါ။ ဥပမာ Internal storage ဆိုရင် “/sdcard” or “/storage/emulated/0/”  အဲ့လိုမျိုး အဆင့်အဆင့်ကွဲပြား ခြားနားသွားတာကိုမြင်တွေ့ရမှာဖြစ်ပါတယ်။

                (စာကြွင်း။   ။ များသောအားဖြင့် Android ဖုန်းတွေမှာ Filesystem ကို ထိတွေ့စေမှု မရှိပါဘူး။ သိချင်တယ်ဆိုရင်တော့ Root Explorer ဆိုတဲ့  app ဒေါင်းပြီးသာ ဝင်ကြည့်ကြည့်ကြပါလို့။ ဒါပေမဲ့ Root access ရှိနေတယ်ဆိုရင် RW access ရမှာဖြစ်တဲ့အတွက် System file တွေကိုနားမလည်ပဲ ပြင်တာမျိုးမလုပ်သင့်ပါဘူး) 

                Root file hierarchy ကိုအကျွမ်းတဝင်ဖြစ်တာကတော့ Android based ပြုထားတဲ့ Linux ကပါပဲ။ Linux user အများစုအတွက်ဒီ Root file hierarchy architecture ကိုအထူးတလည်ရှင်းပြနေစရာတော့မလိုပါဘူး။

Root ဖောက်တယ်ဆိုတာကို ကြားဖူးကြမယ်ထင်ပါတယ်။ တကယ်ဆို အဲ့လိုသုံးနှုန်းတာဟာ မှန်ပါသလား?

                တကယ်တော့မဟုတ်ပါ။ Root access ဆိုတာ Root administrator previledges ကို ကိုယ်စားပြုပြီး အတိုကောက်ခေါ်ဝေါ်တာပါ။ Linux user များအတွက် Terminal ကနေ su command ခေါ်လိုက်တာနဲ့ password ရိုက်ပြီး တန်းဝင်လို့ရပါတယ်။ Root admin access ကို လွယ်လင့်တကူ ရယူနိုင်ပါတယ်။ Android phone တွေမှာက တမင်ကို မထည့်ပေးထားတာလို့ပဲ ပြောချင်ပါတယ်။

                Linux ဟာ Open source ဖြစ်ပြီး User-defined/preferences အရ သုံးချင်သုံး မသုံးချင်မသုံးနဲ့ ဆိုတဲ့ system ပုံစံမျိုးဖြစ်ပြီး ဘာ Warranty ဘာ limitations မှမရှိတာကြောင့် Root admin access ကိုပေးထားပါတယ်။ End-user သဘောသဘာဝအရ လိုသလိုချိန်ညှိနိုင်ဖို့လည်းဖြစ်ပါတယ်။ Root command ထက် sudo command (user-access) ကိုလည်းအသုံးများပါတယ်။ Windows မှာဆိုရင် User-account control နဲ့ Administrator account ကွဲပြားသလိုပါပဲ။

                ကျနော်တို့ Android phone တွေမှာကတော့ User account control ကိုဒါမျိုး terminal တွေဘာတွေ သုံးနေစရာမလိုအောင်ကို package-installer ကအစ ready made အနေနဲ့ APK (Android Package Kit) ဖိုင်လေးတွေနဲ့ install လုပ်ခွင့်တွေ အကုန်ပေးထားပါတယ်။ ဒါပေမဲ့ terminal မရှိဘူးလားဆိုတော့ Android debugging bridge (ADB) နဲ့လည်း Shell ကို access လုပ်လို့ရသလို Terminal Emulator ဆိုတဲ့ app နဲ့လည်း ကွန်ပျုတာမလိုပဲ command line တွေသုံးလို့ရပါတယ်။ Android ထဲမှ command line တွေကို /system/bin နဲ့ /system/xbin တွေထဲက binary file တွေနဲ့ Execute လုပ်လို့ရပါတယ်။ Busybox binary ကလည်း အတော်ကိုအသုံးဝင်ခဲ့တဲ့ binary တစ်ခုအဖြစ် Android မှာရပ်တည်နေခဲ့ပါတယ်။ (Pre-installed တော့ပါဝင်လာတာနည်းပါတယ်။ Custom OS တွေမှာပဲ ပါဝင်ပါတယ်)။

                Rooting ဆိုတာကို အရင်တုန်းကတော့ SELinux enforcing တွေ System-less mode တွေမရှိတုန်းက ကျွန်တော်တို့ Android system ရဲ့ security ကို exploit လုပ်ပြီး Root binary (ခေါ်) su binary ကို /system/bin နဲ့ /system/xbin ထဲကို inject လုပ်ပြီး Root access ကို mount လုပ်ယူပါတယ်။ SuperSU တို့ SuperUser တို့ဟာ Root access grant ဖြစ် မဖြစ် တမင်တကာ အကာအကွယ်ယူပြီး User ဆီက permission တောင်းတဲ့ ကြားခံနယ်သက်သက်ပါပဲ။ SU permission Granted ဖြစ်ခဲ့ပါက /system နဲ့ အခြားသော /mnt, /data partition တွေထဲကို လိုသလို Read/Write Access ရပြီးသားဖြစ်လို့ System ကိုစိတ်ကြိုက် modified လုပ်နိုင်တဲ့အနေအထားကိုရရှိပါတယ်။

                Android ဖုန်းတွေထဲမှာ Root access ကို pre-installed မလုပ်ပေးထားတာကတော့ Warranty issues တွေကြောင့်ရယ် (လိုသလို modified လုပ်လို့ရစေတာက end-user အတွက် မသိပဲကလိမိပြီး ပြဿနာပေါင်းများစွာကို ဖြစ်ပေါ်စေနိုင်ပါတယ်), Virus နဲ့ potential privacy hacking malware တွေကို တားဆီးလို့ရအောင် တမင်မထည့်ပေးထားတာပဲဖြစ်ပါတယ်။ (ဒါပေမဲ့ Android ရဲ့ source မှာတော့ su binary ဟာရှိဆဲ ရှိလျှက်ပါပဲ။ ဖြုတ်တာ မဖြုတ်တာကတော့ Rom Cook တဲ့ developer အပေါ်ပဲ မူတည်ပါတယ်)  ကျွန်တော်တို့နေ့စဉ်နဲ့အမျှသုံးနေတဲ့ mobile ဖုန်းတွေက end-user အများအပြားဆီရောက်ရှိမှာဖြစ်တဲ့အတွက်ကြောင့် အစကတည်းက Root access ကိုမပေးထားတာက  ပိုကောင်းတယ်လို့ပဲ စာရေးသူအနေနဲ့မြင်မိပါတယ်။ နောက် article မှာမှ Root exploits တွေနဲ့ တခြား Hacks အကြောင်းတွေကို reference လုပ်ပြီးရေးသားပေးပါမယ်။

Basic filesystem for Android

                Android filesystem တွေကို Kernel မှ mount point တွေနဲ့တဆင့် boot process မှာ pre-configured လုပ်ထားပါတယ်။ Mount point တွေအကြောင်းကိုသိချင်တယ်ဆိုရင်တော့ ဖုန်းတွေတိုင်းမှာ /dev/block/mmblkxxxx (xxxx ဆိုတာက mount point တွေပါ.. blk ဆိုတာကတော့ block ကိုဆိုလိုပါတယ်) ဆိုတဲ့နေရာမှာဝင်ကြည့်နိုင်ပါတယ်။ တော်တော်တော့များတယ်။ ကျွန်တော်တို့ system partition ဆို ဥပမာ /dev/block/mmblk001 > /system, data partition ဆို /dev/block/mmblk002 > /data ဆိုပြီး mount point တွေပေးထားပါတယ်။ Custom recovery တွေက အဲ့ mount point တွေယူသုံးပြီး Custom OS တွေကို flashable zip ထဲက updater-script ကနေ ရေးသွင်းပြီး သက်ဆိုင်ရာဖိုင်တွေ copy ကူးထည့် chmod (Change permission) လုပ်ကာ သွင်းယူတာဖြစ်ပါတယ် (နောက် article မှာ အဲ့အကြောင်း ဆက်ဆွေးနွေးပေးပါမယ်)။

Directory နာမည်များနှင့် ဖြေရှင်းချက်များ

/acct - User Account Control အတွက် အသုံးပြုပါတယ်
/cache - Cache ဖိုင် partition တစ်ခုဖြစ်ပြီး များသောအားဖြင့်  /dev/block/mtdblock2 ဆိုတဲ့ mount point ကနေအခြေခံပါတယ်။ ဖုန်းအမျိုးအစားအပေါ်မူတည်ပြီး mount point ကွဲပြားနိုင်ပါတယ်။
/d -  /sys/kernel/debug နေရာကို symbolic link လုပ်ထားတဲ့ partition တစ်ခု သက်သက်သာဖြစ်ပါတယ်။ Kernel debug တွေ log တွေဝင်ကြည့်/လုပ်တဲ့ နေရာသက်သက်ပါ (Symbolic Link က Mount point နဲ့မသက်ဆိုင်ပါဘူး နောက် article မှာရှင်းပြပေးပါမယ်)
/data - ဒါကတော့ ကျွန်တော်တို့ရဲ့ user app တွေ settings တွေသိမ်းဆည်းထားတဲ့ Data partition ဖြစ်ပါတယ်။ အထူးတလည်ရှင်းပြစရာတော့မလိုလောက်ဘူးထင်ပါတယ်။ ယေဘုယျအားဖြင့်  /dev/block/mtdblock1 မှာ mount ထားပါတယ်
/dev - ဒီနေရာကတော့ အများသိတဲ့အတိုင်း ကျွန်တော်တို့ရဲ့ System ထဲမှာ ရှိသမျှ filesystem ရဲ့ Mount point တွေနဲ့ CPU control group တွေ စုစည်းရာနေရာတစ်ခုဖြစ်ပါတယ်။ Kernel မှလည်း control လုပ်ပါတယ် ဒီနေရာကို။
/etc - Symbolic link အနေနဲ့ /system/etc ထဲကနေရာကို တိုက်ရိုက် ချိတ်ထားပါတယ်။ Audio, Video, Data, Wifi နဲ့အခြားသော permission ဖိုင်များ hardware configuration ဖိုင်များစွာရှိတဲ့နေရာတစ်ခုပါပဲ
/init - သူလည်းအရေးကြီးတဲ့ ဖိုင်တစ်မျိုးပါပဲ။ Android booting process အတွက် လိုအပ်တဲ့ program များ script များ ကို kernel boot နောက်ပိုင်းမှာ run ပါတယ်။ init ကိုအကျွမ်းတဝင် လေ့လာမယ်ဆိုရင် Android boot-up process တစ်ခုလုံးကို နားလည်လောက်တဲ့အထိပါပဲ။ တစ်ခုသတိထားရမှာက init ဖိုင်အခွဲပေါင်းများစွာ / အောက်မှာရှိနေသေးတာပါပဲ။ .sh ဖိုင်ပေါင်းများစွာကိုလည်းတွေ့ရဦးမှာဖြစ်ပါတယ်။ .sh ဆိုတာကတော့ shell script ပါ
/mnt  -  /mnt ကတော့အများသိတဲ့အတိုင်း Internal storage, External storage (Sdcard, OTG, etc.) ပြီးတော့ tmpfs နဲ့ obb တွေကို mount လုပ်ထားတဲ့နေရာတစ်ခုပါပဲ။ Obb ဆိုတာကတော့ application ရဲ့ filesystem တစ်ခုဟာ 50mb နဲ့အထက်ကျော်နေပြီဆိုရင် သပ်သပ်ထပ်ပြီး external ထပ်တိုးတဲ့ app storage system တစ်ခုပါပဲ။ တော်တော်များများတော့သိကြပါတယ်။ (Game file တွေအတွက် .obb file တွေလိုတယ်ဆိုတာကို)
/proc -   Kernel ရဲ့ data structure ကို access ပေးထားတဲ့ mount point တစ်ခုပါပဲ။
/sbin  -  Linux filesystem ရဲ့ standard binary file တွေသိမ်းထားတဲ့ နေရာတစ်ခုပါပဲ။ အဲ့ထလည်းမပိုသလို အထူးတလည်ကြီးရှင်းပြနေစရာတော့သိပ်မလိုပါဘူး။
/sdcard  -  အရင်တုန်းကတည်းကသုံးတဲ့နာမည်မို့သာ /sdcard ဖြစ်နေတာပါ။ အခုအချိန်မှာတော့ ဖုန်းအတော်တော်များများဟာ ကိုယ်ပိုင် internal storage ရှိလာပြီဖြစ်တဲ့အတွက်ကြောင့် အဲ့နေရာဟာ "/mnt/sdcard" ကို symbolic link လုပ်ထားတဲ့ internal storage သက်သက်ဖြစ်သွားပါပြီ။ Android စတင်ထုတ်လုပ်ခဲ့တုန်းက filesystem ဟာ SD Card ကိုပဲ Internal storage အဖြစ် App သွင်းရာမှာကော တခြား အရာတွေ အတွက် အားကိုးခဲ့ရလို့ပါ။ အခုတော့ အဲ့ဒါမျိုးမရှိတော့ပါဘူး။
/sys  -  Kernel တွေရဲ့ mount point ပါ။ Input devices တွေနဲ့ တခြားသော system control တွေနဲ့အတူ တည်ရှိပါတယ်။ sysfs pseudo filesystem လို့လည်းခေါ်ကြပါတယ်။
/system  -  Android OS ရဲ့ System file တွေရဲ့အဓိက ပင်မ HQ လို့ပြောလို့ရတဲ့နေရာတစ်ခုဖြစ်ပါတယ်။ ဒီနေရာကတော့ symlink တွေအများကြီးလုပ်ထားတာကိုလည်း Root filesystem မှာမြင်တွေ့ရမှာဖြစ်ပါတယ်။ 
/ueventd.goldfish.rc ueventd.rc -   ဒီဖိုင်ကတော့ /dev နေရာရဲ့ configuration rules ကိုအဓိက control လုပ်ပေးထားတဲ့ဖိုင်တစ်ခုဖြစ်ပါတယ်။
/vendor -   /system/vendor ဆိုတဲ့နေရာကို symbolic link လုပ်ပေးထားတာပဲဖြစ်ပါတယ်။

                ဒီလောက်ဆို Android filesystem အကြောင်းကို အတော်လေးနားလည်သွားလောက်ပြီ လို့မျှော်လင့်ပါတယ်။ သိချင်တာများကိုလည်း TechX Myanmar Facebook page မှ တစ်ဆင့် မေးမြန်းအကြံပြုနိုင်ပါတယ်။ နောက်ထပ် article များတွင်လည်း Android ရဲ့အရေးကြီးတဲ့ exploits တွေနဲ့ အသုံးဝင်တဲ့ commands တွေ သိသင့်သိထိုက်တာတွေအများကြီးဆက်လက်တင်ပြပေးသွားမှာမို့ အခုတော့ ဒီလောက်နဲ့ပဲနိဂုံးချုပ်လိုက်ပါရစေခင်ဗျာ။ အားလုံးကိုအစဉ်လေးစားလျက်။ 

References
All Things Android
About Author
Assinged Tags
Features Android Featured Articles File System
Categorized Under
Features

Join Us On

Facebook
YouTube
Twitter
GooglePlus
TechX RSS Feed