Windows Mobile for SmartPhone 中的特权问题

dolby

普通会员
2005-12-10
114
0
0
很多朋友肯定一开始就遇到过这样的问题,用Resco无法Access具有系统属性的文件,AppInstall下面的反安装程序也无法删除,用PHM Registry Editor改注册表,结果有很多注册表项目无法更改,比如HKLM\System\ HKLM\Security等等。
其实这个就是微软在Smartphone里面引入的特权保护机制,现在Windows Mobile 5.0里面,这种机制也被带入了PPC系列,总而言之,就是为了安全性,对应用程序能够访问的系统资源作了限制,如果没有这种限制,很可能就会造就相当一部分的恶意程序,因为应用程序可以随意调用特权API,篡改你的SIM卡信息,给你的联系人群发垃圾短信,窃取你的联系人信息,或是删除重要的系统文件。
所以微软把系统资源分成了两种权限,特权级和非特权级(Privileged / Unprivileged),一般我们运行的应用程序都是出于非特权级别的,比如Resco,由于没有特权,所以无法删除某些系统文件,而PHM Registry Editor也是如此,无法更改某些注册表条目。
至于Windows API,也同样如此,分为特权API和非特权API,一般应用程序如果调用特权API就会产生调用失败
有关这部分的详细内容,请参考MSDN上的文章,中文翻译版早已经出来了。
智能手机,移动设备,手机软件主题铃声,UIQ Series,Symbian OS,Smartphone
那么系统如何区分特权应用程序和非特权应用程序呢?关键在于手机所设定的特权保护机制(Policy),以及应用程序本身的数字签名。


手机内部有个根证书存储区,里面存放着一些被信任的发行商的特权数字签名(当然也有被信任的非特权数字签名),用这些特权列表里面的数字证书签名的应用程序运行时就拥有特权。比如HTC的机器就把HTC自己的数字签名加入了这个受信任的特权根证书列表里面,所以大家可以用IA(被HTC收购,所以是自家货)系列的工具来进行其他工具所不能进行的特权操作。而且不知大家注意没,一般我们新拷贝一个程序到机器上,第一次运行总会提问,该程序数字签名不被信任,是否运行,但IA系列的工具从来不会弹出这个提示(除非被改动过),因为它的数字签名是在信任列表里的。
我曾经看IA的图标不爽,改了,然后用自己的数字签名签了一遍,后来发现这个IA已经相当于被阉了,失去了特权,因为我的数字签名不在信任的特权列表里。 这也说明了这种保护机制的确起了作用,可以保证原始公司的特权程序不被篡改。

既然我们搞不到HTC等这些特权发行商的数字签名,那么有没有办法让我自己的数字签名也被信任呢?这样的话,像上面提到的我改过的IA,也可以以特权模式运行。

答案是肯定的
方法1. 把自己的数字签名加入到特权信任列表
大家刷ROM的时候是不是干过一件事,就是安装Cert.cab,其实这个就是将ROM刷新工具的数字签名加入手机的信任特权列表,因为虽然刷ROM的工具是PC端的,但它还是要调用RAPI来访问SmartPhone,所以一样需要受到认证授权。我们自己的数字签名也可以如此做,用smartphone SDK提供的工具将数字签名以XML的形式(Base64编码)传到手机上,导入到注册表里(信任的证书列表是存放在注册表里的,HKLM\Comm\Security\SystemCertificate, 看看具体证书项里面的blob键值,就可以知道手机里哪些数字签名是默认信任的,虽然是2进制,但一样可以看出来,HTC赫然其中) 不过这种方法只适合于开发者,普通用户操作起来太麻烦,需要一点点理论知方法2. 改变手机特权策略,让它根本就不进行特权签名验证
既然加入自己的特权证书这么麻烦,为什么不干脆干掉这个特权限制呢,让所有的程序都有特权,人人平等(当然也会带来潜在的威胁)。其实手机里除了数字签名,还有一个保护策略的问题(Policy)大家可以看看
HKLM\Security\Policies\Policies下面的一对数字键,其实每个键都代表一个保护策略,比如是否允许安装未信任签名的CAB,是否允许运行未信任签名的程序(如果这一项启用了,那我们就只能运行极少数程序了,其他的程序连是否信任的对话框都不会弹出,就直接告诉你拒绝运行),还有就是最关键的,特权模式,该键的名称是0000101b,默认值是0,意思就是只有特权签名的程序才有特权访问。如果改成1,那就意味着所有的程序都可以拥有访问特权,既然找到了问题,那就开干啊,呵呵,wait a minute,这个注册表项也是受特权保护的,一般的程序根本就无法更改它,除了我附件里提供的带有HTC特权数字签名的注册表编辑器,虽然跟我们常用的PHM Registry Editor长得一模一样,但这个可是有特权签名的版本,也不知是SPV-Devolopers上面哪个大牛能写入HTC的签名
有了这个工具,你就可以轻松的把这个键值改为1,然后重启,然后就共产主义了。IA能干的所有事,Resco也能干了………………智能手机,移动设备,手机软件主题铃声,UIQ Series,Symbian OS,Smartphone我们刷ROM的时候,也需要先运行一个SDA_ApplicationUnlock的程序对手机解锁,其实这个解锁工具干的也就是这档子事,帮你改了这个注册表条目。虽然我还没空反汇编这个解锁程序,不过基本肯定它就是这样干的了

记得有人问过如果解锁后的手机如何才能重新Lock上,好多人都说硬启,呵呵,大可不必,把那个键值改回0,重启,万事OK
Update: 干脆列个表吧,我目前试过的几个

Smartphone|0000101b 就是SDA_ApplicationUnlock改动的地方,代表的含义是是否跳过程序的特权验证,改为1代表所有的程序都有特权,改回0就重新上锁了
0000101a 是安装未签名Cab是否提示,0为允许提示,1为禁止提示
00001006 就是未信任的程序是否允许运行,如果设置为0,而且机器又没有解锁的话,那么除了系统程序和IA,没几个程序能在你手机上运行
 

附件