--- title: راهنمای کوچک روت اندروید tags: اندروید روت SafetyNet Magisk adb uuid: 893db180-375a-11ec-a99f-5f8505a0170f toc: true --- من یک گوشی گلکسی ۸ سامسونگ دارم که از ژانویه ۲۰۲۰ آپدیت نشده است و حداقل برای رفع باگ‌های امنیتی که در این فاصله ترمیم شده‌اند وقت خانه‌تکانی‌اش رسیده است. در ادامه آن را بروز و روت می‌کنیم و F-Droid و برنامه‌های بانکی و سایر چیزهای مفید و آزاد را هم روی آن نصب می‌کنیم. علت آپدیت نبودن اینست که گوشی من روت است و بنابراین آپدیت‌های OTA را دریافت نمی‌کند. البته آپدیت خاصی هم دیگر براش وجود ندارد چرا که آخرین آپدیت حاوی پچ امنیتی سامسونگ برایش در آوریل ۲۰۲۱ بوده است که به همان نسخه ارتقا می‌دهیم. در این مقاله گوشی را آپدیت و دوباره روت می‌کنم. بعد هم تنظیمات معمول شامل سینک را هم انجام می‌دهم و اپ‌ها را هم معرفی و شرح می‌دهم. فقط بخاطر داشته باشید که همه‌ی این پیچیدگی‌ها که در ادامه خواهیم دید به خاطر سیستمی است که می‌خواهد به کمک قفل‌های سخت‌افزاری و Secure Boot و غیره دست‌های کاربر را ببندد و قدرت را در دست تولیدکننده‌های غول‌پیکری مثل سامسونگ و گوگل و مانند اینها نگاه دارد. به همین خاطر من از پروژه‌های آزادی مانند [PinePhone] حمایت می‌کنم و در آینده سویچ می‌کنم (امروز هم سالهاست که از دیگر از سرویس‌های سامسونگ و گوگل و مانند آنها استفاده نمی‌کنم و اکثر نیازهام با [F-Droid] و Syncthing و Decsync [برآورده می‌شود]). > هشدار: در ادامه معمولا اطلاعات روی گوشی کامل پاک می‌شود. در طول مقاله از برنامه‌های اوپن سورس و آزاد مختلفی استفاده می‌کنیم که شرح خواهم داد. سیستم عامل هم آرچ‌ لینوکس است و شل هم bash. پیش از هرچیز باید Android Debug Bridge یا همان adb را نصب داشت که من پیشتر نصب کرده‌ام. `adb devices` هم باید گوشی را وقتی با کابل USB به دستگاه وصل است نشان بدهد. برای اینکار باید USB Debugging در تنظیمات برنام‌نویس یا Developer Options گوشی فعال باشد. خود Developer Option هم وقتی ظاهر می‌شود که در تنظیمات اندروید روی Build Number چند بار پشت سر هم کلیک کنید. بعد از اینکار و بعد با اتصال کابل USB و اجرای adb یک پنجره روی گوشی ظاهر می‌شود و می‌پرسد که آیا به این کامپیوتر اعتماد می‌کنیم یا نه. با اعتماد به کامپیوتر می‌توانیم ادامه بدهیم. (در اسکرین‌شات‌ها می‌توانید این مراحل را ببینید، زبان گوشی آلمانی است ولی به نظرم واضح است که منظور چیست.) {: .center .post-image-float} ![](assets/s8/s8debug.jpg) {: .center .post-image-float} ![](assets/s8/s8devopts.jpg) # بک‌آپ! تا حالا کسی را دیده‌اید که افسوس بخورد چرا از عکس‌ها و پیغام‌هایش بک‌آپ گرفته است؟ من که ندیده‌ام. اما برعکسش را زیاد دیده‌ام. پس اول به هر روشی که بلد هستید اطلاعات ارزشمند خود را از گوشی بیرون بکشید. من برنامه‌های مهم را جداگانه و بعد اس‌دی کارت را با adb روی کامپیوترم کپی کردم. ## بک‌آپ با adb به چند روش می‌شود بک‌آپ گرفت، یکی به کمک adb است: $ adb pull sdcard به کمک adb همچنین می‌توان اپ‌ها و داده‌هایشان را کپی کرد البته بجز اپ‌هایی که نمی‌خواهند داده‌هایشان بک‌آپ گرفته شود (مثل سیگنال). برخی اپ‌ها هم حتی اگر با روت از آنها بزور بک‌اپ گرفته شود و روی یک گوشی جدید بازگردانده بشود باز هم کار نخواهند کرد، چرا که کلیدهای سری آنها درون سی‌پی‌یو نگهداری می‌شود و قابل بک‌آپ گرفت نیست (باز هم مثل سیگنال). $ for APP in $(adb shell pm list packages -3 -f); do adb pull $( echo ${APP} | sed "s/^package://" | sed "s/base.apk=/base.apk /").apk; done این دستور اول لیست پکیج‌ها را از گوشی می‌گیرد و بعد یکی یکی آنها را داخل یک حلقه دانلود می‌کند. می‌شود یکجا هم بک‌آپ گرفت و بعد اکسپورت کرد: $ adb backup -f backup.adb -all -apk -nosystem $ dd if=backup.adb bs=24 skip=1 | zlib-flate -uncompress | tar xf - ظاهرا بک‌آپ کلی adb فرمت خاصی دارد که به طریق بالا می‌توان آن را باز کرد. جزئیاتش زیاد مهم نیست. مهم اینست که از این طریق بسیاری برنامه‌ها بک‌آپ گرفته نمی‌شوند و باید برنامه‌های مهم را یا از خود برنامه یا از طریق اپ‌های دیگر بک‌آپ گرفت. شرح بیشتر در [این جیست گیتهاب]. من از [oandbackupx] استفاده کردم و برنامه‌ها را روی کارت‌حافظه بک‌آپ گرفتم. ## بک‌آپ با Smart Switch به کمک اپ Smart Switch سامسونگ هم می‌توان از بسیاری چیزها مخصوصا تنظیمات دسکتاپ و هیستوری تماس‌ها و این قبیل چیزها روی کارت حافظه بک‌آپ گرفت. روی اکانت سامسونگ هم می‌شود که من با این اپ استفاده نکردم. کافیست یک کارت حافظه اضافی یا یک فلش‌دیسک به گوشی وصل بکنید و در صفحه‌ی اصلی برنامه عکس کارت‌حافظه را لمس کنید. ادامه‌ی کار آسان است. برنامه به من خطای نبود حافظه‌ی کافی می‌داد که دسته آخر معلوم شد بخاطر کارت‌حافظه بود که بعد از فرمت کردن آن مشکل رفع شد. ## بک‌آپ با oandbackupx من با برنامه‌ی [oandbackupx] به کمک روت از همه‌ی اپ‌ها و داده‌هایشان بک‌آپ گرفته بودم. متاسفانه نتیجه بدردبخور نبود. از طرفی پسورد بک‌آپ را ظاهرا فراموش کرده بودم (یه اصلا برنامه درست کار نکرد) و از طرف دیگر برنامه با تعداد بالای اپ‌ها مشکل جدی دارد. رابط کاربری هم ضعیف است، مثلا من به اشتباه اپ‌های سیستم را بازگردانی کردم که منجر به خراب شدن تنظیمات و بلوتوث گوشی شد و برنامه هم هیچ هشداری نداد (مجبور شدم پارتیشن سیستم را مجددا فلش بکنم). توصیه می‌کنم به این برنامه تکیه نکنید یا حتما بک‌آپ را تست بکنید. ## بک‌آپ جداگانه اپ به اپ از برخی اپ‌های مهم هم می‌توان جدا جدا نسخه‌ی پشتیبان تهیه کرد. برای مثال: - سینگنال - واتس‌آپ - اپ K9 - والت‌های دیجیتال - و بسیاری دیگر ناگفته پیداست که باید بک‌آپ را از گوشی به یک حافظه‌ی جانبی منتقل کرد (مثلا به کمک Syncthing) و آن را امتحان کرد. > بک‌آپی که تست نشده است همانند بک‌آپی است که اصلا وجود ندارد. با پشت سر گذاشتن مقدمات می‌رویم سروقت آپدیت. # دانلود آپدیت آخرین آپدیت سامسونگ برای گوشی من را می‌توان در اینترنت پیدا کرد ولی از همه بهتر دانلود مستقیم از سرورهای آپدیت خود سامسونگ است. برای اینکار از ابزار خوب [samloader] استفاده می‌کنیم. برای استفاده از samloader باید مدل گوشی و کد CSC منطقه‌ی دلخواهمان را بدانیم. مدل رسمی گوشی من SM-G950F است. سامسونگ این گوشی را با دو چیپ مختلف تولید و عرضه کرده است: Snapdragon و Exynos. گوشی من Exynos است. کد CSC یعنی Country Specific Code. من کد آلمان را پیدا کردم که DBT است. در گوشی بخش تنظیمات نرم‌افزاری هم کد CSC گوشی قابل رؤیت است. بعد از پیدا کردن اینها می‌توانیم چک کنیم چه آپدیتهایی برای این گوشی و این منطقه وجود دارد: $ samloader -m SM-G950F -r DBT checkupdate G950FXXUCDUD1/G950FOXMCDUD1/G950FXXUCDUD1/G950FXXUCDUD1 و حالا دانلود: $ samloader -m SM-G950F -r DBT download -v 'G950FXXUCDUD1/G950FOXMCDUD1/G950FXXUCDUD1/G950FXXUCDUD1' -O . و بعد باز کردن قفل: $ samloader -m SM-G950F -r DBT decrypt -v 'G950FXXUCDUD1/G950FOXMCDUD1/G950FXXUCDUD1/G950FXXUCDUD1' -i SM-G950F_1_20210407122336_qro5zx59p1_fac.zip.enc4 -o SM-G950F_1_20210407122336_qro5zx59p1_fac.zip و در نهایت بازکردن فایل زیپ: $ unzip SM-G950F_1_20210407122336_qro5zx59p1_fac.zip $ ls SM-G950F_1_20210407122336_qro5zx59p1_fac.zip.enc4 AP_G950FXXUCDUD1_CL21427293_QB39365966_REV00_user_low_ship_meta_OS9.tar.md5 BL_G950FXXUCDUD1_CL21427293_QB39365966_REV00_user_low_ship.tar.md5 CP_G950FXXUCDUD1_CP18734711_CL21427293_QB39365966_REV00_user_low_ship.tar.md5 CSC_OXM_G950FOXMCDUD1_CL21427293_QB39365966_REV00_user_low_ship.tar.md5 HOME_CSC_OXM_G950FOXMCDUD1_CL21427293_QB39365966_REV00_user_low_ship.tar.md5 SM-G950F_1_20210407122336_qro5zx59p1_fac.zip این فایل‌هایی پارتیشن‌های مختلفی هستند که ما در ادامه روی گوشی فلش می‌کنیم. البته بد نیست بدانیم که می‌شود این [فایل‌ها را باز کرد] و محتوای آنها را تغییر داد که البته در این مورد امتحان نکرده‌ام (ممکن است بوت نشود). # فلش گوشی را با کابل USB به کامپیوتر متصل می‌کنیم و می‌رویم سروقت فلش. ## مقدمات فلش برای اینکه بتوان یک گوشی اندرویدی را فلش کرد باید قفل bootloader را باز کرد. برای اینکار باید از منوی تنظیمات برنامه‌نویس گزینه OEM Unlocking را فعال کرد. در برخی گوشی‌ها این گزینه وجود ندارد که باید در اینترنت گشت فهمید چرا. {: .center .post-image-float} ![](assets/s8/oemunlocking.jpg) در مورد گوشی گلکسی ۸ برایم جالب بود که این گزینه وقتی گوشی را برای اولین بار روشن می‌کنید غیرفعال است تا زمانی که به وایفای وصل بشویم که بعد از اتصال با سرور سامسونگ و احتمالا بررسی اینکه گوشی به صورت آنلاک فروخته شده است باز می‌شود. این واقعا جای تاسف است که یک گوشی که در زمان خودش گرانقیمت محسوب می‌شد هنوز هم در چنگال تولید‌کننده است و نشان از اهمیت پروژه‌هایی مثل Pinephone دارد که در تلاشند یک گوشی با سخت‌افزار و نرم‌افزار آزاد در اختیار ما بگذارند (دقیقا به همین خاطر و برای پشتیبانی از پروژه‌های Pine64 مدتهاتس که یک گوشی Pinephone سفارش داده‌ام که اگر اجل امانم دهد درباره‌اش می‌نویسم). ## ابزار فلش برای فلش کردن گوشی‌های اندرویدی اغلب از برنامه‌ی Odin استفاده می‌شود. این برنامه آزاد و همگانی نیست بلکه از سامسونگ نشت کرده است. من برای فلش کردن از ابزار آزاد [Heimdall] استفاده می‌کنم که برای گوشی‌های گلکسی نوشته شده است. این برنامه نسخه‌ی گرافیکی هم دارد ولی برای کار ما فقط نسخه‌ی ترمینال کفایت می‌کند. (نسخه‌ی گرافیکی heimdall-frontend نام دارد و به فایل pit که پایین‌تر دانلود خواهیم کرد برای فلش کردن نیاز دارد.) ## Download Mode در مرحله‌ی بعدی باید گوشی را وارد Download Mode کرد. توضیح مختصر اینکه گوشی‌های اندرویدی دو وضعیت Recovery و Fastboot دارند. Recovery مثل یک سیستم عامل کوچک است (یک پارتیشن مجزا هم برای خودش دارد) که می‌توان از آن برای بک آپ گرفتن و نصب آپدیت و آپگرید و نصب ROM یا فرمت پارتیشن‌ها و این قبیل کارها استفاده کرده. Fastboot هم برای ظاهرا برای فلش کردن مستقیم پارتیشن‌ها و حتی تغییر پارتیشن‌بندی است. اما گوشی‌های سامسونگ بجای Fastboot چیزی به نام Download mode دارند که برای فلش کردن گوشی است. به چند طریق می‌توان وارد دانلود مود شد. اگر گوشی قبلا برای adb تنظیم شده (شرح آن پیشتر رفت) می‌توان فرمان زیر را بکار برد: $ adb reboot download راه دیگر هم روشن کردن گوشی است با فشار همزان کلیدهای Volume Down + Bixby + Power. ممکن است موقع شروع گوشی برای ورود تاییدیه بخواهد که فشردن کلید Volume Up است. ## Heimdall حالا که مقدمات را پشت سر گذاشتیم و از سیر تا پیاز گوشی هم بک‌آپ گرفته‌ایم (آن درد کشیده‌ها می‌فهمند چرا!) وقت فلش کردن است. اول چک می‌کنیم که گوشی در دسترس است یا نه: $ heimdall detect Device detected برای اطمینان از جدول پارتیشن‌های گوشی هم یک بک‌اپ می‌گیرم، یکبار به صورت باینری و یکبار متنی: ``` $ heimdall download-pit --output sm-g950f.pit --no-reboot Heimdall v1.4.2 Copyright (c) 2010-2017 Benjamin Dobell, Glass Echidna http://www.glassechidna.com.au/ This software is provided free of charge. Copying and redistribution is encouraged. If you appreciate this software and you would like to support future development please consider donating: http://www.glassechidna.com.au/donate/ Initialising connection... Detecting device... Claiming interface... Setting up interface... Initialising protocol... Protocol initialisation successful. Beginning session... Some devices may take up to 2 minutes to respond. Please be patient! Session begun. Downloading device's PIT file... PIT file download successful. Ending session... Releasing device interface... $ heimdall print-pit --no-reboot > sm-g950f_text.pit ``` حسن بک‌اپ دوم (متنی) اینست که داخل آن می‌شود اسم پارتیشن‌ها و نام معمول فایل آنها را که برای فلش با heimdall لازم است پیدا کرد. بسته‌ای که قبلا دانلود کردیم حاوی تعدادی ایمیج است شامل:‌ AP و BL و CP و CSC_OXM و HOME_CSC_OXM. فرق CSC_OXM و HOME_CSC_OXM هم در این است که دومی را اگر فلش کنیم اندروید بعد از نصب فایل‌های داخل کارت حافظه‌ی داخلی‌اش را پاک نمی‌کند. ‬‏[در جایی] هم خواندم که آنها که پسوند OXM دارند Multi-CSC خوانده می‌شوند و کد کشور را از سیم‌کارت می‌گیرند. برای فلش کردن با Heimdall بر خلاف Odin باید همه‌ی این فایل‌ها را باز کرد و پارتیشن‌ها را یک به یک فلش کرد. پس ما فایل‌های بالا را به همراه HOME_CSC_OXM به یک فولدر جدید کپی و باز می‌کنیم: ``` $ for i in $(ls *.tar.md5); do tar xvf "$i"; done $ for i in $(ls *.lz4); do unlz4 "$i"; done $ rm *.tar.md5 *.lz4 $ ls meta-data cm.bin modem.bin modem_debug.bin param.bin sboot.bin up_param.bin boot.img cache.img recovery.img system.img userdata.img ``` حالا که فایل‌ها را داریم وقت فلش کردن است. اسم پارتیشن‌ها را از فایل `sm-g950f_text.pit` استخراج می‌کنیم و فرمان زیر را اجرا می‌کنیم: ``` $ heimdall flash --CM cm.bin --PARAM param.bin --UP_PARAM up_param.bin --BOOT boot.img --CACHE cache.img --SYSTEM system.img --USERDATA userdata.img ``` می‌شد فرمان زیر را هم اجرا کرد ولی من نخواستم همه‌ی پارتیشن‌ها را جایگزین کنم تا از مشکلات احتمالی جلوگیری کنم. تصمیم گرفتم اگر فرمان قبلی کار نکرد همه را فلش کنم که البته مشکلی پیش نیامد. ``` $ heimdall flash --CM cm.bin --RADIO modem.bin --CP_DEBUG modem_debug.bin --PARAM param.bin --BOOTLOADER sboot.bin --UP_PARAM up_param.bin --BOOT boot.img --CACHE cache.img --RECOVERY recovery.img --SYSTEM system.img --USERDATA userdata.img ``` گوشی را ریبوت کردم و خوشبختانه بی درسر بود شد. البته اول وارد ریکاوری شد که ریستارت کردم. انتظار داشتم که کارت حافظه‌ی داخلی پاک نشده باشد که شده بود. بهرحال آپدیت درست انجام شد. پی‌نوشت برای این بخش:‌ البته که عشق آسان نمود اول ولی افتاد مشکل‌ها! بعد از فلش متوجه شدم که سایز کارت‌حافظه از ۶۴ به ۱۶ کاهش پیدا کرده که احتمالا به خاطر اشتباه بودن سایز ایمیج HOME_CSC_OXM بود. با فلش ایمیج داخل CSC_OXM این مشکل رفع شد. مشکلات دیگری هم در میانه‌ی کار پیش‌آمد که باعث شد [LineageOS] روی گوشی بریزم که خیلی خوب کار کرد و برخلاف سیستم سامسونگ هیچ چیز بیهوده‌ای داخلش وجود ندارد (سامسونگ برنامه‌های خودش و گوگل و فیسبوک و خیلی‌های دیگر را پیش‌فرض نصب می‌کند که برای من فقط زحمت حذف آنها باقی می‌ماند). ولی فعلا آمادگی سویچ به یک محیط کاملا جدید را نداشتم چرا که با گرافیک گلکسی (One UI 1.0) فعلی خیلی راحتم و کارم راه می‌افتد. بنابراین با همان سامسونگ ادامه می‌دهیم (من همیشه اپ‌های اضافه را غیرفعال می‌کنم یا با برنامه‌های روت کاملا حذف می‌کنم). تا اینجا گوشی آپدیت شده و در حال تنظیمات کارخانه است. از جایی که همه چیز ریست شده است دوباره تنظمات برنامه‌نویس را که پیشتر دیدیم فعال می‌کنیم و بعد هم USB Debugging را و ورود به دانلود مود و درنهایت می‌رویسم سروقت روت کردن گوشی. # روت من گوشی را روت می‌کنم تا بتوانم نرم‌افزارهای زورکی سامسونگ و گوگل و مانند اینها را از رام گوشی حذف کنم. علاوه بر این می‌خواهم برنامه‌ی AdAway را نصب کنم تا درخواست‌هایی که به دامین‌های تبلیغاتی و ترکینگ و مانند اینها ارسال می‌شود از بیخ بلاک شوند. اینکار فقط با روت امکانپذیر است. از طرفی با روت گوشی نرم‌افزارهای بانکی از کار می‌افتند که در ادامه شرح می‌دهیم چطور آنها را دوباره فعال کنیم. هرچند بخاطر داشته باشید که روت گوشی کار خطرناکی است. هر برنامه‌ای که دسترسی روت داشته باشد می‌تواند همه‌ی سیستم را تغییر بدهد. گوشی من گارانتی ندارد و من هم از برنامه‌های روت استفاده‌ی چندانی جز آنچه گفتم نمی‌کنم و به برنامه‌های رندوم و ناشناخته هم هیچگونه دسترسی چه روت و غیر روت نمی‌دهم. (اصلا نصبشان نمی‌کنم!) بنابراین با مسئولیت خودتان ادامه بدهید . و البته به خاطر داشته باشید که با کمک امکانات سخت‌افزاری تعبیه شده در چیپ گوشی هر برنامه‌ای که اراده بکند می‌توان به کمک سرویس‌های گوگل از روت بودن گوشی مطلع بشود. منتها این را باید گوگل فعال بکند که تا به امروز اینکار را نکرده. > هر برنامه‌ای که دسترسی روت داشته باشد می‌تواند همه‌ی سیستم را تغییر بدهد. ## نصب ریکاوری برای روت گوشی نیاز است ریکاوری سامسونگ را با [TWRP] جایگزین کنیم چرا که ریکاوری پیش‌فرض سامسونگ کار بدرد ما نمی‌خورد. اول باید ریکاوری مناسب گوشی را پیدا کرد. من از سایت twrp.me و بخش مخصوص گلکسی ۸ [ریکاوری مخصوص گلکسی ۸] را دریافت کردم (این سایت متاسفانه پر از تبلیغات است، نصب ublock را فراموش نکنید). البته می‌شود [ریکاوری را بیلد کنیم] که کار پرزحمت اما مطمئن‌تری است. فکر می‌کنم بدون ریکاوری هم می‌شود به کمک adb در مود دانلود کرنل را عوض کرد و گوشی را روت کرد اما درست و حسابی امتحانش نکرده‌ام. در آنصورت اصلا نیازی به TWRP نخواهد بود. نرم‌افزار پیش‌فرض سامسونگ اگر تشخیص بدهد که ریکاوری دیگری بجز سامسونگ نصب شده است آن را حذف می‌کند و ریکاوری خودش را جایگزین می‌کند. (بالا گفتم که این پدرسوخته‌بازی‌ها مال سیستم‌های بسته‌ای مثل این گوشی است که امیدوارم در آینده از شر آنها خلاص بشویم.) به همین خاطر نصب ریکاوری کمی دردسرساز است. با Heimdall باید ریکاوری را نصب کنیم ولی موقع ریبوت باید فورا کلیدهای Volume Up + Bixby + Power را همزمان فشار دهیم تا ریکاوری لود شود در غیر اینصورت بعد از سیستم آن را حذف می‌کند: ``` $ adb reboot download $ heimdall flash --no-reboot --RECOVERY ~/Downloads/twrp-3.5.2_9-0-dreamlte.img Heimdall v1.4.2 Copyright (c) 2010-2017 Benjamin Dobell, Glass Echidna http://www.glassechidna.com.au/ This software is provided free of charge. Copying and redistribution is encouraged. If you appreciate this software and you would like to support future development please consider donating: http://www.glassechidna.com.au/donate/ Initialising connection... Detecting device... Claiming interface... Setting up interface... Initialising protocol... Protocol initialisation successful. Beginning session... Some devices may take up to 2 minutes to respond. Please be patient! Session begun. Downloading device's PIT file... PIT file download successful. Uploading RECOVERY 100% RECOVERY upload successful Ending session... Releasing device interface... ``` بعد از ریبوت مجدد به ریکاوری باید به TWRP اجازه‌ی تغییر سیستم را بدهیم تا جلوی حذف شدن خودش به دست سامسونگ را بگیرد. البته به همین سادگی نیست. (بار اول خودش می‌پرسد که اینکار را بکند یا نه) TWRP می‌تواند جلوی حذف شدن خودش را بگیرد اما برخی گوشی‌ها مثل این گوشی از [dm-verify] استفاده می‌کنند که یک قابلیت از کرنل لینوکس است برای کشف دستکاری و تغییر در فایل‌سیستم. سامسونگ و دوستان از این فیچر برای کشف تغییر در پارتیشن‌های پیش‌فرض سیستم و حذف ریکاوری و مانند اینها استفاده می‌کنند، بله بر علیه ما کاربران! بنابراین ما مجبوریم بر علیه این ضدفیچر هم یک هک دیگر بکار ببریم و این کنترل را از کار بیندازیم. به این منظور باید یک پچ را دانلود و همزمان که به طور موقتی در ریکاوری هستیم آن را نصب کنیم. من پچ [Disable_Dm-Verity_ForceEncrypt] را دانلود کردم (این لینک یک کپی است) کد آن را خواندم، چیز خطرناکی داخلش ندیدم. کافیست محتوای ریپازیتوری را زیپ کنیم (ساختار فایل‌ها مطابق یک بسته‌ی قابل فلش کردن اندرویدی است، بیشتر نمی‌دانم) و روی گوشی کپی کنیم. می‌شود از داخل ریپازیتوری فایل را کپی کرد: $ adb push Disable_Dm-Verity_ForceEncrypt_quota_11.02.2020.zip /sdcard/ اسم فایل مهم است. اسکریپت درون این بسته از روی اسم فایل می‌فهمد چه چیزهایی را غیرفعال کند. بعد از کپی کافی است از منوی Install ریکاوری فایل را انتخاب و اعمال و بعد ریبوت کنیم. پس‌نوشت: من بار اول که وارد ریکاوری شدم به TWRP اجازه دادم پارتیشن سیستم من را تغییر بدهد تا جلوی حذف خودش را بگیرد. بدون اپلای پچ بالا ریبوت کردم و گوشی داخل boot-loop گرفتار شد. با اپلای پچ مشکل رفع شد. حالا بالاخره می‌رویم سروقت روت کردن. ## Magisk برای روت گوشی ما از [Magisk] استفاده می‌کنیم که ایمج بوت گوشی را پچ می‌کند و بدون تغییر پارتیشن سیستم دسترسی روت برایمان فراهم می‌کند و امکان کور کردن اپ‌ها را می‌دهد تا از روت شدن گوشی مطلع نشوند. ماژول‌های مختلفی هم دارد برای اعمال تغییرات خاص روی گوشی که برای روت نیازی به آنها نیست. آخرین نسخه را ‬[از روی گیت‌هاب مجیسک] می‌گیریم (هنگام نوشتن v23.0) و روی گوشی مثل قبل کپی می‌کنیم (یا در حالت ریکاوری با `adb push Magisk-v23.0.apk /sdcard/`). حالا کافیست وارد ریکاوری بشویم و این فایل را نصب کنیم (بله همین فایل با پسوند apk را). همانند قبل در بخش Install ریکاوری فایل را انتخاب و اعمال می‌کنیم و بعد ریبوت. بعد از ریبوت از داخل گوشی هم همین فایل را دوباره نصب می‌کنیم تا اپ MagiskManager به گوشی اضافه شود. داخل آن می‌توانیم وضعیت روت را بررسی کنیم و MagiskHide را فعال کنیم یا ماژول‌های مختلف را به گوشی اضافه کنیم. من بیش از این آن را شرح نمی‌دهم که از حوصله‌ی این نوشته خارج می‌شود. اطلاعات بیشتر و کلی عکس روی سایت [magiskmanager]. ## SafetyNet Test تا اینجا گوشی را روت کردیم اما این برای استفاده از برنامه‌های بانکی و مانند اینها کافی نیست (مثلا اپ موبیلت بانک سامان). این قبیل برنامه‌ها از API مخصوص امنیت در اندروید بنام [SafetyNet API] استفاده می‌کنند که به برنامه می‌گوید که آیا گوشی دستکاری شده است یا نه. در حال حاضر به کمک مجیسک می‌شود اندروید را فریب داد چرا که این فیچر نرم‌افزاری است. هرچند به محض اینکه گوگل اراده بکند می‌تواند از قابلیت‌های امنیتی موجود در پردازنده‌های موجود آرم استفاده کند و به کمک سخت‌افزار این موضوع را کنترل کند که در آن صورت هنوز راهی برای فرار از این موضوع پیدا نشده است. معنایش اینست که اگر گوشی از سخت‌افزار برای کنترل روت استفاده کند راهی برای فریب برنامه‌هایی که از این API استفاده کنند وجود ندارد. بعضی برنامه‌ها هم چک می‌کنند که آیا مجیسک روی گوشی وجود دارد یا نه (باز هم موبیلت) که البته با تغییر نام پکیج مجیسک از داخل خود اپ این مشکل حل می‌شود. در گذشته با نصب مجیسک این تست‌ها هم پاس می‌شد ولی اینبار Basic Attestation و ctsProfile پاس نشدند (اسمی که اپ مجیسک برای این کنترل‌ها بکار می‌برد). با مقداری تحقیق متوجه شدم که به کمک [MagiskHidePropsConf] مشکل حل می‌شود (این هم یک کپی است). البته اگر SafetyNet Test داخل اپ مجیسک پاس شد نیازی به اینکار نیست. به هرحال روش کار اینطور است: 1. داخل مجیسک ماژول MagiskHide Props Config را نصب می‌کنیم 2. ریبوت 3. اجرای شبیه‌ساز ترمینال مانند [Termux] 4. اجرای دستور `su` و اجازه‌ی روت موقتی به ترموکس 5. اجرای دستور `props` 6. انتخاب گزینه ۲ (Force basic attestation) 7. انتخاب پاسخ y 8. ریبوت با انتخاب گزینه‌ی y با اجرای این مراحل SafetyNet Test هم پاس شد. # تغییر دگمه‌ی Bixby این گوشی یک دگمه‌ی خوب اما بی‌مصرف دارد که فقط تبلیغات سامسونگ را باز می‌کند. من دوست دارم وقتی این دگمه را می‌فشارم از صفحه یک اسکرین‌شات گرفته شود. این کار هم فقط با روت امکانپذیر است. از روی کامپیوتر یا داخل ترموکس: $ adb shell $ su # [mount] -o rw,remount /system # cd /system/usr/keylayout # # now replace WINK mit [SYSRQ] # sed -i "s/WINK/SYSRQ/" Generic.kl # reboot # بازگردانی داده‌ها اگر همه چیز درست پیش رفته باشد (که برای من نرفت!) یک گوشی گلکسی ۸ روت با اندروید ۹ داریم که خالی است. حالا کافیست بک‌آپ را بازگردانی بکنیم و اپ‌ها را دوباره نصب کنیم. البته احتمالا اگر آن بالا پارتیشن userdata را فلش نمی‌کردیم و اپلای کردن پچ dm-verify هم فراموش نشده بود داده‌ها حذف نمی‌شدند. (پارتیشن userdata حاولی اپ‌ها و اطلاعات کاربر است، اپ‌های سیستم روی پارتیشن system هستند.) پس‌نوشت: در ابتدای مقاله گفتم که بازگردانی داده‌ها و نصب اپ‌های بانکی را هم انجام می‌دهیم اما سخن به درازا کشید و به آنجا نرسیدیم. اجل امان دهد در مطلبی دیگر :) [oandbackupx]: https://github.com/machiav3lli/oandbackupx [samloader]: https://github.com/nlscc/samloader [Heimdall]: https://glassechidna.com.au/heimdall/ [TWRP]: https://github.com/TeamWin/android_bootable_recovery [twrp.me]: https://twrp.me/samsung/samsunggalaxys8.html [Magisk]: https://magiskmanager.com/ [PinePhone]: https://wiki.pine64.org/index.php/PinePhone [F-Droid]: https://f-droid.org/ [dm-verify]: https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html [Disable_Dm-Verity_ForceEncrypt]: https://github.com/coderbymistake/Disable_Dm-Verity_ForceEncrypt [Magisk]: https://github.com/topjohnwu/Magisk [magiskmanager]: https://magiskmanager.com/ [LineageOS]: https://wiki.lineageos.org/devices/a5y17lte/install [SafetyNet API]: https://en.wikipedia.org/wiki/SafetyNet_API [MagiskHidePropsConf]: https://github.com/coderbymistake/MagiskHidePropsConf [Termux]: https://termux.com/ [mount]: https://forum.xda-developers.com/t/how-to-set-system-partition-into-rw.3610569/#post-72399220 [SYSRQ]: https://forum.xda-developers.com/t/root-remap-bixby-button-w-o-an-app.3601061/page-4#post-72820388 [برآورده می‌شود]: decsync.html [ریکاوری مخصوص گلکسی ۸]: https://eu.dl.twrp.me/dreamlte/twrp-3.5.2_9-0-dreamlte.img [این جیست گیتهاب]: https://gist.github.com/AnatomicJC/e773dd55ae60ab0b2d6dd2351eb977c1 [در جایی]: https://www.droidviews.com/difference-between-csc-and-home_csc-samsung-firmware/ [ریکاوری را بیلد کنیم]: https://github.com/coderbymistake/android_device_samsung_dreamlte [از روی گیت‌هاب مجیسک]: https://github.com/topjohnwu/Magisk/releases [فایل‌ها را باز کرد]: http://muzso.hu/2012/08/10/how-to-pack-and-unpack-system.img-and-userdata.img-from-an-android-factory-image