×
Namespaces

Variants
Actions

如何解决平台安全问题

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
dougcn 在 08 Mar 2009 创建
最后由 hamishwillee 在 30 May 2013 编辑

在应用软件开发过程中,我们通常会碰到各种与平台安全概念有关的问题,而弄清当前面临问题是否的确与平台安全有关却有点棘手。下面的检查列表将有助于分析平台安全相关问题。

Contents

检查模拟器日志输出

可做的首要事情是检查模拟器日志输出,这个比较容易查找。从模拟器的Tools | Preferences菜单可启用模拟器日志输出,确保"Enable EPOCWIND.OUT logging"被选中。另外,从epoc.ini文件也能启用日志输出,确保LogToFile值为1。

LogToFile 1

然后运行应用程序,执行一些操作后退出。接着,打开EPOCWIND.OUT文件,这个文件位于%TEMP%文件夹(在DOS窗口键入"echo %temp%"命令行,即可获知%TEMP%的真实路径)。下面给出一个有平台安全问题的应用程序的例子。

151.975	*PlatSec* WARNING - Capability check would have failed - A Message 
(function number=0x00000000) from Thread Screenshot[20000555]0001::screenshot,
sent to Server !Windowserver, was checked by Thread
WSERV.EXE[10003b20]0001::Wserv and was found to be missing the capabilities:
SwEvent . Additional diagnostic message: Capability check failed for
RWindowGroup::CaptureKeyUpsAndDowns API
 
153.600 *PlatSec* WARNING - Capability check would have failed - A
Message (function number=0x00000000) from Thread
Screenshot[20000555]0002::screenshot, sent to Server !MsvServer, was checked by
Thread !MsvServer[1000484b]0001::!MsvServer and was found to be missing the
capability: ReadUserData.

这个例子显示出此程序缺少两个能力,即:SwEvent and ReadUserData

模拟器上执行能力检查

这个与前面的那个基本类似。不是将问题写入日志文件,而是当有平台安全问题时模拟器会立即通知。

从模拟器的菜单Tools | Preferences可使能模拟器能力检查。也可从epoc.ini文件使能这个检查,就是将PlatSecDisabledCaps的值改为NONE

PlatSecDisabledCaps NONE

意思是没有被禁用的capability。换言之,所有能力检查都被启用。 当启用这个功能后,模拟器在每次调用受限API时将显示一个对话框。下例给出一个例子:因为缺少能力显示的错误信息。

Platsec unable to execute.png


我所用的API需要哪些能力?

在检测到问题之后,下一步就是如何找到问题所在。调试代码总是有帮助。另外,也查看SDK帮助看应用程序是否有被拉掉的能力。下例是一个写在SDK帮助中的能力信息的例子。

Capability Information
Required capabilities:
ReadUserData WriteUserData ReadDeviceData WriteDeviceData


检查MMP文件

在收集到所有需要的能力之后,下一步就是检查.mmp文件,确保这个文件中列举了所有需要的能力。mmp文件中能力声明例子:

CAPABILITY SwEvent LocalServices NetworkServices ReadUserData WriteUserData

注意:Carbide.c++ 1.1不使用.mmp file。要在Carbide.c++ 1.1上修改capabilities,右击工程并选择Properties | C/C++ Build。 因此,推荐使用最新版本(当前为2.0版)。

Carbide.c++ 能力扫描工具

有一个Carbide.c++新插件,叫做Capability Scanner],它能在IDE中检测平台安全问题。这个插件在Carbide.c++ release v1.3之后可用。

检查DLL依赖关系

平台安全中,可执行程序只能装载比它自身有更多能力的DLL。例如,具有A和B能力的可执行程序不能装载只有能力A的动态库(DLL)。确信可执行文件所装载的所有DLL都有更多的能力或者至少一样多且完全相同。

这个问题通常发生在使用第三方DLL时。大多数在ROM上的DLL都有"All -Tcb"能力;而大多数第三方应用的能力比ROM上的DLL的能力少。 检查可执行文件的能力,包括.exe.dll,可通过elftran工具来进行。使用"-dump h"参数运行这个工具,然后检查运行结果中的capabilities 区段。

ELFTRAN - ELF file preprocessor V02.01 (Build 564)
Copyright (c) 1996-2006 Symbian Software Ltd.
 
E32ImageFile 'screenshot.exe'
Entry points are not called
...
Capabilities: 00000000 0001f000
...

上例中的可执行文件拥有0x0001 F000能力。能力位的定义可以在头文件e32capabilities.h中找到。这个文件随任何Symbian OS 9 SDKs而发行,包括S60 3rd Edition SDKThere is no such file as e32capabilities.h in either MR release or the FP1 release, there is a file named e32capability.h but that is not usefull at all.

然而,使用elftran -dump s <filename>命令可能更易获得可执行文件的能力。

ELFTRAN - ELF file preprocessor V02.01 (Build 573)
Copyright (c) 1996-2006 Symbian Software Ltd.
 
E32ImageFile 'HelloWorldBasic.exe'
Secure ID: 102ee322
Vendor ID: 10333333
Capabilities: 00000000 000ffffe
CommDD
PowerMgmt
MultimediaDD
ReadDeviceData
WriteDeviceData
DRM
TrustedUI
ProtServ
DiskAdmin
NetworkControl
AllFiles
SwEvent
NetworkServices
LocalServices
ReadUserData
WriteUserData
Location
SurroundingsDD
UserEnvironment

Internal links

This page was last modified on 30 May 2013, at 07:37.
55 page views in the last 30 days.
×