从BlackBerry应用程序中移除签名以及重新签名

Removing signatures from Blackberry applications and re-signing them
(英文原文在墙外, 要看的自行翻越)

我最近浏览了BlackBerry的COD文件的内部, 我必须做的第1件事情就是移除签名,以便于修改它,然后重新实施另外的签名. 我这么做的一个最重要的原因就是我迫不及待地尝试让一些优秀的BlackBerry应用只通过wifi工作(不久,将有很多关于这个主题的文章发布)

首先,我要感谢 dr.bolse (也在墙外)为COD文件格式的逆向工作的所做的努力表示感谢. 尽管我发现有点小怪异的地方:他发布的信息有点不完整, 他的COD反编译器不能工作, 但依然很棒!

一些背景信息: 据我所知, RIM公司有6种不同的签名方法可用:  3,  RBB, PRT, RCR, RCC, RCI  第1个用来签署内部的RIM代码, RCC是一个open-key的特殊签名算法, 来自Certicom(一次我试图去打听它要多少钱,答案是 $xx, xxx 美元,我日啊)   RCI是一个Crypt API的内部签名算法. 其它3种算法是给凡人用的,哈哈       典型的应用程序只使用RBB, RRT和RCR签名

使用你最喜欢的HEX编辑器,打开一个COD文件, 滚动到文件最后面. 如过这个应用程序签名过,你将在末尾看到一个很容易识别出来的段,
请看下图:

首先,你将看到签名算法的名字(做了蓝色记号的), 但你看到的签名的数目可能不同,这依赖于应用程序所使用的API的不同. 如果你看到RCC的话, 劝你还是算了吧(除非你能从Certicom搞到这个签名), 一般你只能看到RBB, RRT, RCR

找到第1个签名算法的名字(也就是, 更接近文件头的方向),再往前就看到四个字节 01 00 84 00 (在上图中,有红色标记的就是, 总是4字节对齐的), 而他们之前可能会有若干个0, 这是作为填充用的.  你现在需要做的书, 将所有01 00 84  00打头的东西,剪下来,剩下的部分保存为一个新的COD文件

新的COD可以任意修改. 然后你需要用自己的签名 对这个文件进行重新签名. 签名工具 好像不会通过分析代码来决定你的代码来使用什么签名. 而是使用由RIM的编译器(RAPC)生成的.csl和.cso文件.  这个文件非常简单, 能否从任意的BlackBerry应用程序中复制过来. 如果你的COD文件叫做”myfile.cod” ,只需要建立一个”myfile.cso”:

33000000=RIMAPPSA2
52424200=RIM Blackberry Apps API
52435200=RIM Crypto API – RIM
52434300=RIM Crypto API – Certicom
52434900=RIM Crypto API – Internal

还有 “myfile.csl”

52525400=RIM Runtime API
52424200=RIM Blackberry Apps API

现在,签名工具将很高兴为你修改过的COD文件进行签名了,哈哈

参考资料
http://drbolsen.wordpress.com/2006/11/30/cod-template

从BlackBerry应用程序中移除签名以及重新签名》上有7条评论

  1. zhiwei 文章作者

    52434900=RIM Crypto API – Internal
    缩写为 RCI, 又名为 RIM Crypto API C Internal, 这类API, 普通应用程序比较少用到, 是RIM内部使用的

    52424200=RIM Blackberry Apps API
    缩写为 RBB
    52525400=RIM Runtime API
    缩写为 RRT
    52435200=RIM Crypto API – RIM
    缩写为 RCR
    这3个比较常用

    cso 是  在运行时需要的签名列表(a list of signatures that might be required at runtime if the application invokes controlled methods)
    csl 是  在连接时签名列表 (a list of required linktime signatures)

    已经安装好的签名文件是
    Sigtool.db
    Sigtool.csk
    它们都是文本
    #The database file containing information for requesting signatures.
    #Mon Apr 12 00:45:27 CST 2010
    RBB=3957654321http://www.rim.net/Websigner/servlet/BBApps
    RRT=3957654321http://www.rim.net/Websigner/servlet/Runtime
    RCR=3957654321http://www.rim.net/Websigner/servlet/CryptoRIM

    #File containing the secure storage of the private and public keys.
    #Mon Apr 12 00:38:07 CST 2010
    Salt=
    PrivateKey=

    在某些文章中提到的Sigtool.set并不是

    回复
  2. zhiwei 文章作者

    在命令行进行签名
    Java -jar SignatureTool.jar [ [-a [-p password] ] [-c] [-C] [-s] [-f [-d] inputFile ]
    [-r directory ][-help] codFile codfile… | csiFile

    -a   自动请求签名
    -p password  黑莓签名工具密码. 自动请求签名时,必须指定 
    -c  请求签名后,如果没有错误发生,就关闭
    -C  请求签名后,即使存在错误,也关闭
    -s  打印签名统计信息:发出的请求次数,收到的签名次数
    -r directory  搜索一个目录,选择该目录下的所有COD文件
    -f file  指定要加载的COD文件
    -d  删除 用-f file参数产生的临时文件. 这个-d选项必须同-f 选项一起使用 
    .csi file  指定含有注册信息和可以使用签名列表的csi文件,每个命令行只能指定一个csi
    .cod file 指定要签名的cod文件, 在命令行可以指定多个cod文件

    回复
  3. figohere

    无意中进入您的网站,您对黑莓软件的逆向工程很有研究啊。我是9500的用户,黑莓OS5.0有严重的断网问题,自带的浏览器可以上网但大部分的第三方软件都不行。

    之前有人分析过这个问题,详见http://berrycn.com/blackberry-os5-0-system-broken-network-problems-progress/

    有个叫Shazam的软件可以自己设置接入点,设为apn=cmwap; wap gateway ip:10.0.0.172; port:9201时在断网情况下也可以连接。

    直接修改cod就可以解决断网问题请问如何实现。对逆向工程不是太了解,但您给出大概流程我是可以完成的,谢谢!已经被断网搞的快疯了

    回复
  4. alex

    博主如果看到这个留言,请回个邮件可以吗,我用WINHEX,打开我写的COD文件,并没有找到RRT(因为我在黑莓手机运行时候,提示需要RRT数字签名)。我的JDE 5.0系统,请指教。。

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注