分享

Windows Mobile for SmartPhone 中的特权问题(附:解锁/上锁原理)

 duduwolf 2006-01-18

很多朋友肯定一开始就遇到过这样的问题,用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上的文章,中文翻译版早已经出来了。

那么系统如何区分特权应用程序和非特权应用程序呢?关键在于手机所设定的特权保护机制(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也能干了………………
我们刷ROM的时候,也需要先运行一个SDA_ApplicationUnlock的程序对手机解锁,其实这个解锁工具干的也就是这档子事,帮你改了这个注册表条目。虽然我还没空反汇编这个解锁程序,不过基本肯定它就是这样干的了

记得有人问过如果解锁后的手机如何才能重新Lock上,好多人都说硬启,呵呵,大可不必,把那个键值改回0,重启,万事OK

我是干开发的,大老粗,文笔不好,有兴趣的将就着看吧,欢迎砸板砖

Update: 干脆列个表吧,我目前试过的几个

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


HTC的特权证书在所有HTC的机器里都是存在于特权信任列表里的,当然包括DOPOD,当然,HTC证书签名的程序在8390,mpx220这些机型里面,跟普通程序就无异了,因为这些公司可不会买他的帐

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

转自:Dewinter.感谢分享..

带特权签名的注册表编辑器:

http://soft./SoftView/SoftView_7832.html

SDA_ApplicationUnlock(SDA的解锁软件):

http://soft./SoftView/SoftView_7830.html

=====================================================================
2003解锁:

HKEY_LOCAL_MACHINE\Security\Policies\Policies下面的键值“0000101b”=“1”(dword值),然后关机.

2005解锁:

HKEY_LOCAL_MACHINE\Security\Policies\Policies\00001001 = 1
HKEY_LOCAL_MACHINE\Security\Policies\Policies\00001005 = 40

没有可以新建一个
=====================================================================

 

各位网友们有福了!
其实是有办法把"带特权签名的注册表编辑器复制到手机"的,且是我们这种水平的人的唯一办法!

首先:先下载一个具有(手机)解压功能的软件,例如:Explorer2003V4.4简体中文版for Smartphone2002(这是个具有解压ZIP文件功能的文件管理器,呵),装好这软件后;
然后:你在PC上把你要复制到手机的"带特权签名的注册表编辑器"压缩成ZIP文件,下一步就不用细说了,当然是复制它到手机卡上,然后再在手机上进行解压(解压后你可把原压缩文件删了),呵,OK!完成.
不过,这是英文软件哦,如果第一次看不懂的,建议可同时装上那个中文但"没有带特权签名的注册表编辑器",用以作演练熟悉用,然后就会用那个英文特权版了,,呵,偶的废话挺多了.

可能你会发现没有那个键的,没关系,新建它,然后记得关机重启哦

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多