Linux手機DIY.夏新E600和飛利浦968初探
草木瓜 更新於 2006-10-21
一、序
無意中被小葉拉來,協助破解夏新E600的第三方軟體安裝。雖經過眾位兄弟的齊心
努力,然至今卻未能取得突破性進展。失敗了無數次,也否定了無數次設想和可能。一
個人的能力有限,所以我想對這幾天的努力作一次系統的總結,給眾位兄弟參考。也希
望大家能不斷提出自已的想法和見解。
在此特意感謝長鴻小葉,搞搞震,鐵蛋,新號碼,九,電子等很多弟兄不知疲倦的
反覆試機。
二、重要提示
為了方便更好的理解本文,提供下面鏈結。
全系列的文章地址,手機應用開發專欄:http://blog.csdn.net/liwei_cmg
相關的重要資源的:http://play.younet.com/view.php?tid=24045
三、手機背景簡介
夏新E600和飛利浦968,這兩款手機系統相當類似,且皆是採用Linux作業系統,與
E680系列一樣是基於Qt圖形庫。
其中飛利浦968存在一款能完美安裝並且啟動並執行Qnes模擬器。而夏新E600目前為止只
發現一個能安裝的第三方軟體(即上面所說的Qnes),不過不能運行。關於以上兩款手機的
破解資料幾乎是找不著的。一切需要從0開始。
目前想法是先找出Linux手機系統運行Shell指令碼的方法。
我覺得這點十分重要,一旦指令碼能運行成功,什麼目錄結構,進程資訊,庫檔案等等
甚至Linux重要的一切就輕而易舉呈現在我們面前。
四、夏新E600目前狀態
夏新E600如同是在雲裡霧裡。光靠一個qnes.prg這個能安裝不能啟動並執行這個線索就想
破解第三方軟體的問題,實在不是一般的誇張。
我們現在只知道E600也是Linux系統,卻連Rom結構,目錄結構都毫不知曉,更別說具
體的檔案內容。所以想通過升級軟體來實現破解是非常難的,不過這個方向的研究卻會帶
來很多有用的資訊。
qnes.prg在E600上安裝是十分省事的,隨便用普通工具(alzip或7zip)解開包,替換
可執行程式或者精簡包內容(去掉nes檔案),再打包,是都可以正常安裝的,檔案解壓得
一個也不少,不必關心打包的順序(預設是按拼音順序排列)。
安裝的唯一問題就是要注意Install.conf,對我們來說,檔案裡面那一堆數子簡直就
是一堆天書,稍作修改就安裝失敗。而且現在還沒有人能提供這方面的有用資訊。
目前Install.conf除原檔案外,只有下面的檔案內容才能被正常安裝。這也是去除
nes檔案的conf。
41041#32310#C8000_APP_INSTALL:16313139318601136
qnes
26
<BEGIN_TAG>
<SHELL_SEPARATOR>
<Install-Begin>
11107#/mnt/doc/cec_local/data/qnes/NULL_FILE
12894#/mnt/doc/cec_local/data/qnes/qnes.png
9588##/mnt/user/cec/apps/6Self-Defined/qnes.desktop
40882#/mnt/user/cec/i18n/zh_CN/qnes_zh_CN.qm
46853#/mnt/user/cec/i18n/zh_TW/qnes_zh_TW.qm
16052#/mnt/doc/cec_local/bin/qnes
<Install-End>
<SHELL_SEPARATOR>
<END_TAG>
8192
在安裝檔案中的qnes.deskop也是起作用的,原理於E680十分類似,可以隨意修改表徵圖
和名稱,不過就是在安裝之後,系統不能運行Exec中的qnes,這讓人十分鬱悶。
[Desktop Entry]
Comment=QNes
Exec=qnes
Icon=common/menu/C8000_menu_user_define_Games.png $修改圖片路徑(絕對路徑)是有效
Type=Application
Name=QNes
Name[en]=QNes
Name[zh_CN]=模擬器 #修改名稱是有效
Name[zh_TW]=模擬器
我曾嘗試將qnes.desktop檔案Exec=qnes一項的qnes改為絕對路徑:
Exec=/mnt/doc/cec_local/bin/qnes
不過安裝後運行會出現找不到模擬器的提示,且無法卸載。這時只有重新安裝正常包
再覆蓋下,就恢複正常了。
這說明desktop檔案的用法和E680系列是一致的,在安裝過程中需要讀取檔案的相應
資訊。
至於系統不能運行Exec中的qnes,我懷疑是E600本身的系統限制了執行外部程式。
另外也有可能E600執行qnes時,找不著/mnt/doc/cec_local/bin這個環境變數(預設是只有
/bin這個$PATH環境變數的)。不管是哪一種原因,現在解決起來都十分複雜,沒有頭緒。
以下是新號碼分析出來的,E600存在的目錄:
手機
/mnt/doc/user_local/
/mnt/doc/user_local/audio/
/mnt/doc/user_local/photo/
/mnt/doc/user_local/video/
/mnt/doc/user_local/java/
/mnt/doc/user_local/ebook/
/mnt/doc/user_local/misc/
/mnt/doc/user_local/icon/
/mnt/doc/cec_local/data/
/mnt/doc/cec_local/data/todo
/mnt/doc/cec_local/i18n/
/mnt/doc/cec_local/lib/
/mnt/doc/cec_local/plugins/
/mnt/user/cec/apps/6Self-Defined/
卡
/mnt/sd
我現在只希望能在968上找到突破點。用968系統再分析E600不能運行qnes的真正原因。
目前E600的研究確實是限入了困境,也希望大家能找到突破點。
[最後更新於2006-10-20]
五、目前飛利浦968研究狀態
飛利浦968希望就大多了,畢竟968還能有實實在在安裝運行第三方軟體。能運行可執行
程式就有很大可能運行shell指令碼。
qnes.prg這個軟體是去年不知名的人留下的,到底是哪來的無從得知,我們能面對的只
有這一個3M多的檔案。
下面我用具體的執行個體來一步一步說明研究進度以及得出的結論或猜想。
--------------------------------------------------------
樣本一.Windows下用普通工具(alzip,7-zip)解開qnes.prg,然後不作任何修改,再打
成tar包,讓968手機使用者安裝,提示安裝失敗。
原因:之所以安裝失敗,是因為qnes.prg本身的打包順序和qnes.prg裡面的Install.conf
檔案順序是完全一致的。普通工具打包解包就破壞了原有的順序(再打包是按照拼音順序
排列)。所以不能正常安裝。
--------------------------------------------------------
樣本二.Windows下將qnes.prg改名為qnes.tar,用普通工具(alzip)開啟,將一個shell
指令碼命令為qnes,拖到alzip的開啟介面,系統會提示覆蓋,覆蓋掉原有的qnes可執行程式。
再改名qnes.prg,讓968安裝,提示成功,要求重啟手機,但不能夠正常運行。
(我推測這時手機裡面並沒有qnes這個shell指令碼。)
原因:普通工具修改後的打包檔案不能被飛利浦968系統識別,用UltraEdit開啟修改
後的包會發現,後更新的qnes檔案段(在檔案的最後)描述資訊與原來的有差距。所以手機
系統只解壓原來未更新過的檔案(即除qnes以外),單單漏掉了我們覆蓋的Shell指令碼。所
以不會運行成功。
--------------------------------------------------------
樣本三.經過上面兩個樣本,看出了原包qnes.prg是真不簡單,我用UltraEdit開啟仔
細看了看,發現原包是Linux下tar命令所為,並且所有檔案owner和group全是tq,我就想
到在Linux下完成打包操作。
將虛擬機器Linux啟動,建立使用者組tq和使用者tq,複製qnes.prg到Linux並解開tar包的所
有檔案,修改其中Install.conf如下:
41041#32310#C8000_APP_INSTALL:16313139318601136
qnes
26
<BEGIN_TAG>
<SHELL_SEPARATOR>
<Install-Begin>
11107#/mnt/doc/cec_local/data/qnes/NULL_FILE
12894#/mnt/doc/cec_local/data/qnes/qnes.png
9588##/mnt/user/cec/apps/6Self-Defined/qnes.desktop
40882#/mnt/user/cec/i18n/zh_CN/qnes_zh_CN.qm
46853#/mnt/user/cec/i18n/zh_TW/qnes_zh_TW.qm
16052#/mnt/doc/cec_local/bin/qnes
<Install-End>
<SHELL_SEPARATOR>
<END_TAG>
8192
同時將qnes可執行程式用同名的shell指令碼覆蓋,代碼如下:
#!/bin/bash
ls > /mnt/doc/user_local/qnes/ls.txt
ps -ef > /mnt/doc/user_local/qnes/ps.txt
移除所有.nes檔案,保持與修改的Install.conf一致。將現有全部檔案執行命令:
chown tq *
chgrp tq *
然後在Linux下,用tq使用者打包,命令如下:
tar cvf new.tar Install.conf #建立檔案包
tar -r qnes.png -f new.tar #將檔案添加到包中
tar -r qnes.desktop -f new.tar
tar -r qnes_zh_CN.qm -f new.tar
tar -r qnes_zh_TW.qm -f new.tar
tar -r qnes -f new.tar
完成new.tar包。複製到Windows下,準備安裝。這時我再用UltraEdit開啟new.tar
時,發現與原有的包qnes.prg還是有一定的區別。
先不管了讓鐵蛋安裝,這個包就是10.19快下班的時候鐵蛋安裝的最後一個包。不出
意料,的確能安裝。然安裝後,不能運行,也沒有qnes這個目錄。
另外我曾在Linux下,對原包進行單個檔案的如下處理。
tar --delete qnes qnes.prg #去除原有可執行程式
tar -r qnes -f qnes.prg #增加qnes,其實是shell指令碼
結果同樣能安裝,不能運行。
先前我認為這個包是版本低的tar命令(或者ustar,star等低版本)所為,968不能解開。
但經過最近的測試,完全否認了這個結論。
--------------------------------------------------------
樣本四:將原包qnes.prg複製到Linux下做如下操作:
su root
tar xvf qnes.prg #解包
chown tq *
chgrp tq *
用tq使用者執行mktar指令碼,指令碼內容如下,可見是嚴格按照Install.conf檔案順序的。
tar cvf liwei.tar Install.conf
tar -r 3Kingdoms2.nes -f liwei.tar
tar -r AdventureIsland4.nes -f liwei.tar
tar -r 3Kingdoms1.nes -f liwei.tar
tar -r AdventureIsland2.nes -f liwei.tar
tar -r AdventureIsland3.nes -f liwei.tar
tar -r BattleToads.nes -f liwei.tar
tar -r 1943.nes -f liwei.tar
tar -r 1944.nes -f liwei.tar
tar -r BomberKing.nes -f liwei.tar
tar -r HDL.nes -f liwei.tar
tar -r AdventureIsland.nes -f liwei.tar
tar -r 1942.nes -f liwei.tar
tar -r Arkanoid.nes -f liwei.tar
tar -r mario.nes -f liwei.tar
tar -r BattleCity.nes -f liwei.tar
tar -r tank.nes -f liwei.tar
tar -r BomberMan1.nes -f liwei.tar
tar -r qnes.png -f liwei.tar
tar -r qnes.desktop -f liwei.tar
tar -r qnes_zh_CN.qm -f liwei.tar
tar -r qnes_zh_TW.qm -f liwei.tar
tar -r qnes -f liwei.tar
將做好的liwei.tar改名qnes.prg給鐵蛋安裝,發現安裝運行皆沒有問題!可見
Linux下只要按順序用tar打包檔案,968安裝運行是沒有問題的。
--------------------------------------------------------
樣本五:既然安裝包沒問題了,我就嘗試把1942.nes刪除,把原有的qnes(212K可
執行程式)改名為1942.nes,自個寫個指令碼命名為qnes。指令碼內容如下:
#!/bin/bash
/mnt/doc/user_local/qnes/1942.nes
顯然是為了執行原有的qnes,但是安裝後不能運行,程式管理器中提示模擬器為
0KB。我又寫了個簡單C程式,用arm-linux-gcc交叉編譯了一下(因為qnes這個包在我
E680裝過發現是相容ARM指令的),是8KB,這個程式其實就是做上述指令碼的內容,安裝
後也無法運行,程式管理器中顯示是模擬器為7KB。
C程式簡單代碼:
#include <stdlib.h>
#include <stdio.h>
int main()
{
system("/mnt/doc/user_local/qnes/1942.nes");
return 0;
}
推測:可能是Install.conf檔案裡描述的資訊與後修改的檔案不一致,導致手機
程式不能識別後修改的檔案(不管是shell指令碼還是Linux可執行程式)。
目前為止,Install.conf那#前面一堆數字中,還跟天書沒啥區別。
--------------------------------------------------------
樣本六:為了進一步探究Install.conf問題,我將原包再次解壓縮,把1942.nes
刪除(據鐵蛋稱,這個nes檔案不能使用),把3Kingdoms1.nes複製一份,命名為1942.nes
別的什麼都不做改動,Linux按順序打包,讓鐵蛋安裝。
發現後修改的1942.nes是可以使用,而且和3Kingdoms1是一樣的。
說明:Install.conf那堆數字並不關心具體的檔案內容,可能只於安裝路徑,名
稱和許可權有關。但是疑問也來了,那把qnes這個可執行程式替換為Shell指令碼,為什麼
還不能運行,這個需要以後做進一步的分析了。
--------------------------------------------------------
總結:飛利浦安裝的問題已經得到徹底解決,不過問題又再次集中到,如何執行
Shell指令碼這個核心問題上。將Qnes包中qnes可執行程式替換成Shell,為什麼不能執
行?是Shell指令碼的問題,還是飛利浦也同樣封掉了這個Shell介面,還是不得而知。
我們不僅需要更多Shell指令碼的嘗試,而且還要對Install.conf這個檔案做進一步
分析。