Tag: zenfone


How to get recovery.img?

大部分的 Android 手機可以透過 dd 把 recovery partition dump 出來,比如 PadFone S 可以使用

dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=/sdcard/recovery.img

取得 recovery.img。

但像 ZenFone 這種放在隱藏 partition 的該怎麼提取呢?其實可以透過 OTA package 或者原廠 ROM 的幾個檔案還原。

一般來說 recovery.img 不一定會完整包含在 OTA package,因為他的內容與 boot.img 相似,通常只差幾個小檔案,所以廠商大多透過 patch 的方式在升級後寫入新的 recovery。我們可以從 OTA package (或者 ROM) 裡面找到 boot.imgrecovery/etc/install-recovery.shrecovery/recovery-from-boot.p,這幾個便是主要產生 recovery 的檔案,透過對 boot.img 的 patch 可以讓 OTA package 省去不少空間。那我們要如何從這兩個檔案與 boot.img 還原 recovery.img 呢?Android 提供了一個工具叫 applypatch,參數如下:

applypatch     

origin_image_name 就是準備拿來 patch 的基礎檔案 boot.img,target_image_name 自然是我們想要的 recovery.img,而 target_image_sha1 為 recovery 的 SHA1 值,target_image_size 為 recovery 的大小 (bytes),patch_image_name 即是 recovery-from-boot.p 這份修補檔,而 patch_sha1 就是修補檔的 SHA1 值。而這些數值其實都可以在 install-recovery.sh 裡面找到,以 ZenFone 5 1.17.40.16 WW 版為例:

#!/system/bin/sh
update_recovery --check-sha1 0d46024fcdba65dc82ca5fb568eccf36885de815 \
                --src-sha1 d8d2bbfd8dd3eaa648073876a229ac030ebdc802 \
                --tgt-sha1 7cf95a376c8d8b0f47a9bd9062851161fac657d2 \
                --tgt-size 11332608 \
                --patch /system/recovery-from-boot.p

其中 tgt-sha1 為 recovery.img 的 SHA1,tgt-size 為 recovery.img 的大小,而 src-sha1 為 recovery-from-boot.p 的 SHA1,因此我們可以得到產生 ZenFone 5 1.17.40.16 WW 版的 recovery 命令為:

applypatch boot.img recovery.img 7cf95a376c8d8b0f47a9bd9062851161fac657d2 11332608 d8d2bbfd8dd3eaa648073876a229ac030ebdc802:recovery-from-boot.p

所以如果我們把 boot.img,recovery-from-boot.p 放在同個目錄下,那麼我們可以把手機接上,輸入下面的指令取得 recovery.img:

adb push boot.img /data/local/tmp
adb push recovery-from-boot.p /data/local/tmp
adb shell 'cd /data/local/tmp; applypatch boot.img recovery.img 7cf95a376c8d8b0f47a9bd9062851161fac657d2 11332608 d8d2bbfd8dd3eaa648073876a229ac030ebdc802:recovery-from-boot.p'
adb pull /data/local/tmp/recovery.img

至於拿出 recovery.img 可以幹嘛?切換不同區域的 ROM 或者在某些緊急狀況下可以還原原廠的 ROM。

CWM Recovery for ZenFone 5 (POC)

警告:這篇是給 DEV 參考用,如果沒有相關基礎知識,使用後手機無法開機,本人不會幫忙解決。
雖然說手機尚未 unlock,隱藏的 partition 也無法透過 dd 寫入,但很久以前用過 Xperia Mini Pro 也是類似的狀況,但 XDA 的大神們還是想辦法搞了個 CWM recovery,理論上 ZenFone 也可以透過同樣的方式使用 CWM Recovery,所以花了點時間做個 POC (Prove of concept)。

檔案在這:zenfone_5_cwm_installer.zip,另外有 zenfone_5_cwm_update.zip,可以在刷入原廠 ROM 之後再把這個 POC 刷回去,或者參考打包用。原始檔案我都放在 github:https://github.com/shakalaca/zenfone_5_cwm

先決條件:
- 手機有 root
- 電腦有裝 adb
安裝方式:
- 解開 zenfone_5_cwm_installer.zip
- 執行 install.bat
使用方式:
- 開機時注意手機上面的指示燈,當紅燈亮起時,按一下音量大或小,沒意外就可以看到 CWM recovery 的選單了
- 目前使用的版本為 6.0.2.8,這是從 Samsung Galaxy Tab 3 (P5210) 的 CWM Recovery 抓來的版本
操作上會有點 lag,太大的檔案也無法 apply,不過因為是 POC 也就不用太強求了,有興趣的可以想想看怎麼讓它變得可用。:)

[Root] Downgrade ZenFone from 1.15.40.35_20140715

2014-07-20 Update: 補上 fastboot 步驟,抱歉少了這一步是無法修改 recovery 的 ^^
這一版的升級做了一個不算小的修改:在 recovery 的 default.prop 將 ro.build.date.utc 的數值調小:

ro.build.date.utc=12684704

這樣的修改會導致手機無法降版,因為目前官網上抓下來的 ROM file 裡面的 script 最前面這麼寫:

assert(greater_than_int(getprop("ro.build.date.utc"), 1392739200));

雖然應該沒多少人喜歡換版本,但這邊還是筆記一下退版的方法,root 限定。又因為這樣的退版如果沒處理好可能導致之後無法升級軟體版本,我就只講方法不做懶人包了。:P
- 下載舊版 (比如 1.14.40.50) 的 ROM file,解開後在 recovery 目錄下找到 boot.img,recovery-from-boot.p 與 etc/install-recovery.sh
- 透過 fastboot 刷入 boot.img (fastboot flash boot boot.img)
- 修改 install-recovery.sh,把 /system/recovery-from-boot.p 換成 /data/local/tmp/recovery-from-boot.p
- 將這兩個檔案透過 adb push 到 /data/local/tmp
- 進去手機以 root 執行 install-recovery.sh

接著就可以依照原先的方式降版了。

[Root] SOP when failed to apply OTA update

之前發在 Mobile01,轉回來做個記錄..
不少網友 OTA 更新失敗都是因為 Root 後就把系統檔案修改或者刪除,這邊提供一個標準還原流程。(因為已經被問到爛了)
下載符合手機版本的原廠 ROM
ZenFone 5 請到這邊找 http://www.asus.com/tw/Phones/ASUS_ZenFone_5/HelpDesk/
ZenFone 6 請到這邊找 http://www.asus.com/tw/Phones/ASUS_ZenFone_6/HelpDesk/
從 驅動程式及工具程式 進去, 選 Android 就可以看到一堆列表.
解開下載的檔案,會得到格式如下的壓縮檔:

UL-ASUS_T00?-$$-#.##.##.#-user.zip

如果手機是 ZenFone 5,? 為 F 或 J;如果手機是 ZenFone 6,? 為 G。
$$ 代表區域,可能是 TW (台灣版),CHT (中華客製版),CN (中國版)或 WW (全球版),注意要跟手機的版本一樣。
而 #.##.##.# 為版號,也要跟手機的版本一致。
把剛剛下載回來的檔案,版號的部分 (#.##.##.#) 改為 10000,所以會產生類似 UL-ASUS_T00F-TW-10000-user.zip 這樣的檔案名稱。
手機透過 usb 傳輸線連接到電腦,在檔案總管可以找到 ZenFone 的內部儲存空間,把檔案丟進去。
傳輸完畢,先 unroot。
拔開傳輸線以後,會出現升級提示,確認手機電力充足,按確定即可重置作業系統,這個動作不會清除手機資料。
* 還原完畢,root 後等 OTA 更新出來,按保留 root 接著套用更新。如果安裝新版的 Root ZenFone 直接啟用 OTA 生存模式,再套用更新即可。
然後再一次呼籲,root 後不喜歡的內建軟體可以停用,但不要刪除否則 OTA 更新一定會失敗。至於什麼 Lucky patcher 會改到 framework 的鬼東東,除非你意識清楚否則 OTA 更新一定會失敗。

[Root] RootZenFone 1.3r

一直想更新很久了, 但無奈手邊事情太多, 再加上有些功能考慮要獨立出來做, 所以程式碼寫了又砍砍了又寫.. 最後決定只先加入最重要的功能: OTA 生存模式.
連結在這: http://goo.gl/YuqeGH (Dropbox)
分流在這: http://goo.gl/oCIGN0 (Mega)
已經 root 的朋友安裝後直接點 "啟用 ROOT 生存模式 (升級後自動保留 ROOT)", 還沒 root 的朋友這一版在 root 後會自動啟用該功能.


因為這是個會修改系統檔案的 hack, 所以如果之後 OTA 更新失敗, 請依照下面的 SOP 進行:
0. 先確定還有收到 OTA 更新通知.
1. 開啟 RootZenFone, 解除 ROOT 生存模式 (將修改過的系統檔案還原)
2. 狂點 “ 已經 root 囉 :) “ 就會出現舊的 “ 升級後保留 ROOT “ 按鈕

3. 點選 “ 升級後保留 ROOT “
4. 套用 OTA 更新
5. 快樂更新系統, 並留言給我更新軟體 :p

[Root] Show Navigation Bar

有人覺得 ZenFone 的實體按鈕沒有背光不方便,這邊提供一個顯示 Navigation Bar 的方法,只是有點擠..

mount -o rw,remount /system
echo qemu.hw.mainkeys=0 > /system/default.prop
chmod 644 /system/default.prop

重開機之後可以看到

4.3 (?) 因為某次 exploit 之後,對 property 的管制變嚴了,導致 /data/local.prop 無法設定某些值,還好 /system/default.prop 仍然可用,在不修改 /system/build.prop 的前提下,可以把一些設定塞到這邊。

Reference: https://android.googlesource.com/platform/frameworks/base/+/master/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

[Root] Connect phone to internet via USB

電腦透過 USB 連接線使用手機的網路上網稱 USB Tethering,而反過來手機透過 USB 連接線使用 PC 的網路上網,稱作 Reverse USB Tethering。前幾天在論壇上面看到有人提出 ZenFone 能否使用 Reverse USB Tethering 的問題,覺得頗有意思,研究了一個晚上總算整理出一套流程,我所使用的手機是 ZenFone 5,版本為 Android 4.3。

  • 如果用的是 Mac,請先安裝 RNDIS Driver: HoRNDIS
  • 手機先 root。
  • 如果想讓瀏覽器以外的 app 使用網路,大部分狀況透過安裝 Xposed & HackConnectivityService 即可解決。

步驟:
1. 手機連接到電腦上,到設定 -> 更多內容 -> 網路共用與 Wi-Fi 無限基地台 -> 點選 USB 網路共用。
2. 如果你用的是 Mac,打開 System Preferences -> Network,應該可以看到 Android 這個連線裝置出現,或者點左下角的 + 新增。

預設是 DHCP 取得 IP 位址,請耐心等候他出現 192.168.42.x 的值,再切換到 System Preferences -> Sharing,點選 Internet sharing。右邊的畫面中 Share your connection from: 請選你目前的網路連線裝置,比如 Thunderbolt Ethernet 或者 Wi-Fi;To computers using: 勾選 Android (就是剛剛看到的裝置)。

2. 如果你用的是 Windows 7,先等系統安裝好相關的驅動程式。

接著到控制台 -> 網路和網際網路 -> 網路連線,可以看到會多出一個區域連線 (在這邊是 "區域連線 2")。

在你預設的網路連線介面上按右鍵選共用 (在這邊是 "區域連線"),點選最上面的 "允許其他網路使用者透過這台電腦的網際網路連線來連線(N)",下面的 "家用網路連線" 請選擇前面多出來的區域連線 (在這邊是 "區域連線 2")

3. 此時電腦打開 Terminal 或者命令提示列,透過 adb shell 連接手機,su 為 root。
4. 依序執行下面的代碼:(或者抓 reverse_usb_tether.sh)

netcfg rndis0 dhcp

讓手機取得新的 IP 位址可以連線出去。

ndc resolver flushif rndis0
ndc resolver flushdefaultif
ndc resolver setifdns rndis0 8.8.8.8 8.8.4.4
ndc resolver setdefaultif rndis0

設定 DNS,不過似乎大部分的 app 都還是無法連線,得靠下面這行

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53

其中 8.8.8.8 可以換成你喜歡的 dns server (比如 168.95.1.1)

到這網路已經可以正常使用,不過某些 app 卻無法正常運行,比如 Play Store 無法下載 app/Google Drive 無法開啟文件.. 原因是這些 app 都會檢查是否有 Wi-Fi 或者數據網路的連線。嘗試過很多偏方,到目前為止都沒有 " 完美 " 的解決方案 (Android 4.3 以上的版本多了一些檢查),安裝 Hack Connectivity Service (得先安裝 Xposed 並啟用) 是一種解法,只是你在使用前得先有可連線的 Wi-Fi,關閉後再跑一次前面的流程,最後打開該 app 選擇 Hack 分類下的 Wifi 即可。

Reference: [Tool][Windows Only][Root] Android Reverse Tethering 3.19

Use PS3 controller on ZenFone

簡單筆記一下如何在 ZenFone 上使用 PS3 手把 :)

預備物品:
- ZenFone (Rooted)
- PS3 手把
- Mini usb 連接線
- 可外接電源的 OTG 線 (非必須)

預備軟體: (這邊使用 Sixaxis Controller)
- 如果你沒有 OTG 線, 請在電腦裝 SixaxisPairTool
- 手機裝 Sixaxis Controller

步驟: (如果沒有 OTG 線)
1. 手機先安裝 app,開啟後點選 Start,畫面下方會出現手機的 BT 位址,記下來。
2. 電腦安裝 Sixaxis Pair Tool,完成後連接 PS3 手把。
3. 把剛剛記下來的 BT 位址寫入對話框裡面,點選 Update 更新 PS3 手把連線的設定。
4. 完成後拔開連接線,等 PS3 手把燈熄滅。
5. 按 PS 鍵開啟手把電源,手機上的 app 如果顯示 "Client 1 connected" 代表成功。
6. 請參考 eprice 上的文章 用 PS3 手把玩遊戲:Sixaxis Controller 軟體篇 設定 app。

步驟: (如果有 OTG 線)
1. 手機先安裝 app,開啟後點選 Start。
2. 將 PS3 手把與手機透過 OTG 線連接,OTG 線記得接上電源。
3. 點選 app 上的 Pair,更新 PS3 手把連線的設定。
4. 完成後拔開連接線,等 PS3 手把燈熄滅。
5. 按 PS 鍵開啟手把電源,手機上的 app 如果顯示 "Client 1 connected" 代表成功。
6. 請參考 eprice 上的文章 [用 PS3 手把玩遊戲:Sixaxis Controller 軟體篇](www.eprice.com.tw/mobile/talk/12

差別只在於你想透過手機還是電腦把手機的 BT 位址寫入 PS3 手把 :)

最後補上一些設定畫面,開啟後會先詢問是否要設定鍵盤

反正遲早都要使用,把 Sixaxis Controll 勾起來吧

使用前會要求 Root 權限

點選 Start 時,偶爾會出現 Bluetooth FC 的畫面,別理他

點選 Pair 把手機的 BT 位址寫入手把

接著會彈出 USB 設定,點確定就對了

完成後會顯示 "Master address updated"

接著開啟手把電源 (PS 鍵), 如果出現 "Client x connected" 代表成功連線囉!

此時點選 "Change IME" 測試看看

動一下手把的上下左右,如果看到淺色框框跑來跑去代表真的有抓到囉

[Root (Optional)] 讓 ZenFone 讀取隨身碟

2014-06-04 Updated:
經網友指正, 其實只要供電沒問題, 就算沒 root 也可使用, 目前可以搭配下列軟體:

OTG Disk Explorer Lite # 讀取較大檔案需付費版本
Nexus Media Importer

不過介面上還是 root 搭配內建檔案管理員比較方便, 看個人喜好囉.

ZenFone 所使用的 Intel solution 其實有支援 OTG, 但無奈 ZenFone 的板子可能出於成本考量, 又或者上層實作需要多一些時間, 所以少拉幾條線 (推測) 以致於無法對外接 USB 裝置供電, 導致無法讀取隨身碟 (最多人想要的功能) 這邊就不談 OTG 的原理與應用, 直接來看怎麼讓 ZenFone 可以讀隨身碟吧.

  • 首先手機得 root, 並且安裝相關工具, 我推薦使用 StickMount
  • 再來你得買一條有附額外 USB 接頭的 OTG 線, 像這樣:

    所以接下來的使用就很容易, 把隨身碟與手機透過 OTG 線連接, 那一條額外的 USB 線接上電源 (ZenFone 的手機充電器即可)
    Setup
    等著奇蹟發生
    USB stick insertion prompt
    沒意外點選確定他就會自動掛載了, 或者也可以先打開 StickMount, 插入隨身碟後點選 Mount
    Mount USB stick
    接著打開檔案管理員, 找到 usbStorage, 點進去會看到 sd?1, 裡面就是隨身碟的資料囉.
    Open File Manager
    用完記得先 Unmount
    Unmount USB Stick

Reference

[Root] 讓 ZenFone 5 也有單手操作模式

雖然說這功能只有 ZenFone 6 有, 但兩者的軟體大同小異, 追蹤一下要實現很簡單.
asus.software.whole_system_onehand.xml 丟到 /system/etc/permissions/ (記得 chmod 644) 重開機以後先去重設快速設定清單

接著就會看到單手操作出現囉

畫面會變成這樣..

對於某些覺得 5 吋還是很大的人來說, 這種小螢幕模式還挺便利的 :)