Thursday, December 18, 2014

Android ဖုန္းအား Root ေဖာက္ျခင္း



Android Device ေပၚမွာ လိုသလို ျပဳျပင္ေျပာင္းလဲႏိုင္ လုိအပ္သမွ် အစိတ္အပိုင္းေတြကို ၀င္ႏိုင္တဲ့ အခြင့္ အေရးကို ရေအာင္ လို႔ ႀကိဳးပန္းႀကပါတယ္၊ ဒီႀကိဳးပန္းမႈေအာင္ျမင္သြားရင္ေတာ့ super user ျဖစ္သြားၿပီေပါ့၊ ဒီလို ဖန္တိးျခင္းကိုပဲ rooting လုပ္တယ္ root ေဖာက္တယ္ လို႔ေခၚတယ္၊
System super user အေကာင့္ကိုလဲ root လို႔ေခၚပါတယ္၊ ဒီ Super User အေကာင့္က UNIX-Base system ရွိ Files ေတြအားလံုး programs ေတြအားလံုးကို လိုသလို ျပဳျပင္ေျပာင္းလဲႏိုင္တဲ့ အခြင့္ အေရးရွိပါတယ္၊ Operating System ေပၚမွာလဲ အျပည့္အ၀ ထိန္းခ်ဳပ္ႏိုင္တဲ့ အခြင့္အေရးရွိပါတယ္၊ Android Device ေပၚမွာ Administartive privileges ေခၚတဲ့ Admin အခြင့္အေရးရေအာင္ ႀကိဳးစားရတဲ့ အေၾကာင္း အရင္း အခ်ိဳ႕ရွိပါတယ္၊ တစ္ခ်ိဳ႕ကေတာ့ System files ေတြကို အသံုးျပဳခ်င္တယ္ လိုအပ္တဲ့ ေျပာင္းလဲမူေတြ လုပ္ခ်င္တယ္ ဒီလိုေျပာင္းလဲလိုက္ျခင္းအားျဖင့္ အဓီက ဗဟိုလုပ္ေဆာင္ခ်က္စနစ္ နဲ႔ လုပ္ကိုင္တဲ့ နည္း တို႔ကိုေျပာင္းလဲ လိုက္ႏိုင္သလို custom theme တစ္ခုကိုျဖစ္ေစ boot animations ျဖစ္ေစေျပာင္းလဲႏိုင္ပါတယ္၊ Root ေဖာက္ျခင္းအားျဖင့္ ရလာတဲ့အျခား အခြင့္အေရးက ဖုန္း၀ယ္ကတည္းက ႀကိဳတင္ထည့္သြင္းထားလို႔ ပါလာတဲ့ applicatoin ေတြကို ျဖတ္ျပစ္ႏိုင္ပါတယ္၊ Full System backup နဲ႔ Restore လုပ္ႏိုင္တယ္၊ custom kernel images နဲ႔ module ေတြကို ၀န္တင္ႏိုင္တယ္၊ ဒီလိုပဲ Root access လိုအပ္တဲ့ apps ေတြကိုလဲ Install လုပ္ႏိုင္လာပါတယ္၊ apps ေတြထဲမွာ root app လို႔ေခၚတဲ့ apps အမ်ိဳးအစားေတြလဲရွိပါတယ္၊ သူတို႔က iptables-base firmware ေတြလို programs ေတြပါ၀င္ပါတယ္ ad-blockers တို႔ overclocking တို႔လို Application ေတြ၊ TeamViewer လို Application ေတြကေတာ့ Root Access ရရွိဖို႔လိုအပ္တဲ့ Applications ေတြျဖစ္ပါတယ္၊ ဒီသင္ခန္းစာရဲ့ ရည္ရြယ္ခ်က္က လံုျခံဳေရး ထိုးေဖာက္ဖို႔ အတြက္ျဖစ္သည့္ အတြက္ UNIX System က ကန္႔သတ္မထားတဲ့ Android Device တစ္ခုရဲ့ လံုျခံဳေရးအားလံုးကို တည္းျဖတ္သြားမွာျဖစ္ပါတယ္၊ (သင္ခန္းစာကို သက္ဆိုက္ရာ က႑ အလိုက္ အပိုင္းေတြခြဲၿပီး သင္ေပးသြားမွာျဖစ္ပါတယ္)၊
သတိျပဳရန္
ဘာေၾကာင့္ပဲ root လုပ္လိုလုပ္လို Root ေဖာက္လိုက္ျခင္းက ဖုန္းရဲ့ လံုျခံဳေရးကို ထိခိုက္ေစတယ္ဆိုတာကိုေတာ့ သေဘာေပါက္ပါ၊ Root ေဖာက္လိုက္ရင္ root permission ရထားတဲ့ applications ေတြအားလံုးက user data အစိတ္အပိုင္းက အခ်က္အလက္ေတြအားလံုးကို ရယူအသံုးျပဳႏိုင္သြားပါတယ္၊ ဒီေတာ့ တစ္ခ်ိဳ႕ အခြင့္ အေရးေစာင့္ေနတဲ့ applicatoins ေတြက user data ေတြအားလံုးကို device ကေန ထုတ္ယူ (ခုိးယူ) သြားႏိုင္ပါတယ္၊ ဒီလို ျဖစ္ေစတဲ့ အဓီက အေၾကာင္းအရင္းက လံုျခံဳ ေရးအရ ခ်မွတ္ထားတဲ့ boot loader locks လို signed recovery update တို႔လို အခ်က္ေတြကို Root ေဖာက္လိုက္တဲ့ အခါ ဖယ္ရွားျပစ္လိုက္ လို႔ပါ၊ (Android api level 12 အထက္ ပံုမွန္ Root မေဖာက္ထားတဲ့ ဖုန္းေတြမွာလွမ္းယူလို႔မရတဲ့ Data ေတြကို Android Root ေဖာက္ထားတဲ့ဖုန္းမွာ ကိုယ့္ application က မဟုတ္တဲ့ Logcat Feeds ေတြလွမ္းယူ အသံုးျပဳကို လက္ေတြ႔ application ေနာက္ရက္ေရးျပသြားပါမယ္၊ သိေစခ်င္တဲ့ အခ်က္က ဒီလို logcat feeds ကိုယူႏိုင္ၿပီဆိုရင္ေတာ့ Facebook တို႔ ျမန္မာ ဘဏ္ application တို႔ကိုသံုးေနတဲ့ ပရိတ္သတ္ရဲ့ ဖုန္းထဲက Logcat ဖတ္ၿပီးသူတို႔ရဲ့ password ေတြကိုလွမ္းယူႏိုင္ပါၿပီ)၊
ဒီသင္ခန္းစာမွာေတာ့ root လုပ္ရတဲ့ ဆင့္ကဲ လုပ္ကိုင္ပံုေတြကို Tool မသံုးဘဲ အေသးစိတ္ လုပ္ျပ ရွင္းျပသြားမွာပါ၊ Android version အလိုက္ Device အလုိက္ ကြဲျပားတဲ့ အေသးစိတ္ အခ်က္ေတြကိုေတာ့ရွင္းျပသြားမွာမဟုတ္ပါဘူး၊ Root access ကိုရယူဖို႔ အဆင့္ဆင့္ လုပ္ေဆာင္ရာမွာ လံုျခံဳေရး ခ်ိဳးျဖတ္သြားတဲ့ အစိတ္အပိုင္းေတြ ပါလာတဲ့ အတြက္ ထုိအပိုင္းမ်ားကို အေသးစိတ္ရွင္းျပထားပါတယ္၊ ဒီအခန္းရဲ့ ေနာက္ဆံုး အပိုင္းမွာေတာ့ ယခင္ Android Rooting လုပ္ရာမွာ ေတြ႔ႀကံဳခဲ့ရတဲ့ အားနည္းခ်က္ေတြအေၾကာင္းကို ရွင္းျပထားပါတယ္၊ ထိုအားနည္းခ်က္ေတြကို ယေန႔ Android versions ေတြမွာေတာ့ ျပဳျပင္ၿပီးသြားပါၿပီ၊

အခ်ိဳ႕အေျခအေနေတြမွာ ဖုန္းကို Root ေဖာက္ျခင္းက phone ရဲ့ အလုပ္လုပ္ပံုေတြကို ပံုမွန္အေျခအေနကေန ေသြဖယ္သြားေစႏိုင္ပါတယ္၊ ဒီလိုျဖစ္ေပၚေစျခင္းရဲ့ အဓီက အခ်က္ကေတာ့ System Files ေတြကို Modify လုပ္ျခင္းေၾကာင့္ပါ၊ ဒီလိုျဖစ္လာရင္ေတာ့ Android ဖုန္းတိုင္းမွာပါတဲ့ factory state ကို Restore လုပ္ဖို႔လိုပါတယ္၊

အဆင့္ဆင့္နားလည္ျခင္း
လက္တစ္ေလာ ကာလမွာေတာ့ Root ေဖာက္တယ္ဆိုတာ ျပႆနာတစ္ခု လို႔သတ္မွတ္လို႔မရေအာင္ လြယ္ေကာင္းလြယ္ေနပါမယ္၊ Google ဆိုတာ သာမာန္ အေပ်ာ္တမ္း အဖြဲ႔အစည္းေလးမဟုတ္ပါဘူး၊ Android အတြက္ အဓီက ထားၿပီး ဖြဲ႔စည္းထားတဲ့ Security Team ကလည္း ကမၻာ့ အေတာ္ဆံုး ဆိုတဲ့ Linux Hackers ေတြ Security Researcher ေတြနဲ႔ဖြဲ႔စည္းထားတာပါ၊ ကေန႔အထိ ကံေကာင္းေထာင္းမ ၿပီး Android ဖုန္းေတြကို လြယ္လြယ္ကူကူ Root ေဖာက္ႏိုင္ေနတာက Google Security Team က ျပင္ဆင္ထားတဲ့ လံုျခံဳေရး အခ်က္ ၁၀၀ ေက်ာ္ကို Android မွာလက္ေတြ႔ မထည့္သြင္းေသးလို႔ပါ၊ ဒီလို မထည့္သြင္းရေသး ျခင္:နဲ႔ အားနည္းခ်က္ဆက္လက္ျဖစ္ေပၚေနျခင္း ရဲ့ ျခြင္းခ်က္ကေတြထဲမွာ Linux Kernel က အခရာ က်တဲ့ အစိတ္အပိုင္း အျဖစ္ပါတယ္၊ Open Source ျဖစ္တဲ့ Linux Kernal ရွိ leaking Holes ေတြထဲက အခ်က္တစ္ခ်ိဳ႕ကို ပိတ္ထားလိုက္ႏိုင္ရင္ root တစ္ခါေဖာက္ ၃၀၀၀ ေထာင္ ကေန ၁၀၀၀၀၀ တစ္သိန္းေလာက္ေတာ့ ေအးေဆးခုန္တက္သြားႏိုင္ပါတယ္၊ အကယ္၍ Google Security Team က ခ်မွတ္ထားတဲ့ အခ်က္ေတြအားလံုးကို လက္ေတြ႔ အသံုးခ်လိုက္မယ္ဆိုရင္ေတာ့ Android ရဲ့ လံုျခံဳေရး က iphone ရဲ့ လံုျခံဳေရး အဆင့္ နဲ႔ တန္းတူ (သို႔) ပို သာဖို႔ပဲ ရွိပါတယ္၊ ဒါေပမယ့္ Open Source တို႔ရဲ့ သေဘာအရ ဒီအဆင့္မ်ိဳးကို တက္လွမ္းႏိုင္ဖို႔ေတာ့ အရမ္းကိုခက္ခဲလွပါတယ္၊ Linux Kernal နဲ႔ Webkit library Open Source ႏွစ္ခုနဲ႔တင္ကို လံုျခံဳေရးက ခ်ာခ်ာလည္ေနပါၿပီး (အခုေျပာေနတာက အခ်က္က်က် မဟုတ္ဘဲ ေယဘယ် သေဘာပါ၊ ဘယ္ အခ်က္ေတြကို Google က လံုျခံဳေရးျမင့္ေနလဲ၊ Linux Keranl နဲ႔ ပက္သက္ၿပီး ဘယ္အခ်က္ေတြကို ပိတ္ခြင့္ေပးဖို႔ Linux ကို ထိန္းခ်ဳပ္ထားတဲ့ အဖြဲ႔အစည္းနည္း ညွိႏိုင္းေနလဲ စသျဖင့္ အေသးစိတ္အခ်က္ကေတာ့ 25 ရက္ေန႔ထုတ္ေ၀မယ့္ Android Hack စာအုပ္ထဲမွာဖတ္ပါ၊) ေသခ်ာ တဲ႔ အခ်က္တစ္ခုကေတာ့ မေ၀းေတာ့တဲ့ အနာဂတ္မွာ Android လံုျခံဳေရး System အရမ္းကို အားေကာင္းလာပါမယ္၊ အဲ့ဒီ့အခါ မ်ိဳးမွာ Root ေဖာက္မယ္ဆိုရင္ေတာ့ Tools ေလးတစ္ခု ျပစ္ထည့္ၿပီး ခလစ္တစ္ခ်က္ႏွိပ္ရံုနဲ႔မရေတာ့ပါဘူး၊ Android System တစ္ခုလံုးကို ေကာင္းေကာင္းနားလည္ထားဖို႔ လိုအပ္ပါတယ္၊ လံုျခံဳေရးအရအဆင့္ျမင့္လာမယ့္ အခ်က္ေတြကို ႀကိဳတင္မေလ့လာႏိုင္ရင္ေတာင္ အနည္းဆံုးေတာ့ တတ္ႏိုင္တဲ့ဘက္ကေန ေလ့လာထားသင့္တာကို ႀကိဳတင္ေလ့လာထားရပါမယ္၊ အခု ေအာက္က အခ်က္တစ္ခ်ိဳ႕ကိုေလ့လာၾကည့္ၾကမယ္၊
၁. Android partitions layout ေတြကိုနားလည္ထားဖို႔ လိုအပ္တယ္၊ ဘယ္ patition မွာ ဘယ္ data ကိုသိမ္းထားတယ္ ဆိုတာသိဖို႔လိုတယ္၊ mounting point ရွာဖို႔ အတြက္ partiton layout ေတြကို သက္ဆိုင္ရာ နားမည္အလိုက္သိဖို႔လိုအပ္သလိုေပါ့၊
၂. Android Booting Process ကိုနားလည္ရမယ္၊ boot process ကိုနားလည္ထားျခင္းက ဘယ္ Services က boot စတက္တာနဲ႔ Super user Privileges နဲ႔ အလုပ္လုပ္လဲ ဆိုတာနားလည္လာမယ္၊ Boot process ရဲ့ ဆင့္ကဲ ျဖစ္စဥ္အတြင္းမွာ ပါ၀င္တဲ့ လံုျခံဳေရး နဲ႔ အားနည္းခ်က္ေတြကို သေဘာေပါက္လာမယ္၊
၃. Lock ခ်ထးတဲ့ Bootloader နဲ႔ Lock မခ်ထားတဲ့ bootloader တို႔အေၾကာင္း နားလည္ထားျခင္း
၄. Booted System ေပၚမွာ Root access ရယူျခင္း အေၾကာင္းနားလည္ထားျခင္း၊
၅. NAND Locks, Temporary Root နဲ႔ Parmanent root တို႔ အေၾကာင္းႏွင့္ လုပ္ကိုင္ပံု အဆင့္ဆင့္ကိုနားလည္ထားျခင္း၊
၆. Softroot ရယူျခင္း အေၾကာင္းနားလည္ထားျခင္း၊
၇. Hacker မ်ားထိုးေဖာက္ခဲ့သည့္ သမိုင္း၀င္တိုက္ခိုက္မႈမ်ားအား ေလ့လာထားျခင္း၊
Kernel: Wunderbar/asroot
Recovery: Volez
Udev: Exploid
Adbd: RageAgainstTheCage
Zygote: Zimperlich and Zysploit
Ashmem: KillingInTheNameOf and psneuter
Vold: GingerBreak
PowerVR: levitator
Libsysutils: zergRush
Kernel: mempodroid
File Permission and Symbolic Link–Related Attacks
Adb Restore Race Condition
Exynos4: exynos-abuse
Diag: lit / diaggetroot

Partition Layout အားနားလည္ျခင္း
Android ဖုန္းကို Root ေဖာက္ဖို႔ျဖစ္ေစ၊ root ေဖာက္ထားတဲ့ဖုန္းမွာ ျမန္မာစာထည့္သြင္းလိုရင္ျဖစ္ရင္ျဖစ္ေစ၊ font-changer တည္ေဆာက္လိုရင္ျဖစ္ေစ၊ Adb ကို super user အခြင့္အေရးရယူၿပီးေတာ့ ဖုန္းရဲ့ system ပိုင္းမွာ လိုအပ္သမွ်ကို ျပဳျပင္ေျပာင္းလဲ ရာမွာျဖစ္ေစ၊ Network Lock ေျဖရာမွာျဖစ္ေစ၊ Bootloader Unlock လုပ္ရာမွာျဖစ္ေစ File System partition ေတြဘယ္လိုအစိတ္အပိုင္းခြဲထားတယ္၊ ဘယ္ partition ေတြ ဖုန္းမွာပါ၀င္တယ္ဆိုတာကို အတိအက်သိထားဖို႔လိုအပ္ပါတယ္၊
Partitions ေတြကေတာ့ logical Stroage units ေတြျဖစ္ပါတယ္၊ သူတို႔ကို ဖုန္းရဲ့ အျမဲ တည္ရွိေနမယ့္ memory storage (persistent storage memory) ထဲမွာ သိုေလွာင္ထားပါတယ္၊ သက္ဆိုင္ရာ အစိအစဥ္အလိုက္၊ offsets နဲ႔ အရြယ္အစားအလိုက္ Layout ေတြမတူညီႀကပါဘူး၊ ဖုန္းအမ်ားစုမွာေတာ့ partition layout ေတြကို bootloader ေတြက သတ္မွတ္ႀကပါတယ္၊ အခ်ိဳ႕ဖုန္းေတြမွာေတာ့ Partitions ေတြကို Kernel က ကိုင္တြယ္တြယ္သတ္မွတ္ပါတယ္၊ low-level storage partitioning ခြဲျခင္းက device အလုပ္လုပ္ေဆာင္မႈ အတြက္ အထူး အေရးႀကီးလွပါတယ္၊ partition layout ခြဲပံုက ဖုန္းကုမၼဏီ နဲ႔ platform အလုိက္ ကြာျခားပါတယ္၊ ဒါေပမယ့္ အခ်ိဳ႕ေသာ partitions ေတြကေတာ့ ဖုန္းတိုင္မွာ ပါ၀င္မူ အတူတူပါပဲ၊ အျမင္ရအမ်ားဆံုး partitions ေတြကေတာ့ boot,system,data,recovery,chche partitions ေတြျဖစ္ပါတယ္၊ အခုဖုန္းကိုယ္ပိုင္အသံုးျပဳေနတဲ့ဖုန္းထဲမွာပါ ဘယ္ Partitions ေတြပါ၀င္လဲ ဆိုတာကို ေလ့လာၾကည့္ ၾကမယ္၊

Partition Layout မ်ားအားဆံုးျဖတ္ျခင္း

အခုဖုန္းကိုယ္ပိုင္အသံုးျပဳေနတဲ့ဖုန္းထဲမွာပါ ဘယ္ Partitions ေတြပါ၀င္လဲ ဆိုတာကို ေလ့လာၾကည့္ ၾကမယ္၊ ဖုန္းတစ္လံုးရဲ့ Partition Layout ဘယ္လိုခြဲထားလည္းကို ဖတ္ဖို႔အတြက္ အဲ့ဒီ့ဖုန္းက MTD base (Memory Technology Device) လား၊ EMMC base (Embedded MultiMedia Card) လား MMC base (MultiMedia Card) အမ်ိဳးအစားလား Nand Flash base ဆိုတာကို သိရပါမယ္၊ (MTD,EMMC,MMC,NAND flash တို႔အေၾကာင္းကို ပိုစ့္တစ္ခုအေနနဲ႔ အေသးစိတ္ ေရးေပးမယ္)၊
MTD နဲ႔ EMMC သံုးတဲ့ဖုန္းေတြအတြက္ေတာ့ paratition Layout နာမည္ေတြကို /proc/mtd နဲ႔ /proc/emmc ဖိုင္ေတြကို ဖတ္ျခင္းျဖင့္ သိႏိုင္ပါတယ္၊ ေအာက္မွာ EMMC device ျဖစ္တဲ့ HTC Desire S ရဲ့ Partition ေတြ ကို ဖတ္ျပထားတာပါ၊ Partition တစ္ခုစီရဲ့နာမည္ေတြက အဲ့ဒီ့ partition ကိုဘာအတြက္ အသံုးထားလဲဆိုတာကိုညြန္ျပေနပါတယ္၊
Adb shell
cat /proc/emmc
mccblk-0p117: 00040000 00000200 “misc”
mmcblk0p21: 0087f400 00000200 “recovery”
mmcblk0p22: 00400000 00000200 “boot”
mmcblk0p25: 22dffe00 00000200 “system”
mmcblk0p29: 002ffc00 00000200 “local”
mmcblk0p27: 090ffe00 00000200 “cache”
mmcblk0p26: 496ffe00 00000200 “userdata”
mmcblk0p30: 014bfe00 00000200 “devlog”
mmcblk0p31: 00040000 00000200 “pdata”
mmcblk0p28: 09800000 00000200 “lib”

အကယ္၍ Device က MMC base ျဖစ္ေနမယ္ဆိုရင္ေတာ့ partition layout ကို /proc/partitions ဖုိင္ကေန လွမ္းယူႀကည့္ရႈ႕ႏိုင္ပါတယ္၊ ဒါေပမယ့္ ေအာက္ကပံုစံအတိုင္း output ထြက္လာရင္ေတာ့ partition တစ္ခုစီရဲ့နာမည္ကို mapping လုပ္လို႔ရမွာမဟုတ္ေသးပါဘူး၊

cat /proc/partitions
major minor #blocks name
7 0 958 loop0
253 0 524288 zram0
179 0 3830784 mmcblk0
179 1 1 mmcblk0p1
179 2 10240 mmcblk0p2
179 3 10240 mmcblk0p3
179 4 6144 mmcblk0p4
179 5 1048576 mmcblk0p5
179 6 196608 mmcblk0p6
179 7 129024 mmcblk0p7
179 8 2375168 mmcblk0p8
179 64 2048 mmcblk0boo
179 32 2048 mmcblk0boo
179 96 7761920 mmcblk1
179 97 7757824 mmcblk1p1

အထက္ကလို partition layout ေတြကို သက္ဆိုင္ရာနာမည္နဲ႔ ေဖာ္မျပထားတဲ့ MMC base device ေတြအတြက္ေတာ့ dev ဖိုဒါထဲမွာ ထဲမွာ နာလည္ကို by-name နဲ႔သြားၾကည့္ႏိုင္ပါတယ္၊
Adb shell
su
Ls –l /dev/block/platfrom/msm_sdcc.1/by-name/
အထက္ကလိုေရးၿပီး Enter ေခါက္လိုက္တာနဲ႔ သက္ဆိုင္ရာ partitions ေတြကို သူတို႔ကိုဘာအတြက္သံုးထားလဲ ဆိုတဲ့ နာမည္ေတြနဲ႔ တြဲၿပီးေဖာ္ျပေပးသြားမွာျဖစ္ပါတယ္၊

အကယ္၍ ဖုန္းကို Root ေဖာက္ထားတယ္ ROM မွာ Parted Utility လဲပါရွိတယ္ဆိုရင္ ေတာ့ Super User နဲ႔ ROM ကိုသံုးၿပီးလည္း Partition Layout ကိုေအာင္က အတိုင္းရယူႏိုင္ပါေသးတယ္၊

Partition ေတြနဲ႔ ပတ္သတ္ၿပီးအေသးစိတ္ထက္ေလ့လာတဲ့အခါမွာ အမွားေတြလုပ္တာ ျဖတ္မိတာတို႔ျဖစ္တဲ့ပါတယ္၊ အဲ့ဒီ့လို ေမွ်ာ္လင့္မထားတဲ့ အေျခအေနေတြကို ေျဖရွင္းဖို႔ အတြက္ အေသးစိ္တ္မေလ့လာခင္ partitions ေတြအားလံုးကို SD card ထဲကို backup လုပ္ထားသင့္ပါတယ္၊ ဒီလိုလုပ္ၿပီးရင္ေတာ့ စိတ္ႀကိဳက္ dump လုပ္ၿပီး အေသးစိတ္ခြဲျခမ္းစိတ္ျဖာေလ့လာႏိုင္ပါၿပီ၊ ေနာက္ပိုစ့္မွာ Android partitions ေတြကေန Dump ဖိုင္ဖန္တီးနည္းကိုရွင္းျပသြားပါမယ္၊
အခု partition entry ျဖစ္တဲ့ /proc file system ကိုၾကည့္ရေအာင္ ေအာက္က ဖိုင္ေတြကေတာ့ Samsung Galaxy Nexus မွာ Run ေနတဲ့ Partition ျဖစ္ပါတယ္၊

cat /proc/partitions
major minor #blocks name
31 0 1024 mtdblock0
179 0 15388672 mccblk0
179 1 128 mccblk0p1
179 2 3584 mccblk0p2
179 3 20480 mccblk0p3
179 4 8192 mccblk0p4
179 5 4096 mccblk0p5
179 6 4096 mccblk0p6
179 7 8192 mccblk0p7
259 0 12224 mccblk0p8
259 1 16384 mccblk0p9
259 2 669696 mccblk0p10
259 3 442368 mccblk0p11
259 4 14198767 mccblk0p12
259 5 64 mccblk0p13
179 16 512 mccblk0boot1
179 8 512 mccblk0boot0

Proc entry ႏွင့္အတူ Device ထဲမွာ သံုးေနတဲ့ ေတြနဲ႔ သူတို႔ရဲ့ logical functions ေတြကိုလဲ ရယူဖို႔လိုအပ္ပါတယ္၊ ဒီလိုျပဳလုပ္ဖုိ႔အတြက္ေတာ့ System-On-Chip(Soc) ရဲ့ dirctory ျဖစ္တဲ့ /dev/block/platform ထဲက ဖိုင္ေတြကိုစစ္ေဆး ၾကည့္ရူ႕ႏိုင္ပါတယ္၊ အဲ့ဒီ့ထဲမွာ by-name ဆိုတဲ့ directory ကိုေတြ႔လိမ့္မယ္၊ partition တစ္ခုစီက သက္ဆိုင္ရာ block device ကိုခ်ိတ္ဆက္ႀကတယ္၊ ေအာက္က excerpt ကေတာ့ Samsung Galaxy Nexus ထဲက ရလာတဲ့ Directory ထဲက Contents ေတြျဖစ္ပါတယ္၊

Partition Layout ထဲက အခ်က္အလက္ေတြကိုရယူႏိုင္တဲ့အျခား အစိတ္အပိုင္းေတြလဲရွိေနပါေသးတယ္၊ /etc/vold.fstab file ထဲကိုယူႏိုင္သလို recover log ထဲက (/cache/recovery/last_log) ထဲကေနလဲ ယူႏို္ငပါတယ္၊ ဒီလိုပဲ kernel logs ရဲ့ dmesg ကေန ျဖစ္ေစ /proc/kmsg တို႔မွာလဲ partition layout အခ်က္အလက္ ေတြပါ၀င္ပါတယ္၊ အျခားအခ်က္ေတြ အားလံုး fails ျဖစ္ေနရင္ေတာ့ partitions ေတြအေၾကာင္း ကို mount command သံုးပီးျဖစ္ေစ /proc/mounts မွာျဖစ္ေစရွာေဖြႏိုင္ပါတယ္၊

/dev/block/platform/omap/omap_hsmmc.0/by-name $ ls – l
1rwxrwxrwx root root 2013-01-30 20:43 boot -> /dev/block/mccblk0p7
1rwxrwxrwx root root 2013-01-30 20:43 cache -> /dev/block/mccblk0p11
1rwxrwxrwx root root 2013-01-30 20:43 dgs -> /dev/block/mccblk0p6
1rwxrwxrwx root root 2013-01-30 20:43 efs -> /dev/block/mccblk0p3
1rwxrwxrwx root root 2013-01-30 20:43 metadata -> /dev/block/mccblk0p13
1rwxrwxrwx root root 2013-01-30 20:43 misc -> /dev/block/mccblk0p5
1rwxrwxrwx root root 2013-01-30 20:43 param -> /dev/block/mccblk0p4
1rwxrwxrwx root root 2013-01-30 20:43 radio -> /dev/block/mccblk0p9
1rwxrwxrwx root root 2013-01-30 20:43 recovery -> /dev/block/mccblk0p8
1rwxrwxrwx root root 2013-01-30 20:43 sbl -> /dev/block/mccblk0p2
1rwxrwxrwx root root 2013-01-30 20:43 system -> /dev/block/mccblk0p10
1rwxrwxrwx root root 2013-01-30 20:43 userdata -> /dev/block/mccblk0p12
1rwxrwxrwx root root 2013-01-30 20:43 xloader -> /dev/block/mccblk0p1

boot loader:
splash:
boot:
system:
userdata:
cache
recovery
misc

■ boot loader: ဖုန္းရဲ့ bootl loader program ကို သိုေလွာင္တယ္၊ bottloader က Phone Boots တက္တာနဲ႔ hardware စတင္အလုပ္လုပ္ေဆာင္ စတင္ေပးပါတယ္၊ Android Kernal ကို စတင္ boot တင္ျခင္း download mode ကဲ့သို႔ေသာ boot တက္တဲ့ အျခား စနစ္ကိုေျပာင္း လဲျခင္းတို႔ပါ၀င္ပါတယ္၊
■ splash: Stores ကိုေတာ့ power စဖြင့္လွ်င္ဖြင့္ျခင္း ျမင္ရတဲ့ screen image အတြက္သံုးပါတယ္၊ ပံုမွန္ေတာ့ ထုတ္လုပ္တဲ့ ကုမၼဏီရဲ့ logo ပါ၀င္တယ္၊ အခ်ိဳ႕ device မ်ားမွာေတာ့ splash screen bitmap ကို အျခား partition မွာခြဲပီး မသိမ္းေတာ့ပဲ bootloader ထဲမွာ embedded လုပ္ထားတယ္၊
■ boot: Stores Android boot image ကို သိမ္းထားတယ္၊ ဒီထဲမွာ Linux kernel (zImage) နဲ႔ root file system ram disk (initrd) တို႔ပါ၀င္ပါတယ္၊
■ recovery: functions ေတြနဲ႔ failsafe ကဲ့သို႔ေသာ ျပဳျပင္မူမ်ိဳးကို ေထာက္ပံ့ေပးတဲ့ Android boot image ကိုသိမ္းထားတယ္၊
■ system: Stores မွာေတာ့ Android System image ကို သိုေလွာင္ထားပီး Device /system on က Mount တက္တတ္တဲ့ အခ်ိန္မွာအလုပ္လုပ္တယ္၊ ဒီ image ဖိုင္ထဲမွာ Android Framework, Libraries, System Binaries နဲ႔ preinstalled application ေတြပါ၀င္ပါတယ္၊
■ userdata: Also data partition လို႔လဲ ေခၚတယ္၊ application ေတြက သတ္မွတ္တဲ့ ပံုေတြ သီခ်င္းေတြ ဗြီဒီယို ေဒါင္းလုပ္ တို႔လို data ေတြကို data ေတြကို သိမ္းစည္းတဲ့ ေနရာပါ၊ သူကေတာ့ boot system မွာ /data အျဖစ္ Mount လုပ္ပါတယ္၊
■ cache: Used ကေတာ့ recovery logs တို႔လို Update packages downloaded over-the-air တို႔လို utility file ေတြ ကိုသိုေလွာင္တဲ့ အစိတ္အပိုင္းပါ၊ Device ေပၚမွာ application ကို installed လုပ္တာနဲ႔ dalvik-cache ပါ၀င္တဲ့ Davlik Virtual Machine (VM) cache ေတြ SD card ထဲမွာ သိမ္းပါတယ္၊
■ radio: baseband image ေတြကို သိုေလွာင္တဲ့ partition ျဖစ္ပါတယ္၊ ဒီ partition ကေတာ့ telephony capabilities ေတြအတြက္သာ အသံုး၀င္တဲ့ ေဖာ္ျပတဲ့ partition ျဖစ္ပါတယ္၊

မနက္ျဖန္ partitions layout ေတြနဲ႔ ပက္သက္ၿပီး လက္ေတြ႔တစ္ခုလုပ္ၾကည့္မယ္၊ အခုေရးတဲ့ ပိုစ့္က ဖုန္းတစ္လံုးကို Root ေဖာက္တဲ့ အေၾကာင္းကို အစအဆံုးေရးေပးဖို႔ ျဖစ္ပါတယ္၊ အစအဆံုးကို ဒီစာမ်က္ႏွာမွာ တင္ခ်င္မွတင္ျဖစ္မယ္၊ ၂၅ ရက္ေန႔ၾကရင္ Android Hack စာအုပ္ကို စျဖန္႔ခ်ီမယ္၊ အဲ့ဒီ့ထဲမွာ ဖုန္း Root ေဖာက္ျခင္းအေၾကာင္း အေသးစိတ္ေရးေပးထားတယ္၊ မည္သူအတြက္မဆို Tool မသံုးပဲ Root ေဖာက္တတ္ေအာင္ အဆင့္ဆင့္ လိုအပ္ခ်က္ေတြ ဖုန္းအလိုက္ ျဖတ္ေက်ာ္ ရမယ့္ လံုျခံဳေရး အတားအဆီးေတြအေၾကာင္းကိုရွင္းျပထားတယ္၊

Photo: Android ဖုန္းအား Root ေဖာက္ျခင္း
Android Device ေပၚမွာ လိုသလို ျပဳျပင္ေျပာင္းလဲႏိုင္ လုိအပ္သမွ် အစိတ္အပိုင္းေတြကို ၀င္ႏိုင္တဲ့ အခြင့္ အေရးကို ရေအာင္ လို႔ ႀကိဳးပန္းႀကပါတယ္၊ ဒီႀကိဳးပန္းမႈေအာင္ျမင္သြားရင္ေတာ့ super user ျဖစ္သြားၿပီေပါ့၊ ဒီလို ဖန္တိးျခင္းကိုပဲ rooting လုပ္တယ္ root ေဖာက္တယ္ လို႔ေခၚတယ္၊ System super user အေကာင့္ကိုလဲ root လို႔ေခၚပါတယ္၊ ဒီ Super User အေကာင့္က UNIX-Base system ရွိ Files ေတြအားလံုး programs ေတြအားလံုးကို လိုသလို ျပဳျပင္ေျပာင္းလဲႏိုင္တဲ့ အခြင့္ အေရးရွိပါတယ္၊ Operating System ေပၚမွာလဲ အျပည့္အ၀ ထိန္းခ်ဳပ္ႏိုင္တဲ့ အခြင့္အေရးရွိပါတယ္၊ Android Device ေပၚမွာ Administartive privileges ေခၚတဲ့ Admin အခြင့္အေရးရေအာင္ ႀကိဳးစားရတဲ့ အေၾကာင္း အရင္း အခ်ိဳ႕ရွိပါတယ္၊ တစ္ခ်ိဳ႕ကေတာ့ System files ေတြကို အသံုးျပဳခ်င္တယ္ လိုအပ္တဲ့ ေျပာင္းလဲမူေတြ လုပ္ခ်င္တယ္ ဒီလိုေျပာင္းလဲလိုက္ျခင္းအားျဖင့္ အဓီက ဗဟိုလုပ္ေဆာင္ခ်က္စနစ္ နဲ႔ လုပ္ကိုင္တဲ့ နည္း တို႔ကိုေျပာင္းလဲ လိုက္ႏိုင္သလို custom theme တစ္ခုကိုျဖစ္ေစ boot animations ျဖစ္ေစေျပာင္းလဲႏိုင္ပါတယ္၊ Root ေဖာက္ျခင္းအားျဖင့္ ရလာတဲ့အျခား အခြင့္အေရးက ဖုန္း၀ယ္ကတည္းက ႀကိဳတင္ထည့္သြင္းထားလို႔ ပါလာတဲ့ applicatoin ေတြကို ျဖတ္ျပစ္ႏိုင္ပါတယ္၊ Full System backup နဲ႔ Restore လုပ္ႏိုင္တယ္၊ custom kernel images နဲ႔ module ေတြကို ၀န္တင္ႏိုင္တယ္၊ ဒီလိုပဲ Root access လိုအပ္တဲ့ apps ေတြကိုလဲ Install လုပ္ႏိုင္လာပါတယ္၊ apps ေတြထဲမွာ root app လို႔ေခၚတဲ့ apps အမ်ိဳးအစားေတြလဲရွိပါတယ္၊ သူတို႔က iptables-base firmware ေတြလို programs ေတြပါ၀င္ပါတယ္ ad-blockers တို႔ overclocking တို႔လို Application ေတြ၊ TeamViewer လို Application ေတြကေတာ့ Root Access ရရွိဖို႔လိုအပ္တဲ့ Applications ေတြျဖစ္ပါတယ္၊ ဒီသင္ခန္းစာရဲ့ ရည္ရြယ္ခ်က္က လံုျခံဳေရး ထိုးေဖာက္ဖို႔ အတြက္ျဖစ္သည့္ အတြက္ UNIX System က ကန္႔သတ္မထားတဲ့ Android Device တစ္ခုရဲ့ လံုျခံဳေရးအားလံုးကို တည္းျဖတ္သြားမွာျဖစ္ပါတယ္၊ (သင္ခန္းစာကို သက္ဆိုက္ရာ က႑ အလိုက္ အပိုင္းေတြခြဲၿပီး သင္ေပးသြားမွာျဖစ္ပါတယ္)၊
သတိျပဳရန္
ဘာေၾကာင့္ပဲ root လုပ္လိုလုပ္လို Root ေဖာက္လိုက္ျခင္းက ဖုန္းရဲ့ လံုျခံဳေရးကို ထိခိုက္ေစတယ္ဆိုတာကိုေတာ့ သေဘာေပါက္ပါ၊ Root ေဖာက္လိုက္ရင္ root permission ရထားတဲ့ applications ေတြအားလံုးက user data အစိတ္အပိုင္းက အခ်က္အလက္ေတြအားလံုးကို ရယူအသံုးျပဳႏိုင္သြားပါတယ္၊ ဒီေတာ့ တစ္ခ်ိဳ႕ အခြင့္ အေရးေစာင့္ေနတဲ့ applicatoins ေတြက user data ေတြအားလံုးကို device ကေန ထုတ္ယူ (ခုိးယူ) သြားႏိုင္ပါတယ္၊ ဒီလို ျဖစ္ေစတဲ့ အဓီက အေၾကာင္းအရင္းက လံုျခံဳ ေရးအရ ခ်မွတ္ထားတဲ့ boot loader locks လို signed recovery update တို႔လို အခ်က္ေတြကို Root ေဖာက္လိုက္တဲ့ အခါ ဖယ္ရွားျပစ္လိုက္ လို႔ပါ၊ (Android api level 12 အထက္ ပံုမွန္ Root မေဖာက္ထားတဲ့ ဖုန္းေတြမွာလွမ္းယူလို႔မရတဲ့ Data ေတြကို  Android Root ေဖာက္ထားတဲ့ဖုန္းမွာ ကိုယ့္ application က မဟုတ္တဲ့ Logcat Feeds ေတြလွမ္းယူ အသံုးျပဳကို လက္ေတြ႔ application ေနာက္ရက္ေရးျပသြားပါမယ္၊ သိေစခ်င္တဲ့ အခ်က္က ဒီလို logcat feeds ကိုယူႏိုင္ၿပီဆိုရင္ေတာ့ Facebook တို႔ ျမန္မာ ဘဏ္ application တို႔ကိုသံုးေနတဲ့ ပရိတ္သတ္ရဲ့ ဖုန္းထဲက Logcat ဖတ္ၿပီးသူတို႔ရဲ့ password ေတြကိုလွမ္းယူႏိုင္ပါၿပီ)၊
ဒီသင္ခန္းစာမွာေတာ့ root လုပ္ရတဲ့ ဆင့္ကဲ လုပ္ကိုင္ပံုေတြကို Tool မသံုးဘဲ အေသးစိတ္ လုပ္ျပ ရွင္းျပသြားမွာပါ၊ Android version အလိုက္ Device အလုိက္ ကြဲျပားတဲ့ အေသးစိတ္ အခ်က္ေတြကိုေတာ့ရွင္းျပသြားမွာမဟုတ္ပါဘူး၊ Root access ကိုရယူဖို႔  အဆင့္ဆင့္ လုပ္ေဆာင္ရာမွာ လံုျခံဳေရး ခ်ိဳးျဖတ္သြားတဲ့ အစိတ္အပိုင္းေတြ ပါလာတဲ့ အတြက္ ထုိအပိုင္းမ်ားကို အေသးစိတ္ရွင္းျပထားပါတယ္၊ ဒီအခန္းရဲ့ ေနာက္ဆံုး အပိုင္းမွာေတာ့ ယခင္ Android Rooting လုပ္ရာမွာ ေတြ႔ႀကံဳခဲ့ရတဲ့ အားနည္းခ်က္ေတြအေၾကာင္းကို ရွင္းျပထားပါတယ္၊ ထိုအားနည္းခ်က္ေတြကို ယေန႔ Android versions ေတြမွာေတာ့ ျပဳျပင္ၿပီးသြားပါၿပီ၊ 

အခ်ိဳ႕အေျခအေနေတြမွာ ဖုန္းကို Root ေဖာက္ျခင္းက phone ရဲ့ အလုပ္လုပ္ပံုေတြကို ပံုမွန္အေျခအေနကေန ေသြဖယ္သြားေစႏိုင္ပါတယ္၊ ဒီလိုျဖစ္ေပၚေစျခင္းရဲ့ အဓီက အခ်က္ကေတာ့ System Files ေတြကို Modify လုပ္ျခင္းေၾကာင့္ပါ၊ ဒီလိုျဖစ္လာရင္ေတာ့ Android ဖုန္းတိုင္းမွာပါတဲ့ factory state ကို Restore လုပ္ဖို႔လိုပါတယ္၊ 

အဆင့္ဆင့္နားလည္ျခင္း
လက္တစ္ေလာ ကာလမွာေတာ့ Root ေဖာက္တယ္ဆိုတာ ျပႆနာတစ္ခု လို႔သတ္မွတ္လို႔မရေအာင္ လြယ္ေကာင္းလြယ္ေနပါမယ္၊ Google ဆိုတာ သာမာန္ အေပ်ာ္တမ္း အဖြဲ႔အစည္းေလးမဟုတ္ပါဘူး၊ Android အတြက္ အဓီက ထားၿပီး ဖြဲ႔စည္းထားတဲ့ Security Team ကလည္း ကမၻာ့ အေတာ္ဆံုး ဆိုတဲ့ Linux Hackers ေတြ Security Researcher ေတြနဲ႔ဖြဲ႔စည္းထားတာပါ၊ ကေန႔အထိ ကံေကာင္းေထာင္းမ ၿပီး Android ဖုန္းေတြကို လြယ္လြယ္ကူကူ Root ေဖာက္ႏိုင္ေနတာက Google Security Team က ျပင္ဆင္ထားတဲ့ လံုျခံဳေရး အခ်က္ ၁၀၀ ေက်ာ္ကို Android မွာလက္ေတြ႔ မထည့္သြင္းေသးလို႔ပါ၊ ဒီလို မထည့္သြင္းရေသး ျခင္:နဲ႔ အားနည္းခ်က္ဆက္လက္ျဖစ္ေပၚေနျခင္း ရဲ့ ျခြင္းခ်က္ကေတြထဲမွာ Linux Kernel က အခရာ က်တဲ့ အစိတ္အပိုင္း အျဖစ္ပါတယ္၊ Open Source ျဖစ္တဲ့ Linux Kernal ရွိ leaking Holes ေတြထဲက အခ်က္တစ္ခ်ိဳ႕ကို ပိတ္ထားလိုက္ႏိုင္ရင္ root တစ္ခါေဖာက္ ၃၀၀၀ ေထာင္ ကေန ၁၀၀၀၀၀ တစ္သိန္းေလာက္ေတာ့ ေအးေဆးခုန္တက္သြားႏိုင္ပါတယ္၊ အကယ္၍ Google Security Team က ခ်မွတ္ထားတဲ့ အခ်က္ေတြအားလံုးကို လက္ေတြ႔ အသံုးခ်လိုက္မယ္ဆိုရင္ေတာ့ Android ရဲ့ လံုျခံဳေရး က iphone ရဲ့ လံုျခံဳေရး အဆင့္ နဲ႔ တန္းတူ (သို႔) ပို သာဖို႔ပဲ ရွိပါတယ္၊ ဒါေပမယ့္ Open Source တို႔ရဲ့ သေဘာအရ ဒီအဆင့္မ်ိဳးကို တက္လွမ္းႏိုင္ဖို႔ေတာ့ အရမ္းကိုခက္ခဲလွပါတယ္၊ Linux Kernal နဲ႔ Webkit library Open Source ႏွစ္ခုနဲ႔တင္ကို လံုျခံဳေရးက ခ်ာခ်ာလည္ေနပါၿပီး (အခုေျပာေနတာက အခ်က္က်က် မဟုတ္ဘဲ ေယဘယ် သေဘာပါ၊ ဘယ္ အခ်က္ေတြကို Google က လံုျခံဳေရးျမင့္ေနလဲ၊ Linux Keranl နဲ႔ ပက္သက္ၿပီး ဘယ္အခ်က္ေတြကို ပိတ္ခြင့္ေပးဖို႔ Linux ကို ထိန္းခ်ဳပ္ထားတဲ့ အဖြဲ႔အစည္းနည္း ညွိႏိုင္းေနလဲ စသျဖင့္ အေသးစိတ္အခ်က္ကေတာ့ 25 ရက္ေန႔ထုတ္ေ၀မယ့္ Android Hack စာအုပ္ထဲမွာဖတ္ပါ၊) ေသခ်ာ တဲ႔ အခ်က္တစ္ခုကေတာ့ မေ၀းေတာ့တဲ့ အနာဂတ္မွာ Android လံုျခံဳေရး System အရမ္းကို အားေကာင္းလာပါမယ္၊ အဲ့ဒီ့အခါ မ်ိဳးမွာ Root ေဖာက္မယ္ဆိုရင္ေတာ့ Tools ေလးတစ္ခု ျပစ္ထည့္ၿပီး ခလစ္တစ္ခ်က္ႏွိပ္ရံုနဲ႔မရေတာ့ပါဘူး၊ Android System တစ္ခုလံုးကို ေကာင္းေကာင္းနားလည္ထားဖို႔ လိုအပ္ပါတယ္၊ လံုျခံဳေရးအရအဆင့္ျမင့္လာမယ့္ အခ်က္ေတြကို ႀကိဳတင္မေလ့လာႏိုင္ရင္ေတာင္ အနည္းဆံုးေတာ့ တတ္ႏိုင္တဲ့ဘက္ကေန ေလ့လာထားသင့္တာကို ႀကိဳတင္ေလ့လာထားရပါမယ္၊ အခု ေအာက္က အခ်က္တစ္ခ်ိဳ႕ကိုေလ့လာၾကည့္ၾကမယ္၊
၁. Android partitions layout ေတြကိုနားလည္ထားဖို႔ လိုအပ္တယ္၊ ဘယ္ patition မွာ ဘယ္ data ကိုသိမ္းထားတယ္ ဆိုတာသိဖို႔လိုတယ္၊ mounting point ရွာဖို႔ အတြက္ partiton layout ေတြကို သက္ဆိုင္ရာ နားမည္အလိုက္သိဖို႔လိုအပ္သလိုေပါ့၊
၂. Android Booting Process ကိုနားလည္ရမယ္၊ boot process ကိုနားလည္ထားျခင္းက ဘယ္ Services က boot စတက္တာနဲ႔ Super user Privileges နဲ႔ အလုပ္လုပ္လဲ ဆိုတာနားလည္လာမယ္၊ Boot process ရဲ့ ဆင့္ကဲ ျဖစ္စဥ္အတြင္းမွာ ပါ၀င္တဲ့ လံုျခံဳေရး နဲ႔ အားနည္းခ်က္ေတြကို သေဘာေပါက္လာမယ္၊ 
၃. Lock ခ်ထးတဲ့ Bootloader နဲ႔ Lock မခ်ထားတဲ့ bootloader တို႔အေၾကာင္း နားလည္ထားျခင္း
၄. Booted System ေပၚမွာ Root access ရယူျခင္း အေၾကာင္းနားလည္ထားျခင္း၊
၅. NAND Locks, Temporary Root နဲ႔ Parmanent root တို႔ အေၾကာင္းႏွင့္ လုပ္ကိုင္ပံု အဆင့္ဆင့္ကိုနားလည္ထားျခင္း၊
၆. Softroot ရယူျခင္း အေၾကာင္းနားလည္ထားျခင္း၊
၇. Hacker မ်ားထိုးေဖာက္ခဲ့သည့္ သမိုင္း၀င္တိုက္ခိုက္မႈမ်ားအား ေလ့လာထားျခင္း၊
 Kernel: Wunderbar/asroot 
 Recovery: Volez 
 Udev: Exploid 
 Adbd: RageAgainstTheCage 
 Zygote: Zimperlich and Zysploit 
 Ashmem: KillingInTheNameOf and psneuter 
 Vold: GingerBreak 
 PowerVR: levitator 
 Libsysutils: zergRush 
 Kernel: mempodroid 
 File Permission and Symbolic Link–Related Attacks 
 Adb Restore Race Condition 
 Exynos4: exynos-abuse 
 Diag: lit / diaggetroot 

Partition Layout အားနားလည္ျခင္း 
    Android ဖုန္းကို Root ေဖာက္ဖို႔ျဖစ္ေစ၊ root ေဖာက္ထားတဲ့ဖုန္းမွာ ျမန္မာစာထည့္သြင္းလိုရင္ျဖစ္ရင္ျဖစ္ေစ၊ font-changer တည္ေဆာက္လိုရင္ျဖစ္ေစ၊ Adb ကို super user အခြင့္အေရးရယူၿပီးေတာ့ ဖုန္းရဲ့ system ပိုင္းမွာ လိုအပ္သမွ်ကို ျပဳျပင္ေျပာင္းလဲ ရာမွာျဖစ္ေစ၊ Network Lock ေျဖရာမွာျဖစ္ေစ၊ Bootloader Unlock လုပ္ရာမွာျဖစ္ေစ File System partition ေတြဘယ္လိုအစိတ္အပိုင္းခြဲထားတယ္၊ ဘယ္ partition ေတြ ဖုန္းမွာပါ၀င္တယ္ဆိုတာကို အတိအက်သိထားဖို႔လိုအပ္ပါတယ္၊
Partitions ေတြကေတာ့ logical Stroage units ေတြျဖစ္ပါတယ္၊ သူတို႔ကို ဖုန္းရဲ့ အျမဲ တည္ရွိေနမယ့္ memory storage (persistent storage memory) ထဲမွာ သိုေလွာင္ထားပါတယ္၊ သက္ဆိုင္ရာ အစိအစဥ္အလိုက္၊ offsets နဲ႔ အရြယ္အစားအလိုက္ Layout ေတြမတူညီႀကပါဘူး၊ ဖုန္းအမ်ားစုမွာေတာ့ partition layout ေတြကို bootloader ေတြက သတ္မွတ္ႀကပါတယ္၊ အခ်ိဳ႕ဖုန္းေတြမွာေတာ့ Partitions ေတြကို Kernel က ကိုင္တြယ္တြယ္သတ္မွတ္ပါတယ္၊ low-level storage partitioning ခြဲျခင္းက device အလုပ္လုပ္ေဆာင္မႈ အတြက္ အထူး အေရးႀကီးလွပါတယ္၊ partition layout ခြဲပံုက ဖုန္းကုမၼဏီ နဲ႔ platform အလုိက္ ကြာျခားပါတယ္၊ ဒါေပမယ့္ အခ်ိဳ႕ေသာ partitions ေတြကေတာ့ ဖုန္းတိုင္မွာ ပါ၀င္မူ အတူတူပါပဲ၊ အျမင္ရအမ်ားဆံုး partitions ေတြကေတာ့ boot,system,data,recovery,chche partitions ေတြျဖစ္ပါတယ္၊ အခုဖုန္းကိုယ္ပိုင္အသံုးျပဳေနတဲ့ဖုန္းထဲမွာပါ ဘယ္ Partitions ေတြပါ၀င္လဲ ဆိုတာကို ေလ့လာၾကည့္ ၾကမယ္၊ 

Partition Layout မ်ားအားဆံုးျဖတ္ျခင္း

အခုဖုန္းကိုယ္ပိုင္အသံုးျပဳေနတဲ့ဖုန္းထဲမွာပါ ဘယ္ Partitions ေတြပါ၀င္လဲ ဆိုတာကို ေလ့လာၾကည့္ ၾကမယ္၊ ဖုန္းတစ္လံုးရဲ့ Partition Layout ဘယ္လိုခြဲထားလည္းကို ဖတ္ဖို႔အတြက္ အဲ့ဒီ့ဖုန္းက MTD base (Memory Technology Device) လား၊ EMMC base (Embedded MultiMedia Card) လား MMC base (MultiMedia Card) အမ်ိဳးအစားလား Nand Flash base ဆိုတာကို သိရပါမယ္၊ (MTD,EMMC,MMC,NAND flash တို႔အေၾကာင္းကို ပိုစ့္တစ္ခုအေနနဲ႔ အေသးစိတ္ ေရးေပးမယ္)၊
MTD နဲ႔ EMMC သံုးတဲ့ဖုန္းေတြအတြက္ေတာ့ paratition Layout နာမည္ေတြကို /proc/mtd နဲ႔ /proc/emmc ဖိုင္ေတြကို ဖတ္ျခင္းျဖင့္ သိႏိုင္ပါတယ္၊ ေအာက္မွာ  EMMC device ျဖစ္တဲ့ HTC Desire S ရဲ့ Partition ေတြ ကို ဖတ္ျပထားတာပါ၊ Partition တစ္ခုစီရဲ့နာမည္ေတြက အဲ့ဒီ့ partition ကိုဘာအတြက္ အသံုးထားလဲဆိုတာကိုညြန္ျပေနပါတယ္၊ 
Adb shell 
cat /proc/emmc
mccblk-0p117: 00040000 00000200 “misc”
mmcblk0p21: 0087f400 00000200 “recovery”
mmcblk0p22: 00400000 00000200 “boot”
mmcblk0p25: 22dffe00 00000200 “system”
mmcblk0p29: 002ffc00 00000200 “local”
mmcblk0p27: 090ffe00 00000200 “cache”
mmcblk0p26: 496ffe00 00000200 “userdata”
mmcblk0p30: 014bfe00 00000200 “devlog”
mmcblk0p31: 00040000 00000200 “pdata”
mmcblk0p28: 09800000 00000200 “lib”

အကယ္၍ Device က MMC base ျဖစ္ေနမယ္ဆိုရင္ေတာ့ partition layout ကို /proc/partitions ဖုိင္ကေန လွမ္းယူႀကည့္ရႈ႕ႏိုင္ပါတယ္၊ ဒါေပမယ့္ ေအာက္ကပံုစံအတိုင္း output ထြက္လာရင္ေတာ့ partition တစ္ခုစီရဲ့နာမည္ကို mapping လုပ္လို႔ရမွာမဟုတ္ေသးပါဘူး၊ 

cat /proc/partitions
major minor  #blocks  name
   7        0        958 loop0
 253        0     524288 zram0
 179        0    3830784 mmcblk0
 179        1          1 mmcblk0p1
 179        2      10240 mmcblk0p2
 179        3      10240 mmcblk0p3
 179        4       6144 mmcblk0p4
 179        5    1048576 mmcblk0p5
 179        6     196608 mmcblk0p6
 179        7     129024 mmcblk0p7
 179        8    2375168 mmcblk0p8
 179       64       2048 mmcblk0boo
 179       32       2048 mmcblk0boo
 179       96    7761920 mmcblk1
 179       97    7757824 mmcblk1p1

အထက္ကလို partition layout  ေတြကို သက္ဆိုင္ရာနာမည္နဲ႔ ေဖာ္မျပထားတဲ့ MMC base device ေတြအတြက္ေတာ့ dev ဖိုဒါထဲမွာ ထဲမွာ နာလည္ကို by-name နဲ႔သြားၾကည့္ႏိုင္ပါတယ္၊ 
Adb shell 
su
Ls –l /dev/block/platfrom/msm_sdcc.1/by-name/
အထက္ကလိုေရးၿပီး Enter ေခါက္လိုက္တာနဲ႔ သက္ဆိုင္ရာ partitions ေတြကို သူတို႔ကိုဘာအတြက္သံုးထားလဲ ဆိုတဲ့ နာမည္ေတြနဲ႔ တြဲၿပီးေဖာ္ျပေပးသြားမွာျဖစ္ပါတယ္၊

အကယ္၍ ဖုန္းကို Root ေဖာက္ထားတယ္ ROM မွာ Parted Utility လဲပါရွိတယ္ဆိုရင္ ေတာ့ Super User နဲ႔ ROM ကိုသံုးၿပီးလည္း Partition Layout ကိုေအာင္က အတိုင္းရယူႏိုင္ပါေသးတယ္၊

Partition ေတြနဲ႔ ပတ္သတ္ၿပီးအေသးစိတ္ထက္ေလ့လာတဲ့အခါမွာ အမွားေတြလုပ္တာ ျဖတ္မိတာတို႔ျဖစ္တဲ့ပါတယ္၊ အဲ့ဒီ့လို ေမွ်ာ္လင့္မထားတဲ့ အေျခအေနေတြကို ေျဖရွင္းဖို႔ အတြက္ အေသးစိ္တ္မေလ့လာခင္ partitions ေတြအားလံုးကို SD card ထဲကို backup လုပ္ထားသင့္ပါတယ္၊ ဒီလိုလုပ္ၿပီးရင္ေတာ့ စိတ္ႀကိဳက္ dump လုပ္ၿပီး အေသးစိတ္ခြဲျခမ္းစိတ္ျဖာေလ့လာႏိုင္ပါၿပီ၊ ေနာက္ပိုစ့္မွာ Android partitions ေတြကေန Dump ဖိုင္ဖန္တီးနည္းကိုရွင္းျပသြားပါမယ္၊
အခု partition entry ျဖစ္တဲ့ /proc file system ကိုၾကည့္ရေအာင္ ေအာက္က ဖိုင္ေတြကေတာ့ Samsung Galaxy Nexus မွာ Run ေနတဲ့ Partition ျဖစ္ပါတယ္၊

cat /proc/partitions
major minor #blocks name
31 0 1024 mtdblock0
179 0 15388672 mccblk0
179 1 128 mccblk0p1
179 2 3584 mccblk0p2
179 3 20480 mccblk0p3
179 4 8192 mccblk0p4
179 5 4096 mccblk0p5
179 6 4096 mccblk0p6
179 7  8192 mccblk0p7
259 0 12224 mccblk0p8
259 1 16384 mccblk0p9
259 2 669696 mccblk0p10
259 3 442368 mccblk0p11
259 4 14198767 mccblk0p12
259 5 64 mccblk0p13
179 16 512 mccblk0boot1
179 8 512 mccblk0boot0

Proc entry ႏွင့္အတူ Device ထဲမွာ သံုးေနတဲ့ ေတြနဲ႔ သူတို႔ရဲ့ logical functions ေတြကိုလဲ ရယူဖို႔လိုအပ္ပါတယ္၊ ဒီလိုျပဳလုပ္ဖုိ႔အတြက္ေတာ့ System-On-Chip(Soc) ရဲ့ dirctory ျဖစ္တဲ့ /dev/block/platform ထဲက ဖိုင္ေတြကိုစစ္ေဆး ၾကည့္ရူ႕ႏိုင္ပါတယ္၊ အဲ့ဒီ့ထဲမွာ by-name ဆိုတဲ့ directory ကိုေတြ႔လိမ့္မယ္၊ partition တစ္ခုစီက သက္ဆိုင္ရာ block device ကိုခ်ိတ္ဆက္ႀကတယ္၊ ေအာက္က excerpt ကေတာ့ Samsung Galaxy Nexus ထဲက ရလာတဲ့ Directory ထဲက Contents ေတြျဖစ္ပါတယ္၊

Partition Layout ထဲက အခ်က္အလက္ေတြကိုရယူႏိုင္တဲ့အျခား အစိတ္အပိုင္းေတြလဲရွိေနပါေသးတယ္၊ /etc/vold.fstab file ထဲကိုယူႏိုင္သလို recover log ထဲက (/cache/recovery/last_log) ထဲကေနလဲ ယူႏို္ငပါတယ္၊ ဒီလိုပဲ kernel logs ရဲ့ dmesg ကေန ျဖစ္ေစ /proc/kmsg တို႔မွာလဲ partition layout အခ်က္အလက္ ေတြပါ၀င္ပါတယ္၊ အျခားအခ်က္ေတြ အားလံုး fails ျဖစ္ေနရင္ေတာ့ partitions ေတြအေၾကာင္း ကို mount command သံုးပီးျဖစ္ေစ /proc/mounts မွာျဖစ္ေစရွာေဖြႏိုင္ပါတယ္၊

/dev/block/platform/omap/omap_hsmmc.0/by-name $ ls – l
1rwxrwxrwx root root 2013-01-30 20:43 boot -> /dev/block/mccblk0p7
1rwxrwxrwx root root 2013-01-30 20:43 cache -> /dev/block/mccblk0p11
1rwxrwxrwx root root 2013-01-30 20:43 dgs -> /dev/block/mccblk0p6
1rwxrwxrwx root root 2013-01-30 20:43 efs -> /dev/block/mccblk0p3
1rwxrwxrwx root root 2013-01-30 20:43 metadata -> /dev/block/mccblk0p13
1rwxrwxrwx root root 2013-01-30 20:43 misc -> /dev/block/mccblk0p5
1rwxrwxrwx root root 2013-01-30 20:43 param -> /dev/block/mccblk0p4
1rwxrwxrwx root root 2013-01-30 20:43 radio -> /dev/block/mccblk0p9
1rwxrwxrwx root root 2013-01-30 20:43 recovery -> /dev/block/mccblk0p8
1rwxrwxrwx root root 2013-01-30 20:43 sbl -> /dev/block/mccblk0p2
1rwxrwxrwx root root 2013-01-30 20:43 system -> /dev/block/mccblk0p10
1rwxrwxrwx root root 2013-01-30 20:43 userdata -> /dev/block/mccblk0p12
1rwxrwxrwx root root 2013-01-30 20:43 xloader -> /dev/block/mccblk0p1

 boot loader: 
 splash: 
 boot: 
 system: 
 userdata: 
 cache
 recovery
 misc

■ boot loader: ဖုန္းရဲ့ bootl loader program ကို သိုေလွာင္တယ္၊ bottloader က Phone Boots တက္တာနဲ႔ hardware စတင္အလုပ္လုပ္ေဆာင္ စတင္ေပးပါတယ္၊ Android Kernal ကို စတင္ boot တင္ျခင္း download mode ကဲ့သို႔ေသာ boot တက္တဲ့ အျခား စနစ္ကိုေျပာင္း လဲျခင္းတို႔ပါ၀င္ပါတယ္၊ 
■ splash: Stores ကိုေတာ့ power စဖြင့္လွ်င္ဖြင့္ျခင္း ျမင္ရတဲ့ screen image အတြက္သံုးပါတယ္၊ ပံုမွန္ေတာ့ ထုတ္လုပ္တဲ့ ကုမၼဏီရဲ့ logo ပါ၀င္တယ္၊ အခ်ိဳ႕ device မ်ားမွာေတာ့ splash screen bitmap ကို အျခား  partition မွာခြဲပီး မသိမ္းေတာ့ပဲ bootloader ထဲမွာ embedded လုပ္ထားတယ္၊ 
■ boot: Stores Android boot image ကို သိမ္းထားတယ္၊ ဒီထဲမွာ Linux kernel (zImage) နဲ႔ root file system ram disk (initrd) တို႔ပါ၀င္ပါတယ္၊
■ recovery: functions ေတြနဲ႔ failsafe ကဲ့သို႔ေသာ ျပဳျပင္မူမ်ိဳးကို ေထာက္ပံ့ေပးတဲ့ Android boot image ကိုသိမ္းထားတယ္၊
■ system: Stores မွာေတာ့ Android System image ကို သိုေလွာင္ထားပီး Device /system on က Mount တက္တတ္တဲ့ အခ်ိန္မွာအလုပ္လုပ္တယ္၊ ဒီ image ဖိုင္ထဲမွာ Android Framework, Libraries, System Binaries နဲ႔ preinstalled application ေတြပါ၀င္ပါတယ္၊ 
■ userdata: Also data partition လို႔လဲ ေခၚတယ္၊ application ေတြက သတ္မွတ္တဲ့ ပံုေတြ သီခ်င္းေတြ ဗြီဒီယို ေဒါင္းလုပ္ တို႔လို data ေတြကို data ေတြကို သိမ္းစည္းတဲ့ ေနရာပါ၊ သူကေတာ့ boot system မွာ /data အျဖစ္ Mount လုပ္ပါတယ္၊ 
■ cache: Used ကေတာ့ recovery logs တို႔လို Update packages downloaded over-the-air တို႔လို utility file ေတြ ကိုသိုေလွာင္တဲ့ အစိတ္အပိုင္းပါ၊ Device ေပၚမွာ application ကို installed လုပ္တာနဲ႔ dalvik-cache  ပါ၀င္တဲ့ Davlik Virtual Machine (VM) cache ေတြ SD card ထဲမွာ သိမ္းပါတယ္၊ 
■ radio: baseband image ေတြကို သိုေလွာင္တဲ့ partition ျဖစ္ပါတယ္၊ ဒီ partition ကေတာ့ telephony capabilities ေတြအတြက္သာ အသံုး၀င္တဲ့ ေဖာ္ျပတဲ့ partition ျဖစ္ပါတယ္၊ 

မနက္ျဖန္ partitions layout ေတြနဲ႔ ပက္သက္ၿပီး လက္ေတြ႔တစ္ခုလုပ္ၾကည့္မယ္၊ အခုေရးတဲ့ ပိုစ့္က ဖုန္းတစ္လံုးကို Root ေဖာက္တဲ့ အေၾကာင္းကို အစအဆံုးေရးေပးဖို႔ ျဖစ္ပါတယ္၊ အစအဆံုးကို ဒီစာမ်က္ႏွာမွာ တင္ခ်င္မွတင္ျဖစ္မယ္၊ ၂၅ ရက္ေန႔ၾကရင္ Android Hack စာအုပ္ကို စျဖန္႔ခ်ီမယ္၊ အဲ့ဒီ့ထဲမွာ ဖုန္း Root ေဖာက္ျခင္းအေၾကာင္း အေသးစိတ္ေရးေပးထားတယ္၊ မည္သူအတြက္မဆို Tool မသံုးပဲ Root ေဖာက္တတ္ေအာင္ အဆင့္ဆင့္ လိုအပ္ခ်က္ေတြ ဖုန္းအလိုက္ ျဖတ္ေက်ာ္ ရမယ့္ လံုျခံဳေရး အတားအဆီးေတြအေၾကာင္းကိုရွင္းျပထားတယ္၊

No comments:

Post a Comment