<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://blogs.forum.nokia.com/styles/rss.css" type="text/css"?>
<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns="http://my.netscape.com/rdf/simple/0.9/"
>

 <channel>
  <title>Gabor Torok&#039;s Forum Nokia Blog</title>
  <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog</link>
  <description>&lt;p&gt;Software architect working in Symbian/S60 area since 2000 and still being enthusiastic about mobility. Please visit my introduction page on Forum Nokia Champions web page.&lt;/p&gt;
</description>
 </channel>
    <item>
   <title>Browser as an application platform</title>
   <description>&lt;p&gt;
I&#039;ve read the following &lt;a href=&quot;http://www.arcchart.com/blueprint/show.asp?id=484&quot;&gt;analysis from ARCchart&lt;/a&gt;
with great interest. I&#039;m already familiar with the idea of writing
applications for mobile browsers and that it can be considered as a
real alternative for mobile software development. &lt;a href=&quot;http://www.widsets.com/&quot;&gt;WidSets&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_widget&quot;&gt;Widgets&lt;/a&gt; are all around us, not to mention &lt;a href=&quot;http://www.adobe.com/products/flashlite/&quot;&gt;Flash Lite&lt;/a&gt;, &lt;a href=&quot;http://silverlight.net/&quot;&gt;Silverlight&lt;/a&gt;, two cross-platform solutions used for delivering (multimedia) content to more and more people.&lt;br /&gt;
&lt;br /&gt;
The
main point of ARCchart&#039;s article was to point out that the whole
problem of fragmented mobile development could be solved by developing
to a single run-time environment: the browser. The browser, which is
today&#039;s most widely used applications on desktop and mobile computing
devices alike.&lt;br /&gt;
&lt;br /&gt;
What is this fragmentation thing, one could ask?
Well, let&#039;s have a quick look at various mobile platforms, development
environments:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;It&#039;s a known fact that &lt;span style=&quot;font-weight: bold&quot;&gt;Symbian/C++&lt;/span&gt; opens the door to the wide variety of native features of &lt;span style=&quot;font-weight: bold&quot;&gt;S60 &lt;/span&gt;and &lt;span style=&quot;font-weight: bold&quot;&gt;UIQ &lt;/span&gt;devices,
	however, it still has a steep learning curve and its programming
	environment is not too developer-friendly, either, compared to e.g.
	Java. The vast majority of smartphones are running on Symbian operating
	system (whether iPhone-fans admit it or not), however, development is
	often more (cost-)efficient for other platforms. Portability is a
	serious issue in Symbian.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Windows Mobile&lt;/span&gt;
	devices are very popular in North-America, especially among business
	users. However, its popularity is way behind Symbian phones&#039; anywhere
	else in the world and don&#039;t forget the fact that there are much more &lt;span style=&quot;font-style: italic&quot;&gt;consumers&lt;/span&gt; than &lt;a href=&quot;http://en.wikipedia.org/wiki/Prosumer&quot;&gt;prosumers&lt;/a&gt;.
	On this platform, you can write native applications in Win32/MFC/.Net,
	however, these applications are rarely portable across other platforms.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Java? &lt;/span&gt;Hell, it&#039;s the king of fragmentation in terms of supported (or rather &lt;span style=&quot;font-weight: bold&quot;&gt;un&lt;/span&gt;supported)
	features, so-called JSRs. Even though it was supposed to bring the
	Paradise to mobile software developers, it&#039;s still suffering from
	severe problems.&lt;/li&gt;
	&lt;li&gt;What else? &lt;span style=&quot;font-weight: bold&quot;&gt;Linux?&lt;/span&gt;
	Show me some popular Linux-powered phones first and how people are
	making cross-platform, backward compatible programs for them.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;iPhone?&lt;/span&gt;
	Mac OS X with its Objective C just increases variation. Even though C++
	can also be used for programming and there are, for example, attempts
	to &lt;a href=&quot;http://www.innaworks.com/alcheMo-for-iPhone.html&quot;&gt;port JME programs to Obj-C&lt;/a&gt;, as I said: it just increases variation, which is the nightmare of programers.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Android?&lt;/span&gt;
	Although the whole system is based on mobile Linux, the primary
	development language will be Java. But which Java? Google&#039;s own. And
	although it&#039;s said to be a solid foundation for Google OHA members,
	it&#039;s still only a &lt;span style=&quot;font-style: italic&quot;&gt;recommendation &lt;/span&gt;for
	them to choose whether various features will be supported in their
	devices or not. You can imagine how it affects fragmentation in the
	Java world - it will just make it even more complex.&lt;/li&gt;
&lt;/ul&gt;
Now how does a &lt;span style=&quot;font-style: italic&quot;&gt;browser&lt;/span&gt; come into play? I&#039;m sure that most readers of this blog have already heard of &lt;a href=&quot;http://webkit.org/&quot;&gt;WebKit&lt;/a&gt;, an open source browser engine enabling mobile browsers to show and handle full-web content. It is used in Mac OS X&#039;s &lt;a href=&quot;http://www.apple.com/safari/&quot;&gt;Safari&lt;/a&gt; (iPhone browser), Nokia&#039;s &lt;a href=&quot;http://www.s60.com/browser&quot;&gt;S60 browser&lt;/a&gt;, the built-in browser of Google&#039;s Android &lt;span style=&quot;font-style: italic&quot;&gt;will&lt;/span&gt; also be WebKit-based, not to mention Digia&#039;s &lt;a href=&quot;http://www.digia.com/browser&quot;&gt;@Web&lt;/a&gt;, a recently announced port of WebKit for UIQ phones. Although there are other good browsers, too, such as &lt;a href=&quot;http://www.opera.com/products/mobile/&quot;&gt;Opera Mobile&lt;/a&gt; and IE in Windows Mobile, WebKit seems to be becoming the de facto standard in mobile devices (which is &lt;a href=&quot;http://blogs.s60.com/browser/2007/10/coring_the_browser_1.html&quot;&gt;not necessarily a bad thing&lt;/a&gt;). It&#039;s also worth mentioning &lt;a href=&quot;http://www.operamini.com/&quot;&gt;Opera Mini&lt;/a&gt; and &lt;a href=&quot;http://teashark.com/&quot;&gt;TeaShark&lt;/a&gt; at this point, two &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;Java-based browsers&lt;/span&gt;, both using remote &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;back-end servers for pre-processing full-web content&lt;/span&gt;
and showing only the digested content formatted for
resource-constrained devices. Side-note: it&#039;s also WebKit that is
running on TeaShark&#039;s back-end servers. :)&lt;br /&gt;
&lt;br /&gt;
So &lt;span style=&quot;font-weight: bold&quot;&gt;is ARCchart right&lt;/span&gt; or not? Is the browser the ultimate solution for mobile software development? In my opinion &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;yes and no&lt;/span&gt;.
They&#039;re right that mobile browsers and complementing technologies (such
as Flash Lite) are becoming more and more powerful, capable of
rendering extremely complex web pages, performing surprisingly smart
functions, letting the user interact with active content, exchanging
data with remote servers, etc. However, whilst &amp;quot;older&amp;quot; web technologies
(e.g. JavaScript) are not powerful enough to compete with the power of
real programming languages, newer ones (e.g. Flash Lite) have not been
widely adopted yet. For example, for a quick and very brief reference
as to what the different versions of Flash Lite can and cannot do,
visit &lt;a href=&quot;http://blogs.forum.nokia.com/blog/alessandro-paces-forum-nokia-blog/series-40/2006/10/12/flash-lite-differences&quot;&gt;this link&lt;/a&gt;.
And even though there&#039;s not too much variation here yet, there will be:
newer versions of Flash Lite will require developers to keep track of
which mobile phone supports which version, how to distinguish between
Silverlight and Flash Lite applications, etc. I&#039;m afraid &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;it won&#039;t be any different in the end&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
In
my opinion, web-based technologies will open up new alternatives
(they&#039;ve already done so, actually) for mobile software: not
necessarily too complex ones, but at least enjoyable. And this is
exactly what most people are looking for: they&#039;d like to enjoy using
these programs. These new kind of programs that complete the whole
picture, add to it, but will NOT replace yet older but still powerful
technologies.&lt;br /&gt;
&lt;br /&gt;
Can hardly wait for your comments,&lt;br /&gt;
&lt;br /&gt;
Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2008/06/19/browser-as-an-application-platform</link>
      <pubDate>Thu, 19 Jun 2008 01:10:10 +0200</pubDate>   
  </item>
    <item>
   <title>True emulation for Symbian development - when?</title>
   <description>Though I&#039;ve already heard that &lt;a href=&quot;http://mobilephonedevelopment.com/archives/576&quot;&gt;Windows Mobile SDK offers true phone emulation&lt;/a&gt;,
however, only now have I got to the point that I ask for your opinion:
why cannot we do the same during Symbian software development?&lt;br /&gt;
&lt;br /&gt;
Note
that you might have also heard that iPhone developers can also rely on
this useful service. Nevertheless, don&#039;t forget to bear in mind that
they must be working on the same platform, i.e. MacIntosh OSX. That is,
there&#039;s not too much to emulate there.&lt;br /&gt;
&lt;br /&gt;
But Windows Mobile is
different: you develop on Windows presumably on an x86 architecture and
produce binary code for another processor architecture (ARM) that you
can even debug on. How? Why on Earth cannot we do the same?&lt;br /&gt;
&lt;br /&gt;
Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2008/04/11/true-emulation-for-symbian-development-when</link>
      <pubDate>Fri, 11 Apr 2008 16:24:17 +0200</pubDate>   
  </item>
    <item>
   <title>Another hack for Symbian Platform Security</title>
   <description>&lt;p&gt;
One of my articles that has gained lots of attention was written about &lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/10/symbian-platform-security-hacked.html&quot;&gt;hacking Symbian Platform Security&lt;/a&gt;. Although it turned out that reproducing the workaround found by &lt;a href=&quot;http://www.symbaali.info/&quot;&gt;Symbiaali&lt;/a&gt;
is laborous, requires strong technical knowledge and its wide-spread
use is very unlikely, it clearly showed me that people were interested
in this topic.&lt;br /&gt;
&lt;br /&gt;
Today I found another post at &lt;a href=&quot;http://www.symbian-freak.com/news/008/03/s60_3rd_ed_has_been_hacked.htm&quot;&gt;Symbian Freak&lt;/a&gt;
that describes just another way to turn Symbian operating system&#039;s
well-known permission checking feature off. Although I don&#039;t agree with
the title of the article (&lt;span style=&quot;font-style: italic&quot;&gt;good-bye?? S60??&lt;/span&gt;), I think at least it&#039;s worth a few words.&lt;br /&gt;
&lt;br /&gt;
What
is this crack about? How can we cheat Platform Security capability
checking so that it does not care if our program really has the
capability being checked or not? Well, in a very special way:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Take a development environment for Symbian, like &lt;a href=&quot;http://www.newlc.com/Codewarrior-for-Symbian-OS.html&quot;&gt;CodeWarrior Pro&lt;/a&gt; or &lt;a href=&quot;http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/&quot;&gt;Carbide.C++ Pro&lt;/a&gt;. Please note that you will need the ability of on-device debugging, that&#039;s why &lt;span style=&quot;font-weight: bold&quot;&gt;CodeWarrior Personal/Carbide.C++ Express&lt;/span&gt; is not enough. I&#039;m unsure if &lt;span style=&quot;font-weight: bold&quot;&gt;Carbide.C++ &lt;span style=&quot;font-style: italic&quot;&gt;Developer &lt;/span&gt;Edition&lt;/span&gt; was enough (this is between &lt;span style=&quot;font-weight: bold&quot;&gt;Express &lt;/span&gt;and &lt;span style=&quot;font-weight: bold&quot;&gt;Professional&lt;/span&gt;), but I doubt that. More on this later.&lt;/li&gt;
	&lt;li&gt;Prepare everything for on-device debugging (connect phone to PC, install &lt;span style=&quot;font-family: courier new&quot;&gt;MetroTRK&lt;/span&gt; to phone, etc.).&lt;/li&gt;
	&lt;li&gt;Start any program from within the development environment (aka IDE) in debug mode.&lt;/li&gt;
	&lt;li&gt;Change
	some bits in the kernel stack responsible for security enforcement.
	This is the most critical place, where you can really turn everything
	upside-down. And since you can do that, I believe it&#039;s &lt;span style=&quot;font-weight: bold&quot;&gt;Carbide.C++ &lt;u&gt;Professional&lt;/u&gt; Edition&lt;/span&gt; that you need and not &lt;span style=&quot;font-weight: bold&quot;&gt;&lt;u&gt;Developer&lt;/u&gt;&lt;/span&gt; - latter is less expensive, but in turn it provides only &lt;span style=&quot;font-weight: bold&quot;&gt;on-device &lt;/span&gt;&lt;u style=&quot;font-weight: bold&quot;&gt;application&lt;/u&gt;&lt;span style=&quot;font-weight: bold&quot;&gt; debugging&lt;/span&gt; in contrast with Pro&#039;s &lt;u style=&quot;font-weight: bold&quot;&gt;system&lt;/u&gt;&lt;span style=&quot;font-weight: bold&quot;&gt; debugging&lt;/span&gt;.&lt;/li&gt;
	&lt;li&gt;Voil&amp;agrave;, we&#039;re done - we have access basically to anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;Disadvantages&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
	&lt;li&gt;The &lt;span style=&quot;font-weight: bold&quot;&gt;crack is temporar&lt;/span&gt;y, since everything is done in RAM.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Required tools are expensive&lt;/span&gt;: CW Pro was available at ~&lt;span style=&quot;font-weight: bold&quot;&gt;$1.700&lt;/span&gt; (the product is discontinued and cannot be bought officially), Carbide.C++ &lt;span style=&quot;font-weight: bold&quot;&gt;&lt;u&gt;Pro&lt;/u&gt;&lt;/span&gt; can be purchased for &lt;span style=&quot;font-weight: bold&quot;&gt;$1.300&lt;/span&gt;.&lt;/li&gt;
	&lt;li&gt;Break is &lt;span style=&quot;font-weight: bold&quot;&gt;limited to one device&lt;/span&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Proved to work only on Nokia N80&lt;/span&gt;, on other &amp;quot;&lt;span style=&quot;font-style: italic&quot;&gt;hotter&lt;/span&gt;&amp;quot; devices (like the N95) it does not work or at least nobody has been able to make it work so far.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;What kind of damage &lt;/span&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;can &lt;/span&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;a cracker &lt;/span&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;still &lt;/span&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;do?&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Explore file system&lt;/span&gt;, discover what is stored where and how (as if you had &lt;span style=&quot;font-family: courier new&quot;&gt;AllFiles&lt;/span&gt; and/or &lt;span style=&quot;font-family: courier new&quot;&gt;TCB&lt;/span&gt; capability) and exploit it.&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Access to DRM-protected content&lt;/span&gt; (as if you had &lt;span style=&quot;font-family: courier new&quot;&gt;DRM&lt;/span&gt; capability). This might be more dangerous as you can download e.g. DRMed music once and sell it multiple times later on.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
To
sum up this post, this new way of cheating Platform Security is the
traditional way of cracking. I&#039;m not surprised that it had been
discovered and published, I just wonder &lt;span style=&quot;font-weight: bold&quot;&gt;why it has taken so long?&lt;/span&gt; And finally, I don&#039;t think that it would cause major problems in Symbian ecosystem.&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
Tote
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Corrected the name of Carbide.C++ edition to Express. Thanks Lucian! 
&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2008/03/09/another-hack-for-symbian-platform-security</link>
      <pubDate>Sun, 09 Mar 2008 23:35:04 +0100</pubDate>   
  </item>
    <item>
   <title>Tilt-O-Mania, also known as Nokmote</title>
   <description>&lt;p&gt;Have you ever felt that your idea is stolen and &amp;quot;Damn, I wish I had been faster in doing it&amp;quot;? Now I feel exactly that way.&lt;br /&gt;&lt;br /&gt;The first time I heard that another Nokia phone, N95, has a built-in accelerometer I started wondering &lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt;why on Earth&lt;/span&gt;? Why on Earth &lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt;is it worth&lt;/span&gt; for Nokia to put such a device in their phone? &lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt;Has &lt;a href=&quot;http://europe.nokia.com/A4160003&quot;&gt;Nokia 5500 Sport&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-style: italic&quot;&gt;(first Nokia device with built-in accelerometer)&lt;/span&gt;&lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt; proven&lt;/span&gt;
that it&amp;#39;s worth making further experiments with? I haven&amp;#39;t seen any
analysis telling so, although I admit that it doesn&amp;#39;t mean anything.
Why on Earth has &lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt;Nokia kept it secret&lt;/span&gt;&lt;span style=&quot;font-weight: bold&quot;&gt; &lt;/span&gt;that there was such a gadget in their hottest device? &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;Is it a secret?&lt;/span&gt; Isn&amp;#39;t it something that makes the device even cooler?&lt;br /&gt;&lt;br /&gt;Then I started to think about what we could do with it? First, I thought &lt;a href=&quot;http://bysamir.fr/rotateme/&quot;&gt;RotateMe&lt;/a&gt; was a great software, I really liked the idea. But I felt something was missing. Then I found it: why not &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;simulate joystick key presses&lt;/span&gt;
(i.e. left, right, up, down + press) by tilting the device to the right
direction? Since it&amp;#39;s fairly easy to simulate key events in Symbian C++
just as if they had really occured, I thought it was easy to implement.
The good thing in this idea that &lt;span style=&quot;font-weight: bold&quot;&gt;it works with existing software&lt;/span&gt;, no need to re-write or adapt anything: &lt;span style=&quot;font-weight: bold&quot;&gt;applications will not notice the difference&lt;/span&gt; between real keystroke and simulated.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;Tilt-O-Mania&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That would have been the name of my software. R.I.P. Now it&amp;#39;s called &lt;a href=&quot;http://www.bysamir.fr/nokmote/&quot;&gt;Nokmote&lt;/a&gt; and it&amp;#39;s not mine at all. :( Sorry guys behind the &amp;quot;sad smiley&amp;quot;, &lt;span style=&quot;font-weight: bold&quot;&gt;I&amp;#39;m happy&lt;/span&gt; that you&amp;#39;ll come out with an implementation, but I must tell you that &lt;span style=&quot;font-weight: bold&quot;&gt;I&amp;#39;m unhappy&lt;/span&gt; that you&amp;#39;ll come out with it. :)&lt;br /&gt;&lt;br /&gt;To
be honest, I was always wondering why nobody had ever discovered the
opportunity in writing such a software. As more and more S60 devices
will come out with built-in accelerometer &lt;span style=&quot;font-weight: bold&quot;&gt;this feature could become &lt;/span&gt;such &lt;span style=&quot;font-weight: bold&quot;&gt;an integral part of user experience &lt;/span&gt;that even Nokia might want to use it. I dare to claim that even the &lt;span style=&quot;font-weight: bold&quot;&gt;joystick could be replaced &lt;/span&gt;by the accelerometer + this solution in the future. Not only could Nokia &lt;span style=&quot;font-weight: bold&quot;&gt;save some money&lt;/span&gt; by removing some existing hardware (i.e. the joystick), but they might even be able to &lt;span style=&quot;font-weight: bold&quot;&gt;use the new spare space for other purposes&lt;/span&gt;. Isn&amp;#39;t it so cool?&lt;br /&gt;&lt;br /&gt;And you know what? The solution is &lt;span style=&quot;font-weight: bold&quot;&gt;not Nokia/Symbian specific&lt;/span&gt;: any (mobile) device having a &lt;span style=&quot;font-weight: bold&quot;&gt;motion sensor&lt;/span&gt; could do on-screen navigation like this. Another Symbian phone, &lt;a href=&quot;http://www.apple.com/iphone/&quot;&gt;iPhone&lt;/a&gt;, &lt;a href=&quot;http://www.openhandsetalliance.com/index.html&quot;&gt;gPhone&lt;/a&gt;
even a laptop, though it would be funny to see a businessman tilting
his computer at the airport just for the sake of navigation. :)&lt;br /&gt;&lt;br /&gt;On the other hand, I was shocked to find that my(?) &lt;span style=&quot;font-weight: bold&quot;&gt;idea was not original&lt;/span&gt;
at all. I mean not that now somebody has come out with an
implementation for S60, but this idea was implemented years(!) ago on
another mobile phone. You know, some of my colleagues have worked with
a &lt;span style=&quot;font-weight: bold&quot;&gt;MyOrigo&lt;/span&gt; device and when I told them my idea they enlightened me that it had already been implemented. Check out &lt;a href=&quot;http://www.theregister.co.uk/2003/07/02/reg_testdrives_myorigo_motion_control/&quot;&gt;this article&lt;/a&gt; from &lt;a href=&quot;http://www.theregister.co.uk/&quot;&gt;The Register&amp;nbsp;&lt;/a&gt; and
you&amp;#39;ll see that such a device is already on the market. Okay, it is a
not-really-famous mobile phone and perhaps it doesn&amp;#39;t even make use of
accelerometer data, but still the idea is theirs: user tilts software
navigates.&lt;br /&gt;&lt;br /&gt;Never mind, although I&amp;#39;m sorry to see that I can&amp;#39;t be
THE pioneer in this area, I&amp;#39;m happy to see that it&amp;#39;ll be available to
us soon. Good luck for writing the software!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Originally from &lt;/strong&gt;&lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/11/tilt-o-mania-also-known-as-nokmote.html&quot;&gt;mobile-thoughts.blogspot.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Tote&lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/11/15/tilt-o-mania-also-known-as-nokmote</link>
      <pubDate>Thu, 15 Nov 2007 15:09:37 +0100</pubDate>   
  </item>
    <item>
   <title>Android SDK is out - first impressions</title>
   <description>&lt;p&gt;After watching the video about the introduction of &lt;a href=&quot;http://www.youtube.com/watch?v=1FJHYqE0RDg&quot;&gt;Android for developers&lt;/a&gt;, I&amp;#39;m convinced that the new phone will generally be as &lt;u&gt;useful&lt;/u&gt; and &lt;u&gt;user-friendly&lt;/u&gt; as e.g. the-also-newcomer &lt;a href=&quot;http://www.apple.com/iphone/&quot;&gt;iPhone&lt;/a&gt;.
Well, it came as no surprise to me, I&amp;#39;m just expecting a lot of
innovation from the new player in mobile space. I don&amp;#39;t expect that the
new platform will offer as many features as traditional Symbian-powered
devices and I can even dare to say that it&amp;#39;s not going to be as stable,
either ... yet. However, I&amp;#39;m pretty sure that they will catch up soon
and offer real alternatives for users, phone manufacturers, operators,
etc.&lt;br /&gt;&lt;br /&gt;What has totally escaped my attention, though, was that the programming language for this platform would be &lt;span style=&quot;font-weight: bold&quot;&gt;Java&lt;/span&gt;.
Based on the fact that it&amp;#39;s going to be a Linux-based OS I kind of
anticipated that the programming language would be C/C++. I don&amp;#39;t know
the rationale behind this decision, but it will definitely give a boost
to the otherwise stagnating JME programming environment.&lt;br /&gt;&lt;br /&gt;I wonder, though, how Google is planning to solve the &lt;span style=&quot;font-weight: bold&quot;&gt;infamous Java fragmantation problem&lt;/span&gt; for mobile phones. What is that? Well, even though Java is a very &lt;u&gt;popular&lt;/u&gt; and &lt;u&gt;platform-independent&lt;/u&gt; (aka &lt;span style=&quot;font-style: italic&quot;&gt;portable&lt;/span&gt;) programming language, it&amp;#39;s just the set of Java core services that is available on every mobile device. The &lt;span style=&quot;font-weight: bold&quot;&gt;presence of additional features&lt;/span&gt;, such as advanced mobile graphics, security, etc. &lt;span style=&quot;font-weight: bold&quot;&gt;depend on phone manufacturers&amp;#39; decision&lt;/span&gt;, whether it&amp;#39;s worth adding them. Which makes Java mobile applications market very fragmanted (&lt;span style=&quot;font-style: italic&quot;&gt;some features are available, some are not&lt;/span&gt;)
and development very frustrating. You know, I have heard an example
that a mobile Java game programmer had to make 100(!) variants of his
game &amp;quot;just&amp;quot; to be able to distribute it to as many phones as possible.&lt;br /&gt;&lt;br /&gt;Another
thing about mobile Java development is that most mobile phones are
running on another operating system than Java. In fact, Java is not an
operating system at all, even though there have been attempts to make
Java-based mobile platforms, see e.g. &lt;a href=&quot;http://www.savaje.com/&quot;&gt;SaveJe&lt;/a&gt; for more details. But &lt;a href=&quot;http://www.symbian.com/&quot;&gt;Symbian&lt;/a&gt; OS is similar to &lt;a href=&quot;http://code.google.com/android/what-is-android.html&quot;&gt;Android&lt;/a&gt; platform in that they both have their native platform (&lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;Symbian OS&lt;/span&gt; and &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;Linux&lt;/span&gt;, respectively) meaning that platform features are usually available in native programming language first and then some &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Native_Interface&quot;&gt;JNI&lt;/a&gt; layer added on the top and there you are, it&amp;#39;s  ready for Java programmers. So far so good. However, it &lt;span style=&quot;font-style: italic&quot;&gt;introduces some latency&lt;/span&gt;
in the equation as it requires some time to write features in native
environment first and wrap it in the second round. Will Android suffer
from the same problem?&lt;br /&gt;&lt;br /&gt;My regular readers already know that I
was involved in S60 Browser development and it was very challenging and
I really liked it. For that reason, I&amp;#39;m happy to see that &lt;span style=&quot;font-weight: bold&quot;&gt;Google chose WebKit&lt;/span&gt; for their mobile browser (&lt;a href=&quot;http://www.s60.com/browser/&quot;&gt;S60 Browser&lt;/a&gt;
is also based on this rendering engine) and in the demonstration it
worked well. I was wondering which display method they would choose for
web pages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;S60 approach&lt;/span&gt; that displays the web page in its entirety without scaling&lt;br /&gt;&lt;/li&gt;&lt;li&gt;or &lt;span style=&quot;font-weight: bold&quot;&gt;iPhone approach&lt;/span&gt;
that scales down the web page to so that it fits to display dimensions,
though it&amp;#39;s hardly readable, but lets the user zoom it very
conveniently (e.g. by double-tapping on screen)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;They actually chose both: they first display the page without scaling and then user can scale it &lt;span style=&quot;font-weight: bold&quot;&gt;down&lt;/span&gt; for better navigation. I&amp;#39;m pretty sure that Nokia has their own IPR on &lt;span style=&quot;font-weight: bold&quot;&gt;MiniMap&lt;/span&gt;
(i.e. the zooming interface) so that might be one of the reasons why
Google didn&amp;#39;t choose that option. However, what surprised me that they
use the same visual history for page navigation as in S60 Browser.&lt;br /&gt;&lt;br /&gt;So
these are my first impressions after spending half an hour with Android
after midnight. I&amp;#39;m really keen to hear your comments - just as usual!
:)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Originally from&lt;/strong&gt; &lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/11/android-sdk-is-out-first-impressions.html&quot;&gt;mobile-thoughts.blogspot.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tote&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-weight: bold&quot;&gt;[Update]:&lt;/span&gt; I&amp;#39;m shocked, check this out: &lt;a class=&quot;bb-url&quot; href=&quot;http://www.betaversion.org/%7Estefano/linotype/news/110/&quot;&gt;Dalvik: how Google routed around Sun&amp;#39;s IP-based licensing restrictions on Java ME&lt;/a&gt;. It basically says that Android phones will &lt;span style=&quot;font-weight: bold&quot;&gt;NOT&lt;/span&gt; be JME-powered, but you can write &lt;span style=&quot;font-weight: bold&quot;&gt;&lt;span style=&quot;text-decoration: underline&quot;&gt;JSE programs&lt;/span&gt;&lt;/span&gt; to them. With &lt;span style=&quot;font-style: italic&quot;&gt;Android&lt;/span&gt;, Google has introduced their own VM, &lt;span style=&quot;font-style: italic&quot;&gt;Dalvik&lt;/span&gt;,
which eventually does not make use of Java bytecode, but their own
Dalvik format. It&amp;#39;s all to get rid of Sun being involved in licensing.&lt;br /&gt;It&amp;#39;s
another question how good or bad will it be to the community. It means
a new variant on the horizon, a VM incapable of running so-far-standard
Java bytecode, thus your midlets will have to be re-compiled. I can see
why Google is happy to have their own solution to this problem, but I
can also see why developers would be unhappy due to that they&amp;#39;ll have
to take just another Java variant into consideration. Even if their
pockets will be full with (Google&amp;#39;s) money. &lt;/p&gt;</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/11/13/android-sdk-is-out-first-impressions</link>
      <pubDate>Tue, 13 Nov 2007 03:15:17 +0100</pubDate>   
  </item>
    <item>
   <title>Symbian Platform Security - hacked?</title>
   <description>&lt;p&gt;Well, 3:00am has already passed and I&amp;#39;m tired and sleepy. One thing doesn&amp;#39;t let me sleep, though. I&amp;#39;ve just stumbled upon these articles (&lt;a href=&quot;http://www.symbaali.info/2007/10/exploring-s60-with-allfiles.html&quot;&gt;Exploring S60 with AllFiles&lt;/a&gt; and &lt;a href=&quot;http://www.symbaali.info/2007/10/goodbye-s60-platform-security-hello.html&quot;&gt;Goodbye S60 Platform Security, Hello CAPABILITIES!&lt;/a&gt;) and I can&amp;#39;t believe my eyes: &lt;span style=&quot;font-weight: bold&quot;&gt;Platform Security hacked?!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Briefly, the solution is as follows:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Take a firmware update package (currently supported only by Nokia for their S60 phones).&lt;/li&gt;
    &lt;li&gt;Edit a well-isolated part of it, where all those capabilities (i.e. rights) are listed that a user can grant to a 3&lt;sup&gt;rd&lt;/sup&gt; party application upon installation. Remove existing capabilities, add new ones, whatever.&lt;/li&gt;
    &lt;li&gt;Flash it.&lt;/li&gt;
&lt;/ul&gt;
Now you have such a phone (software) that allows you to give so powerful rights to any 3&lt;sup&gt;rd&lt;/sup&gt; party application that they can do basically &lt;span style=&quot;font-weight: bold; font-style: italic&quot;&gt;anything&lt;/span&gt; on the device. For example, your program can access DRM-protected content (you&amp;#39;ve downloaded it once and share it with others), browse other applications&amp;#39; secret folders, etc. You just need to&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Extract a signed SIS (Symbian Installation) file&lt;/li&gt;
    &lt;li&gt;Add rights to it (whatever gives them more power)&lt;/li&gt;
    &lt;li&gt;Re-pack &amp;amp; sign it again&lt;/li&gt;
    &lt;li&gt;And install it&lt;/li&gt;
    &lt;li&gt;Although the Software Installer will notice that the application was not properly signed (== acquires for more capabilities than it can normally have), the user will be in such a position that he can grant those extra rights.&lt;/li&gt;
&lt;/ul&gt;
Actually, this is the approach that the author of the aforementioned articles followed with regards to a very popular file browser application: he added &lt;tt&gt;AllFiles&lt;/tt&gt; capability to the program so that he could explore the entire file system, which he hadn&amp;#39;t been able to do until then.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I can&amp;#39;t prove or disprove whether this solution really works, since I haven&amp;#39;t even updated my N95&amp;#39;s firmware yet (shame on me!). However, this guy seems to know what he was talking about and I sort of a believe him.&lt;br /&gt;
&lt;br /&gt;
In any case, if what he wrote happens to be true, then I have a few questions:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Why on earth did Symbian &lt;span style=&quot;font-weight: bold&quot;&gt;publish such a confidential information&lt;/span&gt; that is useful solely for phone manufacturers? You know, the documentation of &lt;a href=&quot;http://www.symbian.com/developer/techlib/v9.2docs/doc_source/ToolsAndUtilities/Installing-ref/swipolicy.html&quot;&gt;Software Installation Policy&lt;/a&gt; is a very internal thing, not &lt;span style=&quot;font-style: italic; font-weight: bold&quot;&gt;anyone&lt;/span&gt;&amp;#39;s business. You can see that it&amp;#39;s enough if one talented person stumbles upon that documentation and uses it.&lt;/li&gt;
    &lt;li&gt;Why is a firmware package in such a format that &lt;span style=&quot;font-weight: bold&quot;&gt;anyone can edit&lt;/span&gt; it? I mean, locally on their machine. Okay, with such a &lt;a href=&quot;http://en.wikipedia.org/wiki/Dd_%28Unix%29&quot;&gt;low-level tool&lt;/a&gt; that very few people are familiar with, but it&amp;#39;s still possible. Wouldn&amp;#39;t it have made more sense to encrypt and sign the package so that
    &lt;ul&gt;
        &lt;li&gt;it cannot be decrypted by 3&lt;sup&gt;rd&lt;/sup&gt; parties (well, easily at least)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul&gt;
        &lt;li&gt;it gets decrypted only on the target device right before flashing?&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;margin-left: 14px; margin-bottom: 3px; padding-left: 20px&quot;&gt;You know, I&amp;#39;m not a security expert, so I might easily be suggesting a stupid thing, but if there&amp;#39;s any chance to do it that way, I think it&amp;#39;s definitely worth the effort.&lt;/span&gt;
&lt;ul&gt;
    &lt;li&gt;But even if it&amp;#39;s not viable, then why does the firmware package update the &lt;span style=&quot;font-weight: bold&quot;&gt;whole&lt;/span&gt; system including the most critical parts? You could see that one can change the software installation policy this way. Why not make a process consisting of two steps:
    &lt;ul&gt;
        &lt;li&gt;User can download and flash a firmware package that updates the (vast) majority of the system, but it &lt;span style=&quot;font-style: italic&quot;&gt;doesn&amp;#39;t allow him to touch the critical parts&lt;/span&gt;&lt;/li&gt;
        &lt;li&gt;Those critical parts can either &lt;span style=&quot;font-weight: bold&quot;&gt;NOT&lt;/span&gt; be updated at all or only at &lt;span style=&quot;font-weight: bold&quot;&gt;service points&lt;/span&gt;.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
I just really don&amp;#39;t know what I&amp;#39;ve expected from Platform Security, but I have a feeling that in my secret dreams I thought it was unbreakable (I know, I&amp;#39;m naive). Again, I&amp;#39;m still looking for confirmation as to whether this solution really works, but I&amp;#39;m afraid that I already feel the bitter taste in my mouth. You know, a &lt;a href=&quot;http://live.sdnhost.com/main/downloads/papers/PlatSec_and_Symbian_Signed.pdf&quot;&gt;system&lt;/a&gt; that Symbian is proud of, &lt;a href=&quot;http://www.allaboutsymbian.com/news/item/4187_Operators_locking_handsets_Sym.php&quot;&gt;operators love&lt;/a&gt; (some &lt;a href=&quot;http://mobilephonedevelopment.com/archives/240&quot;&gt;developers hate&lt;/a&gt;:) and even &lt;a href=&quot;http://mobile.antonypranata.com/2007/10/17/platform-security-on-apples-iphone/&quot;&gt;competitors acknowledge&lt;/a&gt; shall not be attackable and even if a security hole is discovered it shall be closed quickly without any major impacts. Nevertheless, I think this problem can be solved - hopefully very easily. But as to injecting the fixed version on to old phones, it will just take &lt;span style=&quot;font-weight: bold&quot;&gt;another firmware update&lt;/span&gt;. :)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Originally from &lt;/strong&gt;&lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/10/symbian-platform-security-hacked.html&quot; target=&quot;undefined&quot;&gt;mobile-thoughts.blogspot.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Tote&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold&quot;&gt;Update:&lt;/span&gt; another fellow Forum Nokia Champion of mine, &lt;a href=&quot;http://www.forum.nokia.com/main/forum_nokia_champion/forum_nokia_champions/Antony_Pranata.html&quot;&gt;Antony Pranata&lt;/a&gt;, wrote an &lt;a href=&quot;http://mobile.antonypranata.com/2007/10/26/symbians-platform-security-is-hacked&quot;&gt;article&lt;/a&gt; about the very same topic. I think it completes my post in addition to confirming that the solution works. Worth reading.</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/10/27/symbian-platform-security-hacked</link>
      <pubDate>Sat, 27 Oct 2007 03:48:18 +0200</pubDate>   
  </item>
    <item>
   <title>Symbian Signed is not an anti-virus software</title>
   <description>The Register &lt;a href=&quot;http://www.theregister.co.uk/2007/05/23/symbian_signed_spyware/&quot;&gt;reported&lt;/a&gt; today that a new &lt;a href=&quot;http://en.wikipedia.org/wiki/Spyware&quot;&gt;spyware&lt;/a&gt; for mobile phones had appeared on the horizon. It&#039;s harmful for S60 phones, too, 3&lt;sup&gt;rd&lt;/sup&gt; Edition devices included. And what causes the stir in the water is that it&#039;s a &lt;font style=&quot;font-weight: bold;&quot;&gt;Symbian Signed application&lt;/font&gt;.&lt;br /&gt;&lt;br /&gt;There&#039;s a general misconception here, I&#039;m afraid. I think the biggest problem most people don&#039;t understand that signing has not much to do with protection against malicious programs. These people don&#039;t understand that the process is about &lt;font style=&quot;font-style: italic;&quot;&gt;signing&lt;/font&gt; (surprisingly)&lt;font style=&quot;font-style: italic;&quot;&gt;,&lt;/font&gt; i.e. certifying that the application comes from a well-known source. Additionally, in order for an application to be &lt;a href=&quot;http://www.symbiansigned.com/&quot;&gt;Symbian Signed&lt;/a&gt; it must undergo thorough testing being done by independent test houses. Since this application is Symbian Signed, it must have passed those tests.&lt;br /&gt;&lt;br /&gt;The problem is that it&#039;s impossible to test everything an application can do. It&#039;s even possible to acquire for a capability (and get it!) just by saying that the application needs it &lt;font style=&quot;font-style: italic;&quot;&gt;&lt;u&gt;for a different purpose&lt;/u&gt;&lt;/font&gt;. As this example shows: I can ask for e.g. &lt;tt&gt;NetworkServices&lt;/tt&gt; capability and say that I need it for remote backup. And then make no mention on the fact that I will use it for other reasons, too. You know, it can be done since no-one checks the source code, it&#039;s not part of the approval process for Symbian Signed certification. And it will never be, I suppose, as no-one will ever share their best kept secret (i.e. the source code) with outsiders.&lt;br /&gt;&lt;br /&gt;What Symbian (Signed) could do better, though, is that they shouldn&#039;t advertise these signed applications as &lt;font style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&amp;quot;&lt;/font&gt;&lt;font style=&quot;font-weight: bold; font-style: italic;&quot;&gt;trusted&lt;/font&gt;&lt;font style=&quot;font-weight: bold; font-style: italic;&quot;&gt;&amp;quot;&lt;/font&gt;. Because they aren&#039;t. What you can trust, though, is that the author of a Symbian Signed application is &lt;font style=&quot;font-weight: bold;&quot;&gt;&lt;u&gt;accountable&lt;/u&gt;&lt;/font&gt;. If he/she/they produce a software that proves to contain some malicious code, then they can be &amp;quot;caught&amp;quot; and counter-measures can be taken. What counter-measures? For example, the author&#039;s certificate can be revoked and added to a list, called &lt;font style=&quot;font-style: italic;&quot;&gt;Certificate Revocation List&lt;/font&gt; or &lt;font style=&quot;font-style: italic;&quot;&gt;CRL&lt;/font&gt; for short. This list can be always checked upon on-line. For example, when a user is just about to install a 3&lt;sup&gt;rd&lt;/sup&gt; party software whose author is not known (or at least not &lt;font style=&quot;font-style: italic;&quot;&gt;trusted&lt;/font&gt;), the &lt;font style=&quot;font-weight: bold;&quot;&gt;Application Installer&lt;/font&gt; can do this cross-verification as part of the installation process. Pretty useful info, isn&#039;t it? Worth noting that most users are not aware of this and they have this feature disabled on their phones. Including me, but that&#039;s on purpose. :-&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Original from &lt;/span&gt;&lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/05/symbian-signed-is-not-anti-virus.html&quot;&gt;mobile-thoughts.blogspot.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just my two cents,&lt;br /&gt;&lt;br /&gt;Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/05/23/symbian-signed-is-not-an-anti-virus-software</link>
      <pubDate>Wed, 23 May 2007 16:35:10 +0200</pubDate>   
  </item>
    <item>
   <title>Design patterns in Symbian</title>
   <description>This time my post will be a short one. :)&lt;br /&gt;&lt;br /&gt;You know, I&#039;ve been thinking about writing some posts on various &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29&quot;&gt;design patterns&lt;/a&gt; applied in Symbian OS core components. My motivation is first that I enjoy reading/using code that has been carefully and nicely designed. Second, I wanted (and I still do) to encourage each developer to always think before starting to implement any solution for a given task/problem. It may sound as a cliche, but I found it a very common pattern that people (i.e. developers) had not considered how&lt;span style=&quot;font-style: italic;&quot;&gt; others&lt;/span&gt; will use their module (&lt;span style=&quot;font-style: italic;&quot;&gt;niceness &lt;/span&gt;of interface, &lt;span style=&quot;font-style: italic;&quot;&gt;readability&lt;/span&gt; of source code, etc.), how it &lt;span style=&quot;font-style: italic;&quot;&gt;fits into the big picture&lt;/span&gt;, how &lt;span style=&quot;font-style: italic;&quot;&gt;future-proof&lt;/span&gt; it is, etc. You know, ideally you shouldn&#039;t just code something, but rather do it nicely. That&#039;s the difficult part.&lt;br /&gt;&lt;br /&gt;Even though I found this idea pretty challenging I&#039;ve kept postponing my first article on this topic for various reasons. Now I&#039;m late - at least with the first article. :) I&#039;ve just noticed that &lt;a href=&quot;http://www.newlc.com/user/rensijie&quot;&gt;rensijie&lt;/a&gt; from &lt;a href=&quot;http://www.newlc.com/&quot;&gt;NewLC.com&lt;/a&gt; had posted two article about design patterns:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.newlc.com/when-symbian-met-design-patterns-1-state-pattern&quot;&gt;When Symbian met Design Patterns (1) -- State Pattern&lt;/a&gt; and&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.newlc.com/when-symbian-met-design-patterns-2-proxy-pattern&quot;&gt;When Symbian met Design Patterns (2) -- Proxy Pattern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Good posts, Rensijie! I&#039;m really looking forward to the next article on the topic. Or even I might add some. :)&lt;br /&gt;&lt;br /&gt;Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/04/25/design-patterns-in-symbian</link>
      <pubDate>Wed, 25 Apr 2007 12:34:31 +0200</pubDate>   
  </item>
    <item>
   <title>Protecting APIs - a different approach</title>
   <description>I have been wondering lately if the current is the most optimal way of protecting APIs in the S60 (or Symbian in general) C++ SDKs. It must not come as a surprise to any programmers that &lt;span style=&quot;font-weight: bold;&quot;&gt;there are far more features&lt;/span&gt; in these SDKs than what we can use with the publicly available functions. But they are usually &lt;span style=&quot;font-style: italic;&quot;&gt;hidden&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;How?&lt;/span&gt; Before answering this question, some technical details. In order to use a certain feature in C++ the following two conditions must be met:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;The header file including the function to be called must be publicly available in the SDK,&lt;/li&gt;
    &lt;li&gt;The component, typically a DLL and its associated LIB file, must be publicly available in the SDK.&lt;/li&gt;
&lt;/ul&gt;
The first condition ensures that the code compiles, the second that the link process will succeed. The most common practice that Nokia applies when they want to protect an API (i.e. not let 3rd party use it) is that they &lt;span style=&quot;font-style: italic;&quot;&gt;remove the header file&lt;/span&gt; in question. I would call it as a &lt;span style=&quot;font-weight: bold;&quot;&gt;lazy protection &lt;/span&gt;as it does not protect against &lt;span style=&quot;font-style: italic;&quot;&gt;reverse engineering&lt;/span&gt;. For example, as soon as the API becomes publicly available there is nothing that can prevent a developer from making use of that functionality. Okay, Nokia clearly forbids reverse engineering in their license agreement, but there might be people who think it in a &lt;a href=&quot;http://mikie.iki.fi/wordpress/?p=38&quot;&gt;different way&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The second type of protection, let&#039;s call it &lt;span style=&quot;font-weight: bold;&quot;&gt;hard protection&lt;/span&gt;, is to &lt;span style=&quot;font-style: italic;&quot;&gt;remove both the header and the LIB&lt;/span&gt; (that we import in our MMP) from the SDK so that neither compilation nor linking succeeds. Naturally, the DLL must remain in the SDK as usually it already has clients that use the provided functionality. This &lt;span style=&quot;font-style: italic;&quot;&gt;workaround&lt;/span&gt; is also applied by Nokia and Symbian alike. Sometimes they make it so that the LIB file is missing only under emulator platform (i.e. WINSCW), but not from the target platform (e.g. ARMv5). This makes it more difficult for developers to test their software - but not impossible. Since if you cannot link against a DLL &lt;span style=&quot;font-style: italic;&quot;&gt;statically&lt;/span&gt;, then you can still do it &lt;span style=&quot;font-style: italic;&quot;&gt;dynamically&lt;/span&gt;. You just need to use &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;RLibrary&lt;/span&gt; class for that purpose and call the exported methods based on their &lt;span style=&quot;font-style: italic;&quot;&gt;ordinals&lt;/span&gt;. Okay, it&#039;s by far not trivial and now we&#039;re knee-deep in sensitive and confidential data, but it IS possible.&lt;br /&gt;&lt;br /&gt;Let&#039;s just stop here for a minute to think about why Nokia (probably) follows the above-described practice! If I wanted to protect some data and not let others use it, then I would do &lt;span style=&quot;font-weight: bold;&quot;&gt;everything&lt;/span&gt; in order to impede people to make use of it. Not just invent some &lt;span style=&quot;font-style: italic;&quot;&gt;hackish&lt;/span&gt; solutions that can be relatively easily bypassed, but make it really hard for others to hack. But &lt;span style=&quot;font-style: italic;&quot;&gt;it might not be in Nokia&#039;s interest&lt;/span&gt; to do so. You know, they have partners to &lt;span&gt;whom&lt;/span&gt; they open up some - non-published, but available - APIs every now and then. And if they can choose from simply giving access to a header file OR sharing e.g. a LIB file, too, then they naturally vote for the first option. In my opinion it&#039;s much easier to do due to e.g. traceability reasons.&lt;br /&gt;&lt;br /&gt;We have now finally reached the point where I can talk about my idea on a (probably) better way to protect APIs. You know, there&#039;s a &lt;span style=&quot;font-style: italic;&quot;&gt;rule of thumb&lt;/span&gt; in Symbian C++ programming as of the introduction of Platform Security: if you have sensitive information (I mean, &lt;span style=&quot;font-style: italic;&quot;&gt;data&lt;/span&gt;) to protect, then you&#039;re suggested to &lt;span style=&quot;font-weight: bold;&quot;&gt;write a server and let it guard&lt;/span&gt; that data. This solution also enables you to smoothly control who and how can access the protected resource. I believe that Nokia has already re-factored their code according to this pattern so that all sensitive data is taken care of by various servers. These servers may then check against capabilities, secure and/or vendor IDs. Ideally, there is no sensitive data by now that is not protected by a server.&lt;br /&gt;&lt;br /&gt;And this is the point where I ask: &lt;span style=&quot;font-weight: bold;&quot;&gt;why not make every API &lt;u&gt;public&lt;/u&gt; &lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;so that everyone can use it?&lt;/span&gt; Following from all above, security must not be a concern here, since access to sensitive data is already under control. On the other hand, developers &lt;span style=&quot;font-style: italic;&quot;&gt;could greatly benefit&lt;/span&gt; from having access to DLLs that have been hidden from them so far. You know, I&#039;m talking about a big bunch of features that have been written by some talented developers at Nokia, Symbian, etc. and hidden &lt;span style=&quot;font-style: italic;&quot;&gt;unnecessarily&lt;/span&gt;. Why not let others make use of those features if it doesn&#039;t harm?&lt;br /&gt;&lt;br /&gt;There&#039;s an exception, though. If the piece of information to be protected is &lt;span style=&quot;font-weight: bold;&quot;&gt;not data&lt;/span&gt;, but an &lt;span style=&quot;font-weight: bold;&quot;&gt;algorithm&lt;/span&gt;, for example. If it&#039;s not of big importance what data we work on, but &lt;span style=&quot;font-style: italic;&quot;&gt;how&lt;/span&gt;. Garnished possibly with some &lt;a href=&quot;http://en.wikipedia.org/wiki/Intellectual_property&quot;&gt;IPR&lt;/a&gt; issues. If this is an issue and the executing code is in a DLL (i.e. not behind a server), then we can&#039;t expect too much from Platform Security. We can assign some strong capability to the DLL so that using it would not be trivial for anyone, but we&#039;d have no option for fine-tuned secure/vendor ID check, for example. Perhaps even capability constraints would not be sufficient, either. I think that we (err, I mean Nokia, Symbian and others) could re-use the existing approach in this case, that is, not publishing header and/or LIB files in the public SDKs. You know, I don&#039;t think we should fully get rid of the current solution, but at least suggest to use it moderately.&lt;br /&gt;&lt;br /&gt;Wishing to read your comments!&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Original from &lt;/span&gt;&lt;a href=&quot;http://mobile-thoughts.blogspot.com/2007/03/protected-apis-different-approach.html&quot;&gt;mobile-thoughts.blogspot.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/03/19/protecting-apis-a-different-approach</link>
      <pubDate>Mon, 19 Mar 2007 13:47:43 +0100</pubDate>   
  </item>
    <item>
   <title>Here is my program, sign it yourself!</title>
   <description>I&#039;ve bumped into the following &lt;a href=&quot;http://mobilephonedevelopment.com/archives/325&quot;&gt;blog&lt;/a&gt; today. This is exactly what I was thinking about a few weeks ago! I asked myself if developers could distribute their apps &lt;span style=&quot;font-weight: bold;&quot;&gt;freely&lt;/span&gt;? Of course, the bottleneck is that they have to sign their apps properly, which is time-consuming and costly. But if one publishes his &lt;span style=&quot;font-style: italic;&quot;&gt;unsigned&lt;/span&gt; SIS file (it can be signed as well, since a file can be re-signed), then it can be freely signed by anybody else. So that the author can get rid of the burden of having to have his application SymbianSigned before distribution takes place.&lt;br /&gt;&lt;br /&gt;One issue, though, that this workaround raises is &lt;span style=&quot;font-weight: bold;&quot;&gt;trust&lt;/span&gt;. Why would &lt;span style=&quot;font-weight: bold;&quot;&gt;I&lt;/span&gt; sign a SIS if it&#039;s from somebody whom I don&#039;t know? Why would I trust the program and presume that it will make no damage, generate extra cost, etc.? Of course, it&#039;s such an issue that must be carefully considered, case by case, program by program. But still there are programs whose authors are well-known and respected: they haven&#039;t all had time/money to bother with signing. Or let&#039;s take open source projects: unless they have good funding they will &lt;span style=&quot;font-weight: bold;&quot;&gt;never&lt;/span&gt; spend money on content signing, which cost will never be returned. Not as if I was aware of such an open source project, but still. :)&lt;br /&gt;&lt;br /&gt;So let&#039;s have a closer look at how it would work in practice! The classification of capabilities is as follows:&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Group #1:&lt;/span&gt; User-grantable capabilities that can be granted by the user upon installation.&lt;br /&gt;Capabilities: &lt;span style=&quot;font-style: italic;&quot;&gt;LocalServices, UserEnvironment, NetworkServices, Location, ReadUserData and WriteUserData.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Group #2:&lt;/span&gt; Powerful capabilities that &lt;span style=&quot;font-weight: bold;&quot;&gt;cannot be granted&lt;/span&gt; by the user, but do &lt;span style=&quot;font-weight: bold;&quot;&gt;not require&lt;/span&gt; any manufacturers&#039; approval.&lt;br /&gt;Capabilities: &lt;span style=&quot;font-style: italic;&quot;&gt;PowerMgmt, ReadDeviceData, WriteDeviceData, TrustedUI, ProtServ, SwEvent, SurroundingsDD.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Group #3:&lt;/span&gt; The most sensitive capabilities that only device manufacturers (i.e. not SymbianSigned or any other authority) can grant.&lt;br /&gt;Capabilities: &lt;span style=&quot;font-style: italic;&quot;&gt;AllFiles, CommDD, DiskAdmin, MultimediaDD, NetworkControl, TCB, DRM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If one writes a program that requires capabilities from groups #1-2 then it can be easily signed by anybody even if it demands some sort of technical mindedness. The steps for being able to install such a SIS file on our phone are as follows:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Registration on &lt;a href=&quot;http://www.symbiansigned.com&quot;&gt;SymbianSigned.com&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Requesting a developer certificate for a given IMEI (i.e. the person&#039;s own mobile phone).&lt;/li&gt;
    &lt;li&gt;Once having the DevCert, sign the program with it.&lt;/li&gt;
&lt;/ul&gt;
Following these steps enables anyone to sign any (Symbian) programs that can eventually be installed on a (Symbian) smartphone. On &lt;span style=&quot;font-style: italic;&quot;&gt;any programs&lt;/span&gt;, I meant those that do not require capabilities from the third group. Another constraint of a single DevCert is the inability to sign a program for more than one phone. That requires an &lt;a href=&quot;http://www.verisign.com/products-services/security-services/code-signing/symbian-content-signing/index.html&quot;&gt;ACS Publisher ID&lt;/a&gt; from VeriSign - costs 350 bucks, btw.&lt;br /&gt;&lt;br /&gt;And what about those programs that use APIs protected by capabilities from group #3? For them, one must have an ACS Publisher ID even for a single phone. And not only is it the cost that might prevent most people from requesting a publisher ID from VeriSign. If you&#039;d like to be able to sign programs with the most sensitive capabilities, then getting a publisher ID is the easier task. The second step is to issue a request to the device manufacturer in which you detail which capability you need and why. On API level (e.g. I need RFormat::Open() to use and for that I have to have DiskAdmin capability) and for each capability one by one. And believe me it&#039;s tough! It&#039;s time and energy consuming and sometimes doesn&#039;t lack unnecessary conversation with the manufacturer (&#039;&lt;span style=&quot;font-style: italic;&quot;&gt;we don&#039;t think you need that capability&lt;/span&gt;&#039; ... arghh).&lt;br /&gt;&lt;br /&gt;As a brief summary I still think that it&#039;s worth going on this path. For a well-isolated target group, namely &lt;span style=&quot;font-weight: bold;&quot;&gt;mobile geeks&lt;/span&gt;, but for them it&#039;s really worth. &lt;span style=&quot;text-decoration: underline;&quot;&gt;Yes, it&#039;s you&lt;/span&gt; who reads this blog. :)&lt;br /&gt;&lt;br /&gt;Tote</description>
   <link>http://blogs.forum.nokia.com/blog/gabor-toroks-forum-nokia-blog/2007/03/01/here-is-my-program-sign-it-yourself</link>
      <pubDate>Thu, 01 Mar 2007 16:22:27 +0100</pubDate>   
  </item>
  </rdf:RDF>

