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
# 2010年04月12日 星期一 21:56
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并不是
# 2010年04月12日 星期一 23:14
在命令行进行签名
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文件
# 2010年07月08日 星期四 21:18
博主如果看到这个留言,请GT我。
# 2010年07月09日 星期五 02:44
aston有何指教?