Symbian OS 初探

Symbian OS 初探
2008-12-22 20:56
Symbian OS 初探

tombkeeper@xfocus,http://hi.baidu.com/tombkeeper

2005.12.01

1.    Symbian OS简介

Symbian OS是Symbian公司的针对智能手机的嵌入式操作系统,是目前市场占有率最大的手机操作系统,也是最早出现的智能手机操作系统。

Symbian公司的前身是Psion,原本是英国一家主力生产计算机软件的公司,1984年起开始生产电子记事簿。Symbian OS的架构就基于Psion以前开发的Epoc OS。1998年6月,爱立信、诺基亚、摩托罗拉和Psion共同出资,筹建了Symbian公司。

2001年,Symbian公司中止了EPOC OS的开发,只保留商用电子助理的产品线,同时跟摩托罗拉、爱立信、诺基亚、Sendo、西门子及松下等手机大厂组成Symbian联盟。

在2003年人们曾经一度认为Symbian OS即将被淘汰,但是从最近的情况来看,Symbian OS然具有很强的生命力。下面是历年来的市场占有率:



目前诺基亚在智能手机市场上占据着最大的份额,其所有智能手机都基于Symbian OS。诺基亚出货量最大的智能手机是S60系列。

S60是Series 60的缩写,指的是手机的操作界面,类似于“桌面环境”的概念。相应的还有Series 40(6230i等机型)、Series 80(9210/9300/9500等9系列机型)。7650/3650/6600/6670/7610/3230等机型使用的就是Series60的界面。

7650和3650这两款老型号手机的操作系统是Symbian OS 6.1,2004年和2005年新出的S60手机则都是基于Symbian 70操作系统的,所以本文以Symbian 70为研究对象。

从外表来看,Symbian十分类似于Windows。譬如驱动器也称之为“C:、D:……”,依赖扩展名识别文件,可执行文件扩展名是EXE,动态链接库扩展名是DLL、配置文件扩展名是INI……系统甚至也使用Windows的PE格式。所以对Symbian OS的研究分析工作很容易上手。

Symbian OS的Z:盘存储着系统的Rom,通常是不可写的。C:盘也是Rom,可写,是主要驱动器。平时安装的程序、需要读写的数据都存储在C:盘。D盘是Ram,相当于临时目录,存储的数据在系统重启后会丢失。

智能手机和普通PC相比具有其特殊性:

1、人们几乎没有“手机存在漏洞”的意识,更不知道如何给手机打补丁。

2、手机的短信、“彩信”、蓝牙等通信方式都可以成为外来数据的入口。而且用户无法拒绝这些数据进入手机。

“彩信”是一种类似电子邮件的通信方式,通过GPRS协议传输数据,可以携带任意格式的文件。当手机打开“彩信”的时候,会根据携带的文件扩展名,自动调用相应的程序进行处理。而这些程序就非常有可能存在各种各样的安全问题。“彩信”问题可能是未来数年内手机安全的最大威胁。

“彩信”可能影响的不光是智能手机,普通手机也是一样,只不过相应的漏洞利用起来要难一些罢了。


2.    研究环境的搭建

首先下载Symbian 7.0的SDK(参考资源[1]),如果你有CodeWarrior,可以下载支持CodeWarrior的版本(参考资源[2])。

考虑到大多数人都没有CodeWarrior(参考资源[3]),所以本文所述的一切操作均以无CodeWarrior支持的SDK为环境。无CodeWarrior支持的SDK可以和微软.NET开发环境整合,不过本文也不会涉及.NET开发环境。Symbian SDK中包含了足够的文档、编译器、调试工具、相关头文件和库、虚拟机、例子代码等。本文全部内容都仅需SDK即可完成。

SDK的安装过程很简单,默认安装路径为C:\Symbian。本文所述皆以默认安装路径为例。

如果要使用Symbian的SDK的全部功能,系统上需要先安装ActivePerl(参考资源[4])和JRE(参考资源[5])。

有一点需要注意,SDK所带的工具要求JRE必须是1.3.1_xx、1.4.0_xx或者1.4.1_xx中的某一个才能正常运行,否则会报错。限制是在C:\Symbian\7.0s\Series60_v21\Epoc32\tools\splash.exe中做的:

.text:004027CB    push    offset a1_3_1   ; "1.3.1"
.text:004027D0    push    edx             ; unsigned __int8 *
.text:004027D1    call    __mbscmp
.text:004027D6    add     esp, 8
.text:004027D9    test    eax, eax
.text:004027DB    jz      short loc_402809
.text:004027DD    mov     eax, [esp+74h+var_60]
.text:004027E1    push    offset a1_4_1   ; "1.4.1"
.text:004027E6    push    eax             ; unsigned __int8 *
.text:004027E7    call    __mbscmp
.text:004027EC    add     esp, 8
.text:004027EF    test    eax, eax
.text:004027F1    jz      short loc_402809
.text:004027F3    mov     ecx, [esp+74h+var_60]
.text:004027F7    push    offset a1_4_0   ; "1.4.0"
.text:004027FC    push    ecx             ; unsigned __int8 *
.text:004027FD    call    __mbscmp
.text:00402802    add     esp, 8
.text:00402805    test    eax, eax
.text:00402807    jnz     short loc_402823

你可以选择安装这三个版本JRE中的某一个,或者把上面的某个jz改成jmp。如果不想安装那些老古董,又懒得修改代码,还有个折中并且优雅的方案:在注册表里增加一个虚假的版本描述,其中的路径指向当前的JRE:

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.4.1]
"JavaHome"="C:\\Program Files\\Java\\jre1.5.0_05"
"MicroVersion"="0"
"RuntimeLib"="C:\\Program Files\\Java\\jre1.5.0_05\\bin\\client\\jvm.dll"

本小节 参考资源

[1] Series 60 SDK 2.1 for Symbian OS v7.0s, Nokia Edition
http://www.symbian.com/developer/sdks/S60_SDK_2_1_NET.zip

[2] Series 60 SDK 2.1 for Symbian OS v7.0s Supporting CodeWarrior for Symbian OS
http://www.symbian.com/developer/sdks/S60_SDK_v21c_CW.zip

[3] CodeWarrior for Symbian OS
http://www.metrowerks.com/MW/Develop/Wireless/Symbian/Personal_Edition.htm

[4] ActivePerl Download
http://www.activestate.com/Products/Download/Download.plex?id=ActivePerl

[5] Java[tm] Technology Products Download
http://java.sun.com/products/archive/index.html


3.    Symbian OS SDK的组成

安装好后的C:\Symbian\7.0s\Series60_v21\目录下有6个子目录。下面对这些内容作一些简单介绍:

Debug目录下只有一个文件:gdbstub.SIS。这是用于调试的gdb服务器。如果要用GDB对手机或者虚拟机进行调试,就需要安装gdbstub.SIS。

Epoc32目录是SDK的主要部分。包括编译器、调试器、虚拟机等。

Epoc32\cshlpcmp_template目录下是整合.NET开发环境所需的模板。

Epoc32\data目录下是虚拟机的文件。

Epoc32\gcc目录下是开发调试工具。

Epoc32\include目录是开发所需的头文件。

Epoc32\release目录下是虚拟机,Epoc32\release\wins\udeb是Debug版本,Epoc32\release\wins\urel是release版本,里面的目录“z”会映射为虚拟机中的Z:盘,每个虚拟机目录中的epoc.exe和eshell.exe分别是标准虚拟机和命令行模式虚拟机。

Epoc32\tools下是一些和开发相关的小工具,譬如SIS文件的制作打包程序。不少工具是Java写的,装JRE就是为了能运行这些工具。

Epoc32\wins下的“c”和“d”两个目录会映射为虚拟机的C:和D:盘。

Examples和Series60Ex中是一些例子代码。

Series60Doc目录中保存着SDK的全部文档。

Series60Tools里是两个辅助开发的小工具。

需要注意的是,Symbian SDK中提供的虚拟机只是一个x86版本的Symbian而不是ARM版本的,用来进行开发可能还行,但是对于安全研究就基本上没有什么价值了。所以我们还是得用真正的移动电话来调试。


4.    用GDB调试

要进行调试,首先得在移动电话上安装上面提到的gdbstub.sis。默认安装到C:\gdbstub.exe,并生成目录C:\gdbstub。C:\gdbstub\gdbstub.ini是gdbstub的配置文件。只要能建立串行通信的接口都可以用于调试,譬如红外或者蓝牙。

4.1 通过红外进行调试

首先,修改移动电话上的gdbstub.ini如下:

[COMMSERV]
PDD=EUART%d
LDD=ECOMM
CSY=IRCOMM
PORT=0
RATE=9600

然后在电脑上建立一个目录:C:\gdb,并在其中创建文件:gdb.ini,内容为:

epoc-exec-file Path\To\Your\Application
target epoc com4
break *0xAAAAAAAA
source //c/symbian/7.0s/Series60_v21/Epoc32/gcc/share/epoc-des.ini

gdb.ini的内容事实上就是gdb命令,如果不建立这个文件,启动gdb后手工输入也没问题。注意:上面的com4是计算机的红外虚拟串口,在不同的计算机上未必都是com4。

这时候就可以将移动电话和电脑的红外口对上,然后通过SeleQ之类的文件管理工具运行gdbstub.exe。然后以C:\gdb为当前目录,启动gdb,就可以开始调试了。

有一点要注意,大多数系统自带的程序都保存在不可写的Z:盘,而为了节省内存,提高程序启动速度,Symbian系统对这些程序都是直接映射到线性空间,而不是读入内存。再加上Symbian没有Windows的“脏页”机制,这就意味着对于这些系统程序我们无法设置断点,因为不能插入中断指令。一个可行的办法是将程序拷贝到可写的C:盘来,但大多数系统程序在拷贝到C:盘后可能就无法执行了,还需要破解作这部分限制的代码。

4.2 通过蓝牙进行调试

通过蓝牙进行调试要比用红外更方便,因为不存在“对准”的问题,甚至可以一边调试一边打电话。

在配置上没有什么特殊之处,只需要修改一下上面提到的gdbstub.ini文件:

[COMMSERV]
PDD=EUART1
LDD=ECOMM
CSY=BTCOMM
PORT=0
RATE=9600

接下来的操作和红外调试差不多。


本小节参考资源

[1] Configuring Bluetooth virtual serial ports (with source)
http://www.symbian.com/developer/downloads/files/BTCOMM_control_S60_v1.zip

[2] On Target debugging on Serie 60 with Bluetooth
http://forum.newlc.com/index.php?action=printpage;topic=11470.0

[3] Symbian OS Tools
http://www.symbian.com/developer/downloads/tools.html

[4] GDB Debugger for Symbian OS v7.x
http://www.symbian.com/developer/downloads/files/gdb.zip



 
网友评论:
1
网友: zhaol
2008-12-30 09:08 | 回复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值