咳咳...今天要來當一下 hacker
我們知道 Htc 把 Htc Sense Input 推上 Google Play 了
但是只有 Htc device 才能下載
如果你之前是 Htc 愛用者,對他們手機失望透頂了,唯獨對他們的鍵盤情有獨鍾
換到別家手機,發現打字不習慣怎辦?
沒關係,哥來教你
首先,把你的舊 Htc 中的 /system/etc/permissions/com.htc.software.market.xml 拉出來
push 到一支有 root 過的手機裡,一樣放在 /system/etc/permissions/ 下
重開機後就可以從下載了 XD
Htc sense input 分成成主程式和語言包
開心的話就把語言包都抓下來安裝
下載完後發現幹你娘不能開啟,會擋非 Htc Device
所以還要再來破解一下
先將主程式 APK 從 root 手機中拉出來 (這邊以 Android 5.0 為例)
adb pull /data/app/com.htc.sense.ime-1/base.apk HtcSeseInput.apk
然後準備一下以下工具
Dex2Jar: 把 dex 轉成 jar 擋
https://code.google.com/p/dex2jar/
JdGUI: 查看 jar 擋的 java code 怎麼寫
http://jd.benow.ca/
Sign Tool: 將 Apk 重新 sign key
http://developer.android.com/tools/publishing/app-signing.html
bakesmail.jar & smail.jar: 把 dex 轉成 smail code & 把 smali code 轉回 dex 的工具
https://code.google.com/p/smali/downloads/list
然後就可以開始我們的旅程了
首先,用解壓縮工具(我是用 7-Zip) 把 classes.dex 從 HtcSeseInput.apk 中拉出來
然後,把這個 dex 擋餵給 dex2jar
dex2jar.bat classes.dex
做完後會發現目錄下多了一個檔案叫 classes_dex2jar.jar
用 JdGUI 開啟這個 classes_dex2jar.jar,就會發現裡面的目錄結構如下
找到兩個地方:
com.htc.sense.ime.settings.KeyboardSettings 和 com.htc.sense.ime.HTCIMEService 中有這段 code
所以改法就很簡單,讓 isHTCDevice() always 回傳 true 就好
作法如下:
利用 backsmali.jar 將 dex 檔反組譯成 smali 檔
java -jar baksmali-2.0.3.jar -x classes.dex
然後目錄下會多出一個 out 資料夾,結構與剛剛用 JdGUI 看到的一樣
找到兩個對應的 smali檔案,組語碼如下
.line 2609
:cond_2b
invoke-static {}, Lcom/htc/sense/ime/NonAndroidSDK$HtcAdded;->isHTCDevice()Z
move-result v0
if-nez v0, :cond_8e
為了讓 isHTCDevice() always 回傳 true,在 move-result v0 下面加上
const/4 v0, 0x1
兩個檔案都改好後,再將 smali 檔編回 dex
java -jar smali-2.0.3.jar -o classes.dex out
最後用 7-zip 將 Apk 中原本的 classes.dex 取代掉,再重新 sign key 就可以囉!
請享用~