“居庙堂之高,则忧其民”、“处江湖之远,则忧其君”。
这种君与民的“思念”之情同样发生在x65手机与我们之间。然而,我们今天却要舞起双剑、冲进内宫搞搞震!
左手剑:x65 Flasher
这个x65 flasher就是我们盼望已久的x65手机的刷机软件!
它的主要功能如下:
1.读写手机的闪存;
2.备份和恢复手机的部分或全部闪存:FUBU(flashfile FUllBackUp)和filesystem(文件系统)、firmware(固件)、bootcore(启动内核)或EEPROM lite;
3.将刷过补丁的bootcore复原;
4.显示闪存地址映射图;
概括起来,刷机软件的主要作用就是刷补丁和恢复系统。
使用前需做一点准备工作:用软件包里的一个java程序px65i.jar破解bootcore(复制到/java/jam目录下运行,显示*** OK ***时表示破解成功)。
然后,手机(要充足电)关机、插上数据线、运行x65 flasher,显示如下界面:
选择正确的数据线连接端口和速率(一般选115200),按Connect连接手机,稍后短按手机的开机键确认连接,显示:
这里按照功能划分共有三个部分:
Flash Map:手机的闪存地址映射图。
x65手机内部MPU的程序和数据地址空间为32M(A0000000h~A1FFFFFFh,长度2000000h)。从图上看,闪存的地址空间是连续的,实际在物理上可能对应着不同的逻辑器件,例如bootcore(A0000000h~A001FFFFh)可能位于MPU芯片内部,EEPROM和固件也可能位于外部不同的存储器件中,只是这些器件由地址译码器统一在一个便于管理的连续空间内。
映射图将地址空间显示为16x16共计256个128KB(长度20000h)的地址块,每一个地址块就是一个基本的功能划分空间,同一功能可以按照简化布线的原则占用不同的地址块。
地址块的位置序号(从左到右、由上到下、从0算起)和起始地址之间的换算方法是:将“序号x128x1024”的结果转换成8位16进制数,再与A0000000h进行逻辑或操作(这里相当于将地址的最高位改为A)。例如,EEPROM(第1个粉红色的地址块)的起始地址为:(17x128x1024)h+A0000000h=220000h+A0000000h=A0220000h。
地址的计算和转换可以用Windows的科学计算器来完成。反过来计算可以由地址获得地址块序号,从而判断出所属的功能区。
Map相当于皇宫的地形图。
Backup和Restore:实现上述第2项功能。备份的FUBU或者其中的部分内容保存为.fbk文件。需要注意的是,这些.fbk不是纯机器码文件,而是一种目标文件,里面储存着一些地址信息,只能供恢复系统之用,不能用于刷补丁。建议大家利用一点时间做个FUBU(大约40分钟)和全部单项的备份。
Backup和Restore给我们留下了东山再起的退路。
Read Flash和Write Flash: 实现刷补丁功能。输入起始地址和长度后,按Read Flash键可以读出纯二进制机器码文件,文件名为:起始地址.bin,建议不要改文件名,除非你另外记住了这个地址,否则一旦将这个文件写入到了其他的地址,你的手机可能会疯掉!
作为研究之用,你尽可以读取上述地址范围内的任意一个字节或者一整段内容,但是需要注意,x65的闪存器件都是按页写入的,即一次写入一个128K的地址块,所以,当你想要刷补丁时,读写的起始地址和长度就必须一致并且符合以下要求:二者必须都是20000h(即128x1024)的整数倍。例如,起始地址A1230000h是错误的,A1220000h是正确的;长度10000h是错误的,40000h是正确的。
读出来的地址块备份后用UltraEdit编辑(打补丁),然后再按原地址和长度写回去。有关打补丁的方法请参阅宝典中的相关文章。
建议大家先将默认的32M闪存内容读出来保存好。
Read Flash和Write Flash是我们出手的宝剑,兄弟们务必一招夺命啊!
警告:使用后手机有可能开不了机了!断开连接。不行?莫急,按死机方案处理,这个大家都知道的。
右手剑:Smelter 4.6
这是一个陌生而又令人费解的名字。字面意思是“熔炉, 熔炼工”。这就是我们修练上乘武功的葵花宝典。
运行Smelter,语言选择英文。打开我们读取的32M文件,按“Information”菜单显示如下:
这里统计了一些比较笼统的数据,包括固件、内置图片、语言包以及EEPROM的数量和位置等信息。从图中可以看到,一些EEPROM区域被删除了,另外C6C的Menus一项为0,而CX65为62项(16版)。
该软件有6个常用的手机信息快捷按钮,分别介绍如下:
E:EEPROM 信息。这是梦开始的地方,像启动航空模式之类的功能都可以在这儿实现。
这里我们只需要关注Description、Offset这两列内容,前者是功能定义,后者是该功能在闪存中的地址偏移量(与A0000000h相或后才是绝对地址)。通过分析可以发现,这些地址集中在0023xxxxh~0024xxxxh和00FExxxxh区域,换算成地址块序号正好对应着地址映射图中的粉红色EEPROM区(第17、18、127块)。
按鼠标右键可以保存相应的程序代码,配合仿真器或反汇编程序即可掌握该功能的工作原理,进而设计自己的补丁程序。
L:语言包。
这里是手机固化的菜单、设置等的文字内容及其位置信息,按鼠标右键可以显示不同的语言包文字及其位置信息。据此可以修改不恰当的翻译方法,例如将“播放视讯片”(地址偏移量1BA64Ch)改为“自动换片”等等。
M:菜单。
这里是按键和快捷按键的入口地址。我们熟知的DSE 1.0.4.2就是在这里面做的文章。其中Entry一列就是该键的入口地址,改变这个地址就改变了按键定义,同时,我们顺藤摸瓜就可以追踪到该功能的程序入口。这里可是各路豪杰大展拳脚的地方,比如进入通讯录查找功能中,把首汉字首拼音查询改为所有汉字的首拼音查询。分析程序的秘密和原理也可以从这里入手。
P:内置图片。
包括系统的九宫图标、录音机的动画等等,包含了地址、大小和图片等资料,非常直观。有趣的是,gif格式的动画在手机里是一幅幅静态图片,最后由定时程序合成动画。更改系统图片可以用专门的软件SPC3来实现。
F:文件系统。包括系统文件(地址映射图中的蓝色方块)和用户文件(黄色方块)。
通过计算可以看出,通过红外线或数据线传到手机里的数据都储存在了黄色的用户文件区里面。隐含文件夹config下的内容位于蓝色的系统文件区里面。凭直觉,两个区的容量之和应该大于系统的最大标称空间10.32M。
让我们计算一下:蓝色方块20个=2.5M,黄色方块89个=11.125M,二者合计=13.625M,比标称的最大空间大3.305M!
我的手机现有6.75M空间,传一个200K的文件到data目录下,空间变为6.55M。删掉,传到config目录下,空间还是6.75M!没有变化!继续传了共计840K的文件,传不进去了,加上原来的849K系统文件,总计1.65M。再向cache目录传文件,共计270K装满。这样,两个隐含目录原有文件855K,又传入文件1110K约1.1M,总计>1.9M,系统文件区剩余约600K,而这时手机的文件管理器显示的可用空间仍然是6.75M!接着运行几个软件,一切正常。
至此,我们找到了1.9M空间,可以用MPM/SiMoCo来存储文件,但是,还不能在手机里很方便地加以利用(可以将default目录下的系统默认图铃改为自己喜欢的同名大文件来加以利用)。另外还有约600K的系统空间和约800K的用户空间无法访问,这些空间(约12个地址块)很可能被系统留给了文件名和目录数据库以及一些后台生成的临时系统文件等。
这样,我们意外地发现了x65的>1M的可利用空间!希望以后的补丁能让我们自由地使用这一宝贵的空间。
D:闪存地址映射表,作用类似于x65 flasher的地址映射图。
其他一些不甚重要的功能这里就不再介绍了。另外需要注意,这里的一个Block块是64KB。
通过以上功能的介绍,我们对x65手机的内部地址空间分布、系统功能调用参数和入口地址以及跟踪调试的方法有了一个全面的理解,一幅异常翔实的进攻路线图铺在了我们的面前,配合内部MPU的汇编、调试程序(这里下载:http://www.arm.com)以及更高级的仿真器等先进工具,相信广大的西机高手们完全有能力摆平西门子,做x65的君王!
新闻热点
疑难解答
图片精选