Zhiwei.Li
Gather sweet flowers while you may, And not the twig as flowers withered!

从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

只有 4 条评论 订阅该文评论 RSS

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并不是

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文件

aston

博主如果看到这个留言,请GT我。

zhiwei

aston有何指教? 8)

发表评论