Coddec released

July 14, 2008

Finally we’ve decided to release coddec to public. Well, it is not actual coddec we use “in-house” but a very first working version of it.

Source and binary are provided. Please don’t ask for documentation or how to use it, I think it is very straightforward. There is a little bug which fires exemptions in some cod files – it is easy to fix it so we’ve left it there for you :)

Coddec

Enjoy

dr bolsen

Advertisement

But battery ?

February 7, 2008

I’ve been thinking about the place where cryptographic keys module could be located and accidentally find  this  information .

The BlackBerry CS-2 Battery features a secure, cryptographic chip to ensure you’re using a battery specially designed to work with your BlackBerry device.

I am curious what kind of chip is that ? Can it be used for secure keys generation and storage for example ?


Application Registry

February 7, 2008

Application registry is a core RIM Java OS structure . To play with it add the following string

Object __appReg = Process.getAppRegistry();

to BB java project. We used “Hello World!” sample project from JDE. Sure you need correct the import section of your project by adding import net.rim.vm.*;.
Using JDE IDE set a breakpoint on the next line and execute your code in standard IDE emulator. When program stops at the breakpoint, check __appReg :)

By the way the public key mentioned in this post was discovered using this approach.


Blackberry Security Kernel – FIPS 140-2 Report

February 7, 2008

FIPS 140-2 Report .

Interesting brief description of the security keys and algorithms used in Blackberry.


8700c teardown analysis

February 7, 2008

All parts from Blackberry 8700c enumerated and documented here


What happened ?

February 7, 2008

Well to make a long story a little bit shorter – I am a dad again :). Basically that was the main reason for my silence since August last year.

Cheers


Bypass signature requirement for COD files

July 31, 2007

Actually it didn’t work as we had expected. We still cannot bypass signature control, but results, in fact, quite interesting.

After many unsuccessful experiments and reviews of both – SignatureTool and rapc , we decided to try another approach – net_rim_api. Our assumption was that any API call should be mapped to particular function prototype in net_rim_api library. If we can learn how it was done then the next step would be to create our own “prototypes” of system functions and try to bypass needs for application signing. Our assumption was “almost” correct. Why “almost” I’ll explain later.

What we did, we used information dumped from cod files, namely – class names and methods definitions, to create prototype java files. An example:

// ##########################################
// Decompiled by : coddec
// Module : XXXXXXXXXXXXXX.cod
// Module version : 4.2.1.89
// #########################################
package net.rim.vm;

public class Process
{

native public int getLastIdleCounter();
}

The trick is just simple to declare a function as native. Then the file was compiled using standard java compilator. The resulting class file was slightly corrected by JavaBite tool to remove constructor code, but I am not quite sure that it was strictly required. Anyway you are free to experiment.

Next step is to add our class file to ne_rim_api.jar file. This task is very-very simple. We used 7-Zip to accomplish that.

Well, that’s it. If in your project you call getLastIdleCounter(), rapc will compile your project without any signature warning. Why was it cool ? getLastIdleCounter() is just an example, using the same approach is possible to call system functions not using protected RIM API.

Unfortunately, it only worked on emulator. There was additional signature requirement we weren’t aware of. Signer ID for this one is 33 and it appears as “Secure API” in the error message. We couldn’t find any useful information regarding that, but it seems it is related to so called “Secure Device” flag and it works the same way as firewall rule – “Deny All”.

If it would be possible to turn the flag off … We are trying to figure out how …

By the way, the public key for Signer ID ( 33 ) is the same for all devices and BB emulator, it begins with 0x8F A7 61 CA 6E B6 94 5E 28 86 … the length is 128 bytes (1024 bits). It is physically located in rim*.sif file.

Another possibility would be replace this key with own public key, but it would be necessary to re-sign all system libraries using own private key as well. And we are not quite sure if it would be possible to patch sfi file at all as it might be signed too.


History of COD format

July 31, 2007

For those interested in COD format, a patent publication from RIM revealing some ideas behind its creation – 20060020932 .


Small tool to dump signatures from COD file

May 29, 2007

It is a small tool we use to dump signatures from COD file. The signatures table starts right after data segment end and each signature record has a very simple structure:

typedef struc {

ushort sign_type;

ushort sign_length ;

char signer_id [4] ;

byte signature [sign_length – 4] ;

} SIGNATUREENTRY

Download 2 java files Hex.java and Program.java , put them in the same folder, compile and run

Usage:

getsignatures <filename1.cod> [.. <filenameZ.cod>]

Output looks like:

File : net_rim_cldc.cod | version is: 78
Codesize = 53308
Datasize = 27972
| Type = 1 | Length = 132 | signerid = RRTT | sig_start = 81332 | sig_end = 81460
50 ad 66 4d 75 2f d1 54 43 01 9c bb fd b7 a1 ab
35 32 cb 7e 42 80 7a 7a d7 39 eb 9d 2e f4 08 cd
53 95 48 60 b9 f0 ac 27 7c bf cd 8e 3f 20 d9 fe
29 94 95 68 8e 41 ac 6a 82 66 c5 8b 44 c3 07 a9
59 8c da 04 89 6a 03 51 3c 8a 9e 5c 1e c1 32 05
a2 96 58 7a 73 c6 b9 59 74 4b a4 08 2d 4c ce 1e
2d dd 5d f1 5a a0 93 1b e6 5b 8c 87 9b 6c f1 9c
20 51 06 db fd 00 fc ca fc 01 28 b3 52 76 82 e8

Cheers


Blackberry internal folders layout

May 16, 2007

/applications/

/dev/

/system/

/system/samples/

/system/fonts/

/appdata/

/appdata/rim/

/home/

/home/user/

/home/user/pictures/

/home/user/ringtones/

/home/user/video/

/home/user/settings/

/tmp/

/samples/

/samples/pictures/

From Browser it could be called by using file://store/ prefix , but I cannot check it as my Browser service is disabled at the moment. Can somebody with working Browser check this link:

file://store/samples/pictures/Leaf.jpg ?