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这个文件做进一步
分析。
[最后更新于2006-10-21]