ผู้ชาย UNIX เป็นเวลานานที่นี่ แต่ค่อนข้างใหม่สำหรับโลกของ Android อ่านต่อ.
ตอนที่ 1: การสำรองข้อมูลใหม่ (ฉันหวังว่า)
ฉันเพิ่งซื้อ Asus MemoPAD (ME103K) เมื่อเร็ว ๆ นี้; จากนั้นฉันเริ่มรูทและนำdd
รูปsystem
พาร์ติชั่นแบบอ่านอย่างเดียวไปยังการ์ด SD ภายนอก:
$ su
# dd if=/dev/block/platform/msm_sdcc.1/by-name/system \
of=/storage/MicroSD/system.img bs=1M
# ls -l /storage/MicroSD/system.img
-rw-r--r-- 1 root root 2147483648 Sep 27 13:15 system.img
ขนาด (2GiB ที่แน่นอน) ค่อนข้างน่าสงสัย - เป็นไปได้ไหมว่านี่เป็นเพราะพาร์ติชัน FAT32 บนการ์ด SD?
ไม่ไม่ - tune2fs -l
เปิดเผยว่านี่เป็นภาพ EXT4 ที่ถูกต้องซึ่งมีขนาดเท่ากับ 2GiB ซึ่งผ่านไปfsck -f
โดยไม่มีข้อผิดพลาด แต่อย่างใด และfastboot
(จากเครื่องลินุกซ์ที่ติดอยู่กับแท็บเล็ต) เห็นด้วยหลังจากadb reboot bootloader
:
linuxbox# fastboot getvar all
(bootloader) version-bootloader: 3.03
(bootloader) version-hardware: rev_c
(bootloader) variant: LEOPARDCAT 16G
(bootloader) version-baseband: H00_0.16.F_0521
(bootloader) serialno: 0a3dXXXX
...
(bootloader) partition-type:system: ext4
(bootloader) partition-size:system: 0x0000000080000000
ขนาดนั้นแน่นอน 2GB:
linuxbox# python2 -c 'print 0x0000000080000000'
2147483648
ดังนั้นทั้งหมดเป็นสิ่งที่ดี - ฉันมีการสำรองข้อมูลของภาพ ตอนนี้เพื่อทดสอบการกู้คืน
ฉันพยายามแฟลช system.img กลับไปที่แท็บเล็ต - เพื่อให้แน่ใจว่าฉันสามารถกู้คืนได้จากทุกสิ่งการสำรองข้อมูลแบบกันกระสุนที่เราทำในโลก Unix ( เช่นคืนค่าเนื้อหาของไดรฟ์ผ่านdd if=backup.image of=/dev/sdXXX
)
ทุกอย่างเกี่ยวข้องกับadb
และfastboot
ทำงานอย่างไม่มีที่ติ - ดังนั้นฉันจึงลอง ...
linux_box# fastboot devices
0a3dXXXX fastboot
linux_box# mount /dev/sdcard /mnt/sdcard
linux_box# cp /mnt/sdcard/system.img .
linux_box# fastboot flash system system.img
error: cannot load 'system.img'
อืมมม ฉันดาวน์โหลดและสร้างการandroid-tools-5.1.1
กระจายของฉันจากแหล่งที่มาเพิ่มข้อมูลการดีบัก - และขั้นตอนในการดีบักเกอร์เพื่อดูความล้มเหลวนี้:
linuxbox# gdb --args fastboot flash system system.img
...
ที่น่าสนใจ - แม้ว่าฉันอยู่ในเครื่อง 64bit เห็นได้ชัดว่ามีปัญหาที่จะเปลี่ยนขนาดของไฟล์ "เชิงลบ" (ในโลก 32bit มีขนาดไฟล์ของภาพของฉัน 2 ^ 31 ถือว่าแน่นอนลบ - -2147483648
เป็นที่แน่นอน
ตกลงดี - พวกเขาแฟลชไฟล์ภาพขนาดใหญ่ใน Android ได้อย่างไร
Google ค้นหา - ปรากฎว่าพวกเขาใช้make_ext4fs
เครื่องมือนี้ที่สร้างภาพที่สามารถแฟลชได้ ในความเป็นจริงมันเป็นส่วนหนึ่งของสิ่งที่ฉันเพิ่งรวบรวมดังนั้นฉันอาจใช้มัน:
linuxbox# mkdir /system
linuxbox# mount -o loop,ro system.img /system
linuxbox# ls -l /system
total 208
drwxr-xr-x 106 root root 8192 Sep 17 22:24 app
drwxr-xr-x 3 root 2000 8192 Sep 26 21:08 bin
-rw-r--r-- 1 root root 6847 Sep 12 16:59 build.prop
drwxr-xr-x 19 root root 4096 Sep 26 21:08 etc
drwxr-xr-x 2 root root 4096 Aug 11 22:27 fonts
drwxr-xr-x 4 root root 4096 Sep 12 16:56 framework
drwxr-xr-x 10 root root 16384 Sep 12 16:59 lib
drwxr-xr-x 2 root root 4096 Jan 1 1970 lost+found
drwxr-xr-x 3 root root 4096 Aug 11 22:18 media
drwxr-xr-x 59 root root 4096 Aug 11 22:29 priv-app
-rw-r--r-- 1 root root 126951 Aug 1 2008 recovery-from-boot.p
drwxr-xr-x 3 root root 4096 Aug 11 21:02 scripts
drwxr-xr-x 3 root root 4096 Aug 11 21:02 tts
drwxr-xr-x 11 root root 4096 Sep 26 21:08 usr
drwxr-xr-x 8 root 2000 4096 Aug 11 22:29 vendor
drwxr-xr-x 2 root 2000 4096 Sep 26 21:09 xbin
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 2048M new_system.img /system
Creating filesystem with parameters:
Size: 2147483648
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 8192
Label:
Blocks: 524288
Block groups: 16
Reserved block group size: 127
Created filesystem with 2666/131072 inodes and 375014/524288 blocks
เยี่ยมมาก - ดังนั้นฉันจึงสามารถสร้างอิมเมจระบบจากโฟลเดอร์เก่าแบบธรรมดาได้ ท้องฟ้าจะเป็นขีด จำกัด ของฉัน - ฉันจะสามารถเพิ่มสิ่งที่ฉันต้องการในภาพนี้
มาเผามันกันเถอะ ...
linuxbox# fastboot flash system new_system.img
erasing 'system'...
OKAY [ 0.064s]
sending 'system' (2088960 KB)...
^C
ฉันรอเป็นเวลา 1 ชั่วโมงก่อนกดปุ่ม Ctrl-C และต้องใช้พลังงานรอบแท็บเล็ตซึ่งบูตกลับมาในโหมด fastboot
มันดูไม่ดีเลย
ถ้าฉันสร้างภาพที่เล็กลงจะเป็นอย่างไร บางที 2GB อาจเป็นปัญหาอย่างใดอย่างหนึ่งและพาร์ติชันนี้ไม่ได้ใช้อย่างเต็มประสิทธิภาพ - มีพื้นที่ว่าง:
linuxbox# ../extras/source/extras/ext4_utils/make_ext4fs \
-l 1536M new_system.img /system
linuxbox# ./fastboot flash system system.img
erasing 'system'...
OKAY [ 0.065s]
sending 'system' (1572864 KB)...
OKAY [ 51.039s]
writing 'system'...
OKAY [235.080s]
finished. total time: 286.183s
ตกลงสิ่งนี้ดูมีแนวโน้มมาก (และใช้เวลาเพียง 5 นาที) ฉันเดาว่าตอนนี้ฉันสามารถรีบูตและทุกอย่างควรเป็นปกติใช่ไหม
ไม่ :-)
ฉันไม่คิดอุปกรณ์ bricked ชั่วคราวตราบเท่าที่ฉันไม่ได้รับการควบคุมมันในที่สุด (เครื่องที่ว่าผมไม่ได้ต้นแบบของการเป็นเครื่องผมไม่สนใจที่จะทำงาน ;-)
ความคิดเห็นใด ๆ เกี่ยวกับสิ่งที่ฉันทำผิดและฉันจะแก้ไขได้อย่างไร
ขอบคุณล่วงหน้า.
PS ฉันตรวจสอบหน้าสนับสนุน Asus สำหรับแท็บเล็ตของฉัน - พวกเขาให้แหล่งที่มาสำหรับเคอร์เนลเท่านั้นและไฟล์ Over-the-air .zip ในทางกลับกันมีการสำรองข้อมูลระดับระบบไฟล์จากรูท - เช่นมีsystem
โฟลเดอร์อยู่ในนั้นเป็นเพียงโฟลเดอร์ไม่ใช่รูปภาพไม่ใช่ไฟล์system.img
ที่ฉันสามารถแฟลชได้ - ดังนั้นมันจึงไม่ช่วยฉันจริงๆ
ตอนที่ 2: การโจมตีของ Custom Boots
ในกรณีที่ไม่มีอะไรrecovery.img
จาก Asus (ทำไมผู้ผลิตถึงต้องการเผยแพร่ fastboot-flashable recovery.img
ทำไมต้องเป็น ... ) และไม่มีภาพกู้คืนจากเว็บไซต์ CWM และ TWRP ที่คล้ายกัน ... ฉันออกจากการต่อสู้ทั้งหมด คนเดียว
โชคดีที่ไฟล์อัพเดทแบบ over-the-air จาก Asus มีอยู่ข้างใน ...
linuxbox# unzip -l /opt/Asus/firmware/UL-K01E-WW-12.16.1.12-user.zip |\
grep boot.img$
7368704 2011-03-22 11:21 boot.img
... อิมเมจการบูตของแท็บเล็ต ตอนนี้อาจจะ - บางที - ฉันสามารถทำอะไรกับสิ่งนี้
linuxbox$ mkdir rootfs
linuxbox$ cd rootfs
linuxbox$ abootimg -x /path/to/boot.img
linuxbox$ ls -l
bootimg.cfg
initrd.img
zImage
การขยาย ramdisk ...
linuxbox$ mkdir initrd
linuxbox$ cd initrd
linuxbox$ gzip -cd ../initrd.img | cpio -ivd
...
linuxbox$ vi default.prop
ฉันตั้งค่าdefault.prop
ให้รูทเมื่อเคอร์เนลบูท:
ro.secure=0
ro.debuggable=1
ro.adb.secure=0
androidboot.selinux=disabled
ฉันยังคัดลอก/system/bin/sh
( จากแฟ้ม over-the-air Asus .zip ) /sbin/sh
ลง ฉันทำเช่นเดียวกันกับbusybox - เครื่องมือที่มีประโยชน์มาก
และรีบูต bootedimg ...
busybox$ find . | cpio --create --format='newc' | gzip -9 > ../initrd.custom.gz
busybox$ cd ..
busybox$ abootimg --create ../new_boot_busybox.img \
-f bootimg.cfg -k zImage -r initrd.custom.gz
abootimg
จริง ๆ แล้วล้มเหลวในครั้งแรกที่ฉันเรียกใช้งานนี้เนื่องจากbootimg.cfg
ต้องมีการปรับปรุง - bootsize
พารามิเตอร์ต้องมีการเปลี่ยนแปลงเนื่องจากแพคเกจมีขนาดใหญ่กว่าตอนนี้ abootimg
รายงานสิ่งที่ต้องการเพื่อให้ง่ายพอ
และตอนนี้ฉันบูตภาพที่กำหนดเองของฉัน ...
linuxbox# fastboot boot new_boot_busybox.img
... และเป็นพยานต่อไปนี้ ...
linuxbox# adb logcat
- exec '/system/bin/sh' failed: Permission denied (13) -
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
อืม ... บางที adbd ไม่ทำงานเหมือนรูท?
linuxbox# adb root
restarting adbd as root
linuxbox# adb shell
- exec '/system/bin/sh' failed: Permission denied (13) -
ไม่เป็นไร ... ฉันต้องแก้ไข adbd และ patch / system / bin / sh ให้เป็น / sbin / sh (ฉันคัดลอก / system / bin / sh จากอิมเมจ OTA ไปยังรูทของการเริ่มต้น): รีบูต fastboot ...
linuxbox# adb shell
- exec '/sbin/sh' failed: Permission denied (13) -
ยี้ สิ่งนี้สามารถทำอะไรได้บ้าง?
linuxbox# adb pull /proc/partitions
15 KB/s (1272 bytes in 0.079s)
มันคือ ... มาดูกัน:
linuxbox# adb pull /proc/mounts
16 KB/s (1358 bytes in 0.079s)
linuxbox# grep system mounts
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
ตกลงดังนั้น / ระบบถูกเมาท์ ฉันเห็นสิ่งที่อยู่ภายใน
linuxbox# adb pull /system
remote object '/system' does not exist
อะไร ... บางทีฉันสามารถตรวจสอบสิ่งที่ / proc / kmsg มี (สิ่งที่ "dmesg" จะออก)
linuxbox# adb pull /proc/kmsg
failed to copy '/proc/kmsg' to './kmsg': Operation not permitted
ไม่ฉันต้องรูทเพื่อทำสิ่งนั้น
linuxbox# adb push /sbin/sh /system/bin/sh
failed to copy '/sbin/sh' to '/system/bin/sh': Permission denied
และนั่นก็เช่นกัน
นี่มันช่างเป็นปริศนา ...
fastboot
จะยังคงทำงาน (ตอบสนองต่อการร้องขอได้ดี) และฉันจึงสามารถเผาไหม้ภาพการกู้คืนใด ๆ (a) ฉันค้นหาและพบว่าไม่มีภาพการกู้คืน CWM หรือ TWRP สำหรับ ME103K - ฉันไม่คิดว่ามี "สามัญ" ที่คุณอ้างถึงมีหรือไม่ (b) การปิด, การกดปุ่มเพาเวอร์ + ลดระดับเสียงไม่ได้ทำให้อิมเมจการกู้คืน - ฉันยังคงได้รับสถานะ fastboot โมคิดทำไม ในความเป็นจริงฉันไม่เคยเห็นกระบวนการกู้คืน (อยากรู้อยากเห็นที่จะเห็นมัน) ...
fastboot boot <FILE>.img
) จากนั้นจึงแฟลชไฟล์ ZIP ทั้งหุ้น หรือดูว่ามี (บนเว็บ) ไฟล์ ROM หุ้นซึ่งสามารถแฟลชได้โดยใช้ fastboot
unzip -l UL-K01E-WW-12.16.1.12-user.zip | grep recovery
แสดงเชลล์สคริปต์เพียงไม่กี่ - ฉันจะได้ดู แต่ไม่มีแน่นอนrecovery.img
) Googling ไม่ได้ช่วยอะไร - ไม่มีภาพกู้คืนของแท็บเล็ตนี้ทุกที่ ... เดาสิฉันจะต้องรอจิตวิญญาณที่ใจดีให้ไปที่dd
พาร์ติชั่นการกู้คืนและแชร์?