Saya menerima perangkat itu sebagai hadiah. Setiap kali saya menerima perangkat baru, saya memeriksanya sekilas. Apalagi dengan perangkat yang mengundang beberapa data penting yang bersifat pribadi atau bisnis. Meskipun dalam kasus ini saya kurang lebih mempercayai perusahaan Ratta untuk melakukan yang terbaik yang mereka bisa untuk melindungi data saya - sebagai perusahaan (sebagian) Tiongkok, saya yakin ada batasan pada apa yang dapat mereka lakukan. Kita semua mengetahui perbincangan seputar undang-undang dan peraturan privasi di Tiongkok. Saya juga punya alasan untuk percaya bahwa perangkat dibuat oleh produsen OEM pihak ketiga yang juga berlokasi di Tiongkok daratan dan ingin melihat apa lagi yang terjadi pada perangkat tersebut.
TL;DR Perangkat dapat di-root melalui beberapa vektor serangan. Berbasis perangkat lunak dan juga perangkat keras.
Kabar baik: setelah melihat ke dalam perangkat, saya tidak menemukan apa pun yang jelas-jelas membahayakan dalam hal spyware atau praktik invasif lainnya. Beberapa Aplikasi Ratta hadir dengan komponen Tencent yang sebagian dikaburkan. Perangkat tampaknya menghormati pengaturan telemetri Anda (perhatikan Google, Apple, dkk) tetapi secara teratur memeriksa pembaruan yang setidaknya mungkin melacak Anda dalam hal lokasi dan pola penggunaan. Beberapa server rupanya berlokasi di Tiongkok sehingga berpotensi terbuka untuk pemerintah Tiongkok. Meskipun perusahaan tersebut tampaknya menyadari topik tersebut dan meluncurkan server di AS. Sebagai gambaran: perangkat Google atau Amazon apa pun yang tertanam, sistem operasi populer apa pun, ponsel cerdas apa pun, atau aplikasi media sosial populer mengumpulkan lebih banyak informasi tentang Anda daripada yang saya temukan di sini.
Peringatan: Saya tidak menyarankan siapa pun untuk mengikuti artikel ini dalam praktiknya karena kemungkinan besar Anda akan membuat perangkat Anda tidak berfungsi. Sebagian besar dari ini ditulis dari ingatan. Yang dalam kasus saya tidak terlalu bisa diandalkan. Jadi mungkin ada kesalahan atau kelalaian yang meningkatkan risiko membuat perangkat Anda tidak dapat digunakan dan membatalkan jaminan Anda.
Pembaruan 2022/08/08: Saya memberi tahu Ratta sekitar dua minggu yang lalu untuk memberi tahu mereka bahwa saya akan merilis informasi ini. Seperti yang diharapkan, Ratta menjawab dengan ramah dan berjanji untuk mengatasi masalah tersebut. Saya juga ingin menekankan bahwa saya sama sekali tidak menyiratkan CHINA = EVIL di sini. Saya menyuarakan keinginan umum agar data saya aman dan pribadi dan saya melihat masalah dalam praktik privasi AS, Eropa, India, Rusia,... sama seperti yang saya lihat di Tiongkok.
Lihat di atas. Mengingat akses fisik, perangkat ini tidak dapat dianggap aman untuk data yang sangat sensitif.
Mengingat sifat dari versi Android yang ketinggalan jaman dan kurangnya langkah-langkah keamanan, saya tidak akan pernah menyediakan perangkat saya kepada pihak yang tidak tepercaya. Saya juga menyarankan untuk tidak menghubungkannya ke komputer atau kabel pengisi daya publik yang tidak dikenal karena beberapa serangan ini dapat dilakukan dengan cara yang sepenuhnya otomatis.
Saya bukan orang keamanan. Saya harus menghabiskan waktu dua minggu untuk mengumpulkan data yang tersedia untuk umum. Siapa pun atau pihak yang cukup termotivasi dan lebih berbakat dari saya akan lebih cepat. Juga karena Ratta berjanji untuk mengizinkan sideloading serta melihat perangkat terbuka lebar dengan su biner yang sudah diinstal sebelumnya, kunci pengujian publik, boot loader terbuka, (dinonaktifkan, mudah dibuka kuncinya) antarmuka konsol adb dan pintu terbuka lainnya, saya berasumsi ini tidak akan membuat apa pun ketidaknyamanan yang tidak terduga.
Dokumen ini telah tersedia bagi Ratta melalui email pada 27 Juli 2022, dua minggu sebelum dipublikasikan.
Tidak. Dalam situasi apa pun saya tidak akan mendistribusikan file apa pun yang mungkin dilindungi hak cipta atau semacamnya. Jika Anda tahu apa yang Anda lakukan, artikel ini berisi informasi lebih dari cukup. Jika tidak, biarkan perangkat Anda apa adanya dan minta Ratta untuk memberikan akses shell/root ke perangkat Anda.
Anda dapat menemukan spesifikasi perangkat dalam jumlah terbatas dengan menginstal aplikasi Kindle yang - pada saat penulisan ini - satu-satunya aplikasi yang tersedia di "app store" terintegrasi perangkat tersebut. Atau Anda cukup membongkar OTA update.zip.
Perangkat ini menjalankan Android 8.1 pada platform Rockchip PX30 yang terdiri dari quad core ARM Cortex-A35 1,5GHz, RAM 2 giga, dan layar eink 1404x1872. Platform Rockchip sepertinya sering ditemukan di radio mobil dan perangkat tertanam lainnya yang dilengkapi antarmuka pengguna. Jadi Anda bisa menemukan banyak info resmi dan kurang resmi hanya dengan googling.
Seperti: rockchip.fr/PX30%20datasheet%20V1.1.pdf Atau lebih lanjut: opensource.rock-chips.com/wiki_Main_Page
Mengurangi fakta bahwa ada /r/supernote dan /r/supernote_beta di reddit, ada program beta untuk perangkat tersebut.
Ratta menawarkan informasi tentang rilis pembaruan beta di sana serta di situs web mereka:
Non-beta saat ini dapat diunduh dari sini: support.supernote.com/article/3/how-to-update-your-supernote
Versi beta tidak bisa karena distribusinya terkait dengan nomor seri perangkat Anda seperti yang dapat ditemukan di SupernoteSettings.apk
, karena terlepas dari versi yang diinstal saat ini, ia terhubung ke server dan URL yang sama. Lihat di bawah untuk info lebih mendalam.
Pembaruan adalah file OTA Android yang umum dan tidak terenkripsi yang dapat dengan mudah dibuka dan dianalisis menggunakan alat yang tersedia secara gratis. Lihat di bawah untuk informasi lebih lanjut.
update.zip dengan gambar .br brotli yang belum dibongkar:
pembaruan.zip:/system
Perangkat diperbarui dengan berkoordinasi dengan server di device.supernote.com.cn
untuk melihat apakah ada pembaruan baru yang tersedia:
curl -X POST -k -H 'Content-Type: application/json' -i 'https://device.supernote.com/official/system/business/android/update/download' --data '{"language":"EN", "equipmentNo":"SN100Bxxxxxxxx", "logicVersion":"Chauvet 2.4.15(566)", "configureList":[{"type":"1", "version":"Chauvet.D002.2203101001.566_release"}]}'
Pesan kesalahan dalam bahasa Cina tetapi Perangkat biasa tidak memerlukan pembaruan , Nomor seri tidak diketahui , dll.
Jika pembaruan tersedia, perangkat menerima URL unduhan bersama dengan log perubahan lengkap, dll.
{"success":true,"errorCode":null,"errorMsg":null,"configureList":[{"type":"1","version":"Chauvet.xxxx.xxxxxxxxxx.xxx_xxxxxxx","Namafile" :"Chauvet.xxxx.xxxxxxxxxx.xxx_xxxxxxx.zip","nama":null,"namapaket":null,"versi Tidak":null,"url":"https://prod-ratta-firmware.s3.ap-northeast-1.amazonaws.com/xxxxxx/update.zip","size":xxxxxxxx,"md5":" abcdefabcdefabcdefabcdef"}],"totalSize":xxxxxxxx,"fixPointList":[{"current":false,"version":"Chauvet xxxx(xxx)","fixPoint":"
...
","opTime":"xxxx-xx-xx xx:xx:xx"}],"logicVersion":" Chauvet xxxx(xxx)","deployDate":"xxxx-xx-xx xx:xx:xx"}
Yang kemudian diunduh dan diserahkan ke sistem pemulihan.
Hal yang sama terjadi jika Anda mengikuti instruksi pembaruan manual dengan meletakkan file update.zip di folder /EXPORT/
pada perangkat Anda dan menarik kabel USB. Perangkat menemukan file tersebut dan menanyakan apakah file tersebut harus dilanjutkan instalasinya.
Mekanisme tepatnya dapat dikurangkan dari kode berikut.
com.ratta.supernote.update.NetWorkConstant
public static final String DEV_BASE_URL = "http://10.20.22.32:9000" ;
public static final String DOWN_LOAD_URL = "" ;
public static final String NET_BASE_URL_PRODUCT = "http://10.20.22.32:8075/" ;
public static final String NET_BASE_URL_TEST = "https://test-ms-device.ratta.com.cn/" ;
public static final String RELEASE_BASE_URL = "https://device.supernote.com.cn/" ;
public static final String UAT_BASE_URL = "https://device.supernote.com" ;
public static final File DOWN_LOAD_PATH = new File ( "/cache" );
public static final String USBDisk_Path = Environment . getExternalStorageDirectory () + File . separator ;
public static final String FILE_TEST = USBDisk_Path + "EXPORT/test" ;
public static final String FILE_PRODUCT = USBDisk_Path + "EXPORT/product" ;
public static final String FILE_UAT = USBDisk_Path + "EXPORT/uat" ;
com.ratta.networklibrary.utils.C0598Utils
String str = Build . DISPLAY ; // i.E. Chauvet.D002.2203101001.566_release
boolean exists = new File ( Constant . FILE_USA ). exists ();
int lastIndexOf = str . lastIndexOf ( "_" );
if ( lastIndexOf != - 1 ) {
String substring = str . substring ( lastIndexOf + 1 );
String str2 = (( TextUtils . equals ( substring , "root" ) || TextUtils . equals ( substring , "hard" )) && exists ) ? Constant . USA_BASE_URL : Constant . RELEASE_BASE_URL ;
if ( new File ( Constant . FILE_TEST ). exists () || TextUtils . equals ( substring , "test" )) {
str2 = exists ? Constant . TEST_USA_BASE_URL : Constant . TEST_BASE_URL ;
} else if ( new File ( Constant . FILE_PRODUCT ). exists ()) {
str2 = Constant . DEV_BASE_URL ;
} else if ( new File ( Constant . FILE_UAT ). exists () || TextUtils . equals ( substring , "uat" )) {
str2 = Constant . UAT_BASE_URL ;
}
if (! TextUtils . equals ( substring , "release" ) && ! TextUtils . equals ( substring , "beta" )) {
return str2 ;
}
if ( exists ) {
return Constant . USA_BASE_URL ;
}
}
return Constant . RELEASE_BASE_URL ;
com.ratta.supernote.update.DownLoadService
@ POST ( "official/system/business/android/update/download" )
Call < DownResponse > downLoadFileInfo ( @ Body RequestBody requestBody );
com.ratta.supernote.update.UpDateAppService
LocalSystemInfoBean localSystemInfoBean = new LocalSystemInfoBean (); // see CURL request above for example values
localSystemInfoBean . setEquipmentNo ( DownPresenter . getDeviceVersion ());
localSystemInfoBean . setLanguage ( DownPresenter . getLanguage ( this ));
localSystemInfoBean . setLogicVersion ( DownPresenter . getLogicVersion ());
localSystemInfoBean . setConfigureList ( DownPresenter . getSystemAllPackageVersion ( this , new ArrayList ()));
RetrofitUtils retrofitUtils = RetrofitUtils . getInstance ();
final DownResponse downResponse = ( DownResponse ) retrofitUtils . execute ((( DownLoadService ) retrofitUtils . getService ( DownLoadService . class )). downLoadFileInfo ( DownLoadModel . getRequestBody ( localSystemInfoBean )));
com.ratta.supernote.update.UpDateAppService
if ( new File ( NetWorkConstant . DOWN_LOAD_PATH , "update.zip" ). exists ()) {
CacheInfoUtils . saveData ( CacheInfoUtils . updateFlagPath , UpDateAppService . USB_UPDATE_FLAG );
RecoverySystem . installPackage ( UpDateAppService . this , new File ( NetWorkConstant . DOWN_LOAD_PATH , "update.zip" )); // if unfamiliar: https://developer.android.com/reference/android/os/RecoverySystem
}
com.ratta.supernote.update.UpDateAppService
private void checkRestartUpdate () {
String str = SystemProperties . get ( ConstanceUtil . restartKey , Constance . FILE_SEVER_UFILE ); // FILE_SEVER_UFILE = "0"; restartKey = "ratta.launcher.restart";
LogUtils . m187d ( "ratta: " + str );
if (! str . equals ( "1" )) {
SystemProperties . set ( ConstanceUtil . restartKey , "1" );
this . firstSelectVersion = true ;
if ( new File ( Environment . getExternalStorageDirectory (). getAbsolutePath () + File . separator + "EXPORT" , "update.zip" ). exists ()) {
this . firstSelectVersion = false ;
usbUpdate ();
return ;
}
LogUtils . m187d ( "checkRestartUpdate: getVersionList" );
getVersionList ();
}
}
public void usbUpdate () {
if ( this . usbUpdateFlag ) {
return ;
}
final File file = new File ( Environment . getExternalStorageDirectory (). getAbsolutePath () + File . separator + "EXPORT" , "update.zip" );
if (! file . exists ()) {
LogUtils . m187d ( "onReceive: No USB upgrade file" );
return ;
}
GestureService . lockStatusbar = true ;
GestureService . lockSlidebar = true ;
this . usbUpdateFlag = true ;
LogUtils . m187d ( "usb update GestureService.lockStatusbar true" );
DialogUtils . getInstance (). build ( this ). createDefaultDelayDialog ( getString ( C0688R . string . usb_detection_tips ), 30 , new LibDialogDelayDefaultListener () { // "The upgrade pack is detected, do you want to install?"
// goes on with housekeeping like removing any existing update.zip and a couple of checks for enough battery etc and then moves the update.zip to /cache as seen above
Seperti yang Anda lihat, tidak ada pemeriksaan kewarasan atau jenis dekripsi apa pun yang terjadi. Jadi pada dasarnya Anda dapat mengambil file apa pun, memindahkannya ke folder /EKSPOR/ dan membiarkan sistem menyerahkannya ke pemulihan.
Saya tidak pernah memeriksanya tetapi membaca kodenya saya berasumsi Anda dapat meningkatkan dan menurunkan versi perangkat Anda sesuka hati melalui USB.
Meskipun karena ini adalah mekanisme pemulihan Android standar (yang tidak terlalu saya kenal), ia akan memeriksa apakah file tersebut ditandatangani dengan kunci pribadi yang dikenal.
Perangkat ini dilengkapi dengan antarmuka ADB tertutup. Dibutuhkan perintah adb reboot
yang memungkinkan Anda memasukkannya ke dalam recovery adb reboot recovery
serta ke dalam fastboot adb reboot fastboot
atau mode bootloader adb reboot loader
.
Dalam mode pemulihan, perangkat mengizinkan shell yang dijalankan sebagai root. Kumpulan perintah terbatas tersedia tetapi busybox diinstal jadi lupakan. Langkah logisnya adalah membuka kunci akses penuh ke adb dengan membuat skrip seperti ini:
#! /bin/bash
echo " rebooting to recovery "
adb reboot recovery
ANSWER=0
while [ " $ANSWER " != " 1 " ] ; do
sleep 2
ANSWER= $( adb devices | grep rockchipplatform -c )
done
echo " device online, patching "
adb shell busybox mount -o rw,seclabel,relatime,data=ordered,inode_readahead_blks=8 /dev/block/by-name/system /system
adb shell sed -i " s/ro.debuggable=0/ro.debuggable=1/ " /system/etc/prop.default
echo " rebooting to system "
adb reboot
Setelah itu perangkat pada dasarnya dapat diakses sepenuhnya melalui shell adb standar yang kemudian dapat di-root:
Untuk pengguna non-teknis: ini berarti perangkat Anda pada dasarnya terbuka, bersama dengan semua file Anda. Setiap pengguna yang termotivasi dapat menyalin atau memodifikasi file apa pun di perangkat Anda kapan saja dengan akses USB.
Karena bootloader tidak terkunci, Anda dapat mem-flash kernel atau partisi apa pun kapan saja dengan me-reboot perangkat ke mode ini dan fastboot flash boot boot.img
Untuk pengguna non-teknis: ini berarti perangkat Anda dapat dengan bebas dimodifikasi sedemikian rupa sehingga Anda tidak menyadarinya sehingga membahayakan data dan privasi Anda.
Dalam mode ini perangkat terdeteksi sebagai "LOADER MODE" oleh alat pengembang Rockchip seperti RKDevTool. Dari sini partisi dapat ditimpa, tata letak partisi dapat diubah...
...dan perangkat dapat dimasukkan ke Mode Maskrom. Lebih lanjut tentang itu di bawah.
Untuk pengguna non-teknis: ini berarti perangkat Anda dapat dengan bebas dimodifikasi sedemikian rupa sehingga Anda tidak menyadarinya sehingga membahayakan data dan privasi Anda.
Ketika saya melihat /system/build.prop
yang saya temukan
ro.build.description=px30_ht_eink-userdebug 8.1.0 OPM8.190505.001 Chauvet.D002.2206171001.629_beta test-keys
ro.build.fingerprint=Android/htfy_px30:/Chauvet.D002.2206171001.629_beta_:userdebug
test-keys
bukanlah pertanda baik. Jika Anda adalah pengembangnya. Ini pertanda bagus jika Anda mencari pintu terbuka lebar ke dalam sistem.
Saya tidak akan membahas detail Android OTA tetapi Anda dapat membacanya di sini.
Dengan melihat update.zip: /META-INF/com/android/otacert
kita dapat melihat sertifikat publik untuk pembaruan:
----- MULAI SERTIFIKAT -----
MIID+zCCAuOgAwIBAgIJAJKlKMdz16FBMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD
VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
VmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UE
AwwHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe
Fw0xNDEyMjMwNjQ0MDhaFw00MjA1MTAwNjQ0MDhaMIGUMQswCQYDVQQGEwJVUzET
MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQMA4G
A1UECgwHQW5kcm9pZDEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHQW5kcm9p
ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI
hvcNAQEBBQADggENADCCAQgCggEBAl71fjESroAzdrkBKrApCrK9qnZfH38S3U3
6jhBOQtrwxnh/AaRC3hOyO5ihjwv1MlSuTA1DygGMznwP8rOQbc9eH4uqdnerE87
v0bc8lPCj22AAterZBZESqgfRwND/25S6A22wA/kpR/CiXMuWHlQfS6Q9CHBOwVQ
5ZZUge2KC1TbH8EtDkxDacOeTbhN6UQxxm3jgaIzkwyrEEcYB1m93CrTFOtVV7Jw
wo7XE5LGwo6nTzNieXJqoYxcNAMpv9seKW+GZ1EGl78e9B37SMoxq0I7HuStz5tD
tS2Er2YrjQig+1ZqgroIvPfEJAEyoEr0r6kK7jBh878usWOuWB0CAQOjUDBOMB0G
A1UdDgQWBBTV37ltjIiA28uNs8Z1hb6zasy5UzAfBgNVHSMEGDAWgBTV37ltjIiA
28uNs8Z1hb6zasy5UzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAZ
7pvK3yDr+O0G8ggDfaISkEeg0agocRcXGT/MRiPBz+n45+bEoym4hC2SdCxvHXES
5AHkFxjWavoQqAD8We955NCmpGzDip4hUctlXzqxYfSTvGiLArG92+Hcbu5RNx/7
o3Of39Mdge2jVKQuKAALWnb8TgJ/2k3KAUFzVqMXPY4asmnWtyW2FIKLdZU/yYTX
+8Tp0AhP+N84HUGg5BwQRD10/OGGY54rLfFy2aSLPxUZQ+VTSZB9Z9XRLxohsF/V
XBcZyCdPP254wDYL5R0HGWZv7CeBlVjw3FqDRI9aljdYfLpAk+clnRBwWOWHsiOE
pJXgkkLmpq0uDXsSMJZ2
----- SERTIFIKAT AKHIR -----
Googling bagian dari sertifikat menghasilkan setidaknya satu hasil dari xda-developers.com di mana seseorang mencoba masuk ke perangkat Android 8.1 Rockchip PX5 mereka.
Itu pertanda lebih buruk lagi. Atau yang lebih indah lagi bagiku.
Selanjutnya saya mencari SDK di sekitar platform PX30 di Google dan menemukannya di sini:
en.t-firefly.com/doc/download/page/id/63.html#other_206
bersama dengan dokumen di sini:
wiki.t-firefly.com/en/Core-PX30-JD4/Android_development.html
dan di sini:
wiki.t-firefly.com/en/Firefly-RK3399/customize_android_firmware.html
Mengunduh SDK, Anda dapat membongkar arsip 7z dan memulai repo git yang ada melalui:
git clone PX30_Android8.1.0_LVDS_190706 directory_to_clone_into
Setelah klon yang panjang, temukan kunci pengujian SDK di bawah /build/make/target/product/security
dan Anda siap melakukannya.
Fakta menarik: README di folder itu menyatakan:
Kunci pengujian dalam direktori ini hanya digunakan dalam pengembangan dan JANGAN PERNAH digunakan untuk menandatangani paket dalam image yang dirilis secara publik (karena akan membuka lubang keamanan yang besar).
Ya, sudah dikonfirmasi.
Saya menyerahkan tekniknya kepada Anda - saat bekerja di Windows saya menggunakan Multi Image Kitchen untuk membongkar dan mengemas ulang serta menandatangani OTA Android. Anda harus memindahkan testkey.x509.pem
dan testkey.pk8
ke folder bin
alat dan dari sana Anda akan dapat membuat pembaruan yang dimodifikasi sehingga perangkat tidak punya pilihan selain menginstalnya ketika Anda menempatkannya di folder EKSPOR .
Yah, mungkin.
Semua yang Anda lakukan dari sini sangat rentan terhadap kesalahan dan perangkat Anda mengalami kerusakan ringan. Sejauh yang saya tahu semua perangkat Rockchip tidak akan pernah bisa sepenuhnya bersifat soft brick karena mereka selalu hadir dengan mode maskrom yang pada dasarnya adalah antarmuka pemrograman terbuka.
Biasanya antarmuka ini dapat diakses melalui korslet dua pin pada CPU. Ini juga berfungsi pada Supernote Anda, tetapi melibatkan pembukaan perangkat dan kemungkinan besar membatalkan sisa jaminan yang mungkin Anda miliki.
Lihat di bawah untuk semua informasi tentang maskrom PX30 dan cara memulihkan perangkat Anda.
Cadangkan semua partisi di root adb shell:
adb shell
misalnya dengan mengeluarkan perintah berikut:
cat /dev/block/mmcblk1p1 > /sdcard/EXPORT/uboot.img
cat /dev/block/mmcblk1p2 > /sdcard/EXPORT/trust.img
cat /dev/block/mmcblk1p3 > /sdcard/EXPORT/misc.img
cat /dev/block/mmcblk1p4 > /sdcard/EXPORT/resource.img
cat /dev/block/mmcblk1p5 > /sdcard/EXPORT/kernel.img
cat /dev/block/mmcblk1p6 > /sdcard/EXPORT/boot.img
cat /dev/block/mmcblk1p7 > /sdcard/EXPORT/recovery.img
cat /dev/block/mmcblk1p8 > /sdcard/EXPORT/backup.img
cat /dev/block/mmcblk1p9 > /sdcard/EXPORT/security.img
cat /dev/block/mmcblk1p10 > /sdcard/EXPORT/cache.img
cat /dev/block/mmcblk1p11 > /sdcard/EXPORT/system.img
cat /dev/block/mmcblk1p12 > /sdcard/EXPORT/metadata.img
cat /dev/block/mmcblk1p13 > /sdcard/EXPORT/vendor.img
cat /dev/block/mmcblk1p14 > /sdcard/EXPORT/oem.img
cat /dev/block/mmcblk1p15 > /sdcard/EXPORT/frp.img
dan bahkan berpotensi menyimpan data pengguna Anda:
dd if=/dev/block/by-name/userdata bs=4096 count=1048576 of=/sdcard/EXPORT/userdata-1.img
dd if=/dev/block/by-name/userdata bs=4096 skip=1048576 count=1048576 of=/sdcard/EXPORT/userdata-2.img
dd if=/dev/block/by-name/userdata bs=4096 skip=2097152 count=1048576 of=/sdcard/EXPORT/userdata-3.img
dd if=/dev/block/by-name/userdata bs=4096 skip=3145728 count=1048576 of=/sdcard/EXPORT/userdata-4.img
dd if=/dev/block/by-name/userdata bs=4096 skip=4194304 count=1048576 of=/sdcard/EXPORT/userdata-5.img
dd if=/dev/block/by-name/userdata bs=4096 skip=5242880 count=1048576 of=/sdcard/EXPORT/userdata-6.img
backup -> /dev/block/mmcblk1p8
boot -> /dev/block/mmcblk1p6
cache -> /dev/block/mmcblk1p10
frp -> /dev/block/mmcblk1p15
kernel -> /dev/block/mmcblk1p5
metadata -> /dev/block/mmcblk1p12
misc -> /dev/block/mmcblk1p3
oem -> /dev/block/mmcblk1p14
recovery -> /dev/block/mmcblk1p7
resource -> /dev/block/mmcblk1p4
security -> /dev/block/mmcblk1p9
system -> /dev/block/mmcblk1p11
trust -> /dev/block/mmcblk1p2
uboot -> /dev/block/mmcblk1p1
userdata -> /dev/block/mmcblk1p16
vendor -> /dev/block/mmcblk1p13
rootfs / rootfs ro,seclabel,size=981980k,nr_inodes=245495 0 0
/dev/block/by-name/system /system ext4 ro,seclabel,relatime,data=ordered,inode_readahead_blks=8 0 0
/dev/block/by-name/vendor /vendor ext4 ro,seclabel,relatime,data=ordered,inode_readahead_blks=8 0 0
/dev/block/by-name/oem /oem ext4 ro,seclabel,noatime,nodiratime,block_validity,delalloc,barrier,noauto_da_alloc,user_xattr 0 0
/dev/block/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,nodiratime,discard,noauto_da_alloc,data=ordered 0 0
/dev/block/by-name/metadata /metadata ext4 rw,seclabel,nosuid,nodev,noatime,nodiratime,discard,noauto_da_alloc,data=ordered 0 0
/dev/block/by-name/userdata /data f2fs rw,lazytime,seclabel,nosuid,nodev,noatime,nodiratime,background_gc=on,discard,no_heap,user_xattr,inline_xattr,inline_data,inline_dentry,flush_merge,extent_cache,mode=adaptive,active_logs=6,alloc_mode=default,fsync_mode=posix 0 0
tmpfs /storage tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
adb /dev/usb-ffs/adb functionfs rw,relatime 0 0
/data/media /mnt/runtime/default/emulated sdcardfs rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid 0 0
/data/media /storage/emulated sdcardfs rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid 0 0
/data/media /mnt/runtime/read/emulated sdcardfs rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=9997,multiuser,mask=23,derive_gid 0 0
/data/media /mnt/runtime/write/emulated sdcardfs rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=9997,multiuser,mask=7,derive_gid 0 0
Pembaruan yang ada di perangkat saya sudah dilengkapi dengan su biner dan banyak pintasan yang memberi saya akses mudah ke antarmuka root adb.
Beberapa modifikasi yang saya coba adalah:
/system/etc/prop.default
security.perf_harden=0
ro.debuggable=1
sys.rkadb.root=1
ro.debug.build=true
ro.oem_unlock_supported=1
ro.secure=0
ro.adb.secure=0
persist.sys.usb.config=mtp,adb
Dan sementara itu saya memblokir pemeriksaan pembaruan yang sangat sering dan telemetri opsional (juga memblokir App Store bawaan tetapi itu tidak berguna karena sekarang kita dapat melakukan sideload aplikasi ke perangkat)
/system/etc/hosts
127.0.0.1 device.supernote.com.cn
127.0.0.1 supernote.com.cn
127.0.0.1 www.supernote.com.cn
127.0.0.1 device.supernote.com
127.0.0.1 supernote.com
127.0.0.1 www.supernote.com
127.0.0.1 test-ms-device.ratta.com.cn
127.0.0.1 uat-ms-device.ratta.com.cn
127.0.0.1 ratta.com.cn
Anda memiliki antarmuka root adb yang berfungsi dari sini, dapat melakukan sideload aplikasi dan sepenuhnya memodifikasi /system sesuai keinginan Anda setelah mengeluarkan mount -o remount,rw /system
Langkah pertama yang saya lakukan adalah menginstal solusi root berbasis sistem SuperSU yang berfungsi dengan baik. Untuk itu saya mendownload supersu.zip terbaru, membongkarnya, melihat skrip instalasi dan meletakkan file di tempatnya secara manual dengan cara yang super hacky:
/system/.ext/.su # useless I think? Didn't bother to understand
/system/xbin/daemonsu
/system/xbin/su
/system/xbin/sugote
/system/xbin/sugote-mksh
/system/xbin/supolicy
/system/lib64/libsupol.so
/system/app/SuperSU/SuperSU.apk
Dan ubah /system/bin/install-recovery.sh
menjadi:
/system/xbin/daemonsu --auto-daemon &
/system/etc/install-recovery-2.sh
Kemudian memodifikasi konteks file dan hak akses dengan memodifikasi system_file_contexts.txt
hingga diakhiri dengan:
/system/app/SuperSU/SuperSU.apk u:object_r:system_file:s0
/system/xbin/su u:object_r:system_file:s0
/system/bin/.ext/.su u:object_r:system_file:s0
/system/xbin/daemonsu u:object_r:system_file:s0
/system/xbin/sugote u:object_r:zygote_exec:s0
/system/xbin/supolicy u:object_r:system_file:s0
/system/lib64/libsupol.so u:object_r:system_file:s0
/system/xbin/sugote-mksh u:object_r:system_file:s0
dan system_fs_config.txt
diakhiri dengan:
system/app/SuperSU 0 0 0755
system/app/SuperSU/SuperSU.apk 0 0 0644
system/xbin/su 0 2000 0755
system/bin/.ext 0 2000 0755
system/bin/.ext/.su 0 2000 0755
system/xbin/daemonsu 0 2000 0755
system/xbin/sugote 0 2000 0755
system/xbin/supolicy 0 2000 0755
system/lib64/libsupol.so 0 0 0644
system/xbin/sugote-mksh 0 2000 0755
Bekerja dengan baik.
Akan mudah untuk menerapkan skrip cepat tetapi saat ini saya baru saja masuk ke root Android dan rencana saya adalah menginstal root magisk tanpa sistem yang tepat.
Magisk dapat menghasilkan kernel boot.img "yang di-root" dan ramdisk yang telah dimodifikasi dengan memberinya boot.img yang tidak dimodifikasi.
Ambil boot.img
dari root update.zip
Anda dan salin ke /storage/emulated/0/Download
Sideload Magisk terbaru seperti ini:
adb install Magisk-v25.x.apk
Di perangkat, buka Settings > Apps > My apps
untuk membuat sistem menyegarkan daftar aplikasi dan menambahkan Magisk ke sidebar. Anda mungkin harus menggulir ke sana untuk menemukannya, karena UI peluncur jelas tidak dibuat untuk orang yang memiliki banyak aplikasi.
Sebelum dapat memilih file untuk ditambal di Magisk saya perlu menginstal DocumentProvider yang saya pilih menjadi Total Commander (unduh) karena gratis dan sangat berguna. Disingkirkan bahwa:
adb install tcandroidxxxx-universal.apk
Lakukan hal yang sama seperti di atas agar muncul di sidebar. Buka dan ketuk secara membabi buta di kanan atas untuk membuka menu "kosong" di mana Anda mencoba mengetuk item kedua terakhir untuk beralih dari tema gelap ke tema terang untuk akhirnya melihat semuanya dengan benar.
Buka Magisk, (berikan akses root), ketuk Perbarui, biarkan semuanya apa adanya, ketuk berikutnya, "Pilih dan Tambal file", pilih Total Commander (url...) sebagai penyedia, lalu pilih boot.img Anda.
Sekali lagi salin hasil magisk_patched-xxx.img
dari folder kerja default /storage/emulated/0/Download
kembali ke komputer Anda.
Dari boot perangkat Anda ke fastboot:
adb reboot fastboot
dan mengeluarkan standar:
fastboot flash boot magisk_patched-xxx.img
Dan
fastboot reboot
Jika semuanya berjalan lancar, perangkat Anda akan boot ke sistem, Anda dapat membuka magisk dan akan melaporkan versi yang diinstal bersama dengan Ramdisk: yes . Jika Anda sebelumnya menginstal SuperSU atau belum menghapus su biner yang sudah diinstal sebelumnya, ia akan memperingatkan Anda tentang instalasi yang rusak dan meminta Anda untuk menghapus root sebelumnya. Anda melakukannya dengan menghapus semua file yang Anda tambahkan atau hanya su
dan libsupol.so
yang sudah diinstal sebelumnya
Buka aplikasi apa pun yang meminta Pengguna Super untuk memastikan semuanya berfungsi dengan baik dan Anda akan disambut oleh perintah Pengguna Super yang familier:
Saya mengumpulkan daftar file firmware sebelumnya kembali ke v1.0.1(077).
Harus diselesaikan begitu saya punya waktu.
Jika terjadi sesuatu pada perangkat Anda, buka, lepaskan pelindung dari CPU, pendekkan dua pin header berikut sambil menekan tombol reset di sebelah tombol daya.
Ini akan menempatkan perangkat Anda dalam mode maskrom. Saya tidak akan membahas semua detail tentang cara memulihkan perangkat dengan tepat, namun saya akan memberi Anda informasi yang paling relevan serta saran untuk membuat cadangan semua partisi Anda sebelum melakukan modifikasi APAPUN pada perangkat Anda.
Selanjutnya instal driver maskrom (Pastikan untuk mengaktifkan driver yang tidak ditandatangani di windows kemudian gunakan alat seperti RKImageMaker
dan AFPTool
untuk membuat update.img yang dapat di-flash melalui RKDevTool (dari sini) di maskrom. RKDevTool berisi dua biner yang disebutkan di atas yang Anda perlukan untuk membuat paket pembaruan.
RKDevTool secara default hadir dalam bahasa Cina dan dengan pemeriksaan validasi firmware Anda yang kurang lebih tidak berguna yang dapat Anda matikan dengan menggunakan .ini:
[Language]
Selected=2
Dan
FW_NOT_CHECK=TRUE
RB_CHECK_OFF=TRUE
CHECK_MACHINE_MODEL=FALSE
Secara keseluruhan, mengetahui prosesnya adalah pengalaman yang menyenangkan karena Rockchip SDK dan lanskap perkakasnya sangat terfragmentasi.
File-file ini akan diperlukan untuk pembaruan lengkap.img. Anda dapat mengambilnya dari tempat-tempat seperti cadangan partisi yang Anda buat dan sebagian dari SDK atau googling yang disebutkan di atas.
File krnl ada sejak saya membuat rantai alat yang menggunakan alat bernama imgRePackerRK (unduh) untuk mengonversi file .img mentah ke format yang kompatibel dengan Rockchip (.img.krnl).
Alat ini tampaknya dibuat untuk menggantikan RKImageMaker dan AFPTool dan menjadi solusi lengkap untuk membuat Rockchip update.img. Tapi itu tidak memberikan hasil yang konsisten bagi saya.
Tapi itu mengkonversi kernel, boot dan recovery image yang kompatibel dengan pemulihan Rockchip.
Gambarboot.img.krnl vs. Gambarboot.img
Jadi saya menggunakannya untuk membuat file .krnl dengan nyaman dan kemudian menjalankan toolchain.bat saya untuk membuat update.img yang berfungsi sambil menyimpan file .img asli bersama dengan file .krnl.
move Imageboot.img Imageboot.img.tmp
move Imagerecovery.img Imagerecovery.img.tmp
move Imagekernel.img Imagekernel.img.tmp
move Imageboot.img.krnl Imageboot.img
move Imagerecovery.img.krnl Imagerecovery.img
move Imagekernel.img.krnl Imagekernel.img
copy Imageparameter.txt .parameter
Afptool -pack ./ Imagetmp-update.img
RKImageMaker.exe -RKPX30 ImageMiniLoaderAll.bin Imagetmp-update.img update.img -os_type:androidos
move Imageboot.img Imageboot.img.krnl
move Imagerecovery.img Imagerecovery.img.krnl
move Imagekernel.img Imagekernel.img.krnl
move Imageboot.img.tmp Imageboot.img
move Imagerecovery.img.tmp Imagerecovery.img
move Imagekernel.img.tmp Imagekernel.img
del Imagetmp-update.img
pause
Untuk membantu Anda selama ini, berikut juga /Image/parameter.txt
yang kompatibel :