Author Archive

9530完美ROM第二版[基于5.0.419]

星期六, 一月 2nd, 2010

又是一个通宵。

之前发布的那个,是基于328/428的版本,今天发布一个基于419的吧。

安装很简单:

先安装419原版,然后下载并安装我的这个版本,然后wipe,安装新ROM即可!

重要特点:

、支持多国语言,包括中文及输入法;

2、基本上全面解决了5.0ROM的各类奇怪问题,诸如短信显示混乱,无法直接发送CDMA中文短信,从通讯录拨号或发送短信的问题等等;(没有详细测试,你如果发现问题,请告诉我)

3、增加了如下软件:

GoogleMaps 3.2.(谷歌地图)

GoogleMail 2..7(谷歌邮件)

gpsedbb 2..(一个gps软件)

AddOnis .3.(一个来电防火墙软件)

10JQKA Level-2 .01(同花顺Level-2,一个股票行情软件)

OperaMini 4.2[BerryCN](第三方浏览器)

Berrymail_QQ08 .(QQ不用说了吧)

新年快乐!

下载地址(RaySource): [Coolfrog]9530_419_v1.1.exe

由于上述地址下载实在太慢,所以竹子兄弟非常热心地为大家提供了全新的下载地址:

感觉下载比较慢的朋友可以点击在这里下载(国内HTTP下载):

http://www.viejiff.com/1/Coolfrog.9530.419.v1.1.part1.mp3
http://www.viejiff.com/1/Coolfrog.9530.419.v1.1.part2.mp3
http://www.viejiff.com/1/Coolfrog.9530.419.v1.1.part3.mp3

下载之后,请把后缀名改成rar并解压即可,谢谢竹子兄弟!(以上链接于2010年5月11日更新,感谢kelien1104在天翼圈的提醒。)

上图:

、安装界面

2、版本:

3、中文长短信显示正常:

4、可以直接编辑中文短信:

5、发送中文短信:

6、应1007兄弟的要求,补上输入法的截屏:

关于BlackBerry CDMA中文短信功能的分析(五)大结局

星期二, 十二月 29th, 2009

终于等到大结局了,终于,实现了我前面4篇文章中所分析和作出的预言,很让人欣慰地是,赶在了2010年到来之前,我们BBer终于可以享受9530完美的ROM了。

因为,我要在这里分享一个 9530 ROM。

很晚了,没有更多的时间测试了,先分享出来吧。

这个ROM解决了最近困扰大家的那个大问题:

9530的ROM,在5. 323之后,就解决了中文短信的本质问题(底层),但是还剩下2%的问题没解决;419出来了,至少解决了%,还有%我没验证,可是居然又带来了新的问题——国家代码到底怎么设?设“未知”,短信显示混乱,没法回复,乱作一团;设“+86”,没法直接给通讯录里的朋友发短信;郁闷啊!

别郁闷了,下载这个ROM吧,安装328原版,然后删掉:

C:\Program Files\Common Files\Research In Motion\Shared\Loader Files

这下面的那个目录9530AMEA_v5...328_P4.2..128

把压缩包里的这个目录,替换进去,wipe、刷机,即可!

把国家代码设成“未知”,一切都那么完美。

PS:我喜欢用英文界面(对,就是假装很酷),所以没测中文界面。

最后,解释来龙去脉:

9530 ROM 328(With 9700 351/9550 428)完美版

目前相对来说比较让人满意的一个ROM,For 9530。

母板应该是巴闭、战神他们努力出来的(我看了下,是用了9530的328,混了9700的351、9550的428等而成)。

我只做了最后一步,更换了7个328的cod进去,以解决国家代码“未知”、“+86”给我们带来的各类怪异问题(让人无法接受的问题)。

非常感谢巴闭、战神的努力奉献;也非常感谢浪漫小弟、David和我折腾到这么晚。

终于有结果了,感谢群里所有的朋友!谢谢大家!

享受9530的完美表现吧!

也许这个ROM还有各种问题(我只使用英文界面,所以中文界面没有测试),但是短信、电话都能用了,还不能让我们开心吗?

一切都会更好的!

coolfrog#gmail.com

shanghai 2009-12-29 02:08

明后天有空我想继续看看419的ROM是否也可以这样做。

今天试了这个ROM加上9520的428,也很不错。

有空到http://honeyhan.cn/和我们群里来做客!

PS:只要把国家代码设置成“未知”即可。

附: 9530 ROM 328(With 9700 351/9550 428)完美版

下载地址(文件大小:111.9M)

请到rayfile.com下载:http://www.rayfile.com/files/855d5b78-f3e8-11de-a6d3-0014221b798a/

无图无真相,上图:

、国家代码设置为“未知”

2、短信显示是根据每个会话分开的,不会混到一起:

3、其中一个会话(可发送,可接收回复):

4、另外一个会话(可接收,可回复):

5a、选择一个联系人,编写短信:

5b、编写短信完成:

5c、发送成功:

关于BlackBerry CDMA中文短信功能的分析(四)

星期日, 十二月 20th, 2009

四、现在的5.0ROM,做到了些什么

简单点说吧,现在的5. 323及之后的ROM,短信方面:C网短信已经成功晋级,达到了4.7ROM时代的G网短信水平;G网俺没有研究,姑且认为它全部搞定了吧。

下面详细描述一下,BB 5. 323及之后的短信功能,已经做到如下水平:

、              可以正常接收小于等于70个中文字符的短信,不需要再用cuSMS这种程序来辅助解码了,也不会丢失这些短信的内容了;——这一条,说明,BB C网下的短信接收,已经会检查短信的编码标志、也会根据编码来计算短信的实际长度,也会根据编码方式去解码,并显示;

2、              可以转发中文短信了;

3、              可以切换到G网下,编辑中文短信,再切换到C网下正常发送了;

4、              上述第2、第3条,实际上从本质上说,BB C网短信模块,已经可以设置发送短信的编码标志了;

大家对比一下就知道,4.7 ROM时代的两大重大缺陷,目前已经全部解决(底层,根本解决)。目前还剩下两个很小的问题:

、              没办法直接编辑中文短信,这个东西的解决,很简单,RIM只要意识到这个问题,在它的短信程序中,C网允许输入中文即可;或者,我们也可以写一个小程序来输入中文,并发送短信;

2、              碰到超过70个汉字的中文短信(长短信),会带来分割问题,而我们伟大的RIM大概不知道还有这种事情,所以,大家会发现我们仿佛又回到了4.7ROM时代,被分割的短信,每条都变成3.5/8了,而且第二条会变成乱码,好熟悉的身影……无语。这个放在后面的“长短信专题”描述。

正是因为看到了RIM在本质问题方面的改进,我就决定不再开发任何短信相关的程序了,如果朋友们一定要知道理由,我可以列明两个理由:

、              RIM已经从本质上解决了之前的问题,离最后的完善只剩下2个问题,而且是2个与底层无关的问题,所以我说它还差2%;

2、              如果我要写短信程序的话,作为测试工具还可以,如果要取代RIM的短信程序,这个工作量实在太大——要考虑短信的存储、通讯录的使用、界面的美观等等很多问题;但工作量大不是最主要的原因,更重要的是,这么大的工作量,其意义并不大,毕竟我们已经看到RIM马上就完成工作了,我们没必要重新开始,太浪费了;更何况,这么多的工作,等我们做完,RIM也做完了(他只要稍微调整下就好了),不如去做点更有意义的事情。

 

五、补充专题:关于长短信

RIM的C网长短信,的确需要拿出来单独说说,因为实在太有个性了。

先看看4.7ROM下的长短信,如果我用别的手机给BB发50个“你好”(共100个汉字),它的乱码会长成这样:

100

奇怪,怎么乱码跟之前发的“你好你好你好你好你好”不一样了呢,而且保持队形?

慢着,这个乱码好像在哪里见到过?

对!在第一章我们就提到了“你好”这两个汉字的Unicode编码,按照字节分解的话,是这样的:

十六进制 4F 60 59 7D
二进制 0100 1111 0110 0000 0101 1001 0111 1101
字符 O ` Y }

对于这样的长短信,就不用那么麻烦了,只要按照两个字节两个字节组合起来(Unicode),然后直接显示就好了。所以我在cuSMS中加入了这个功能:

100-c

 

补充说明一下:因为长度超过70个汉字的“长短信”会被自动分割之后发过来,而通常我们的手机都会自动将这些分割后的短信再重新拼合起来显示;上面的BB那个长短信乱码就是拼合之后的;而这个cuSMS没有做拼合(因为第一条的内容就是不全的,把第二条拼到它后面一点意思都没有)。例如下面这条长短信,被分割成了3条,由于4.7ROM下的每条短信都会被“砍尾”,拼合起来肯定也没用:

cuSMSv003bb6-UI-2

总结一下4.7ROM下的“长短信”和“短短信”乱码问题:

4.7ROM下的长短信,乱码方式与短短信不同:

长短信是每个字节内容都正确(8bit),只是BB未检查其“编码”格式,故而未根据其编码格式进行解码和显示,而是直接按照每个字节都是ASCII码显示了,实际上应该是每两个字节构成一个Unicode的编码,并按照中文显示;

短短信是每个字节都是从原短信中按照7bit为单位抽取出来的(参见前文),并在7bit前补了,当作一个完整的字节,然后按照ASCII码显示,实际上应该把BB添加的每个字节的开头那个(bit)删掉,把这些7bit全部合在一起之后,再按照8bit为单位重新拆分成字节,再解码,即可。

看完4.7ROM的长短信问题,我们再看看5. ROM的长短信:

5.0ROM下的长短信,主要问题如下:

如果发一条被分割为3条短信的“长短信”到BB上,我们会看到如下现象:

long-bb

首先,这条短信变短了,和4.7时代一样了;其次,中间一条是乱码。

太熟悉了,悲剧依旧,我感觉像在看恐怖片,哈哈。

RIM真让我感叹!

而我的cuSMS对于长短信的解码当然依然正常:

long-cusms

其实,原本5. 323之后我觉得自己的那个cuSMS可以完全抛弃了,现在看来还得更新版本,因为老版本(..3 beta build 6)只适合4.7ROM,在新ROM下会导致乱码,而实际上新ROM收短信基本正常了:

70-bb

而cuSMS ..3则会导致乱码:

70-003

所以我在323出来的时候,又重新更新了cuSMS(..5 beta build ),使它在新ROM下还能正常工作,既能解码短短信,又能保持长短信的辅助功能(其实也就这点作用了):

70-005

这个程序早就弄好了,一直没发布,也是觉得它没什么作用。今天顺手放上来吧,请大家注意,这个只适合5. 323之后的ROM。

大家可以在这里下载cuSMS5 beta 005 build 01 :cuSMS5_beta_005_build_01 (270)

关于发送的程序,我只是做了很简单的测试代码,没有做可以发布的东西,请大家见谅。

文章写好了,已经快凌晨4点了,因为前两天在客户那里搞应急演练,所以最后一篇写慢了。

最后,这篇文章大家就当草稿看吧,我暂时没有时间修改完善了,很抱歉。

另外,如果哪位朋友手头有关于C网短信协议(具体实现)的文档,可以给我发一份,整个研究过程我都没有找到更深入的资料,所以很累,我用自己的G网手机给C网手机发短信都不知道发了多少条,就当捐款给中国移动了吧(这么暴利的企业应该不需要捐款的哦),其实完全是在为中国电信的用户们解决问题,唉!

再次谢谢大家!

关于BlackBerry CDMA中文短信功能的分析(三)

星期四, 十二月 17th, 2009

好了,我们已经基本上分析清楚了BB C网中文短信乱码的产生原因、重新解码的方法、短信长度不足的原因。下面补一张图,我们重新解码,尽全力抢救出来的“你好你好你好你好你好”这条短信,只能做到这样了(只能看到4个汉字而已):

decode

 

在开始下一个话题之前,我们简单探讨一下,如何更进一步地解决这个问题。

经过上述分析,我们知道了,通过我们自己编写程序来“接收”到的短信,无论怎么处理,它只有3.5/8的原始数据,所以,这条路已经走到尽头了。

而截获BB收到的数据再处理,这一条路也不可能,因为我们自己收,跟BB收,其实是一样的,BB拿到的数据并不比我们多。

我们收到的数据少,短信中心(其实这个名称不准确)的数据是完整的,我们怎么才能收到更多呢?

分析我们的程序,发现我们的“接收”,只是调用BB提供的一个接口功能而已,如果我们能进行更加底层的程序设计,自己实现一个“接收”接口,这个接收接口,会检查短信的编码格式、会根据编码格式计算短信的“字节数”,那么,是可以完全恢复这条短信的。

如何实现自己的“接收”接口呢?这需要两个条件,一个是从底层挖掘CDMA短信的通信协议,另一个是,BB的开发包以及BB的运行环境都提供相关的支持,允许我们从底层重建代码,并确保其能够移植到BB设备上正常工作,可惜的是,我个人对这两条都没有相关资料,从黑盒分析摸索的路上,我只能走到这里了,非常抱歉。另外一个原因,是我触碰不到BB的底层系统,不能进行底层的开发,只能用java在应用层的“伪底层”折腾,如果允许我们用C、C++甚至汇编进行真正的底层开发,那样会好很多。

这条路走不通,还有别的路吗?是的,还有。

我们推测了BB接收短信的过程,其中重要的地方是“字节数”和“编码格式”,它都错误。“编码格式”,BB不去看,我们可能没什么办法;而“字节数”,在接收时,一定是在内存中的一个数值,如果能找到这个数值,并在其生成时立即篡改它(修改内存),那么BB会多收一些数据的。这个呢,由于我对java也是现学现用的,不太清楚java如何进行内存的越界访问和修改,并且我也怀疑java是否能做到这个,所以,也就不研究了。

以上为理论分析,仅作为与爱思考的朋友们的讨论而已。

进入下一个话题:

 

三、在4.7的ROM下,为什么无法发送中文短信

既然我们可以写程序接收短信,那我们一定可以写程序发送短信。

我们收不到对方发过来的东西,不能看到它的编码格式;可是我们应该可以控制我们发送的所有内容和数据啊。那是不是可以发送“中文”短信呢。

是的,应该是这样,那我们试试看。

这里有两个问题需要我们验证。

一个是,BB接收的时候,会按照7bit来处理字节,我们发送的时候,如果它也当7bit处理,会导致我们的每个字节都会被“斩首”;

另一个是,我们必须设置我们短信的编码格式,这样接收到的手机才知道如何解码。

经过验证(这里不写具体验证方法了,很简单的,几行小代码而已),第一个担心是不必要的,BB会把我们设置好的短信内容完整地发出去,不会“斩首”,比如我们发“你好”的Unicode编码,对方收到的就是“O`Y}”,数据本身是“无损”的;

而第二个问题,很严重,只要在程序里设置了非4的编码格式,BB的发送模块就不工作了,而设置4的话,接收到的手机会把短信当作ASCII来处理,尽管内容是正确的,“O`Y}”这4个ASCII码,按照Unicode解码,再按照中文显示,直接就是“你好”两个汉字了。

 

关于第二个问题,我尝试了很多很多方法,无论在什么阶段、什么级别设置,只要把这个标志位改掉,最后短信一定发不出去。

 

顺便说一下BB的G网中文短信。

大家都知道,BB在G网是可以正常接收中文短信的。

从程序设计的角度来说,如果我在BB上开发短信程序,在接口方面有两个选择,一个是用MessageConnection,一个是用DatagramConnection,而经过我的测试,在C网下,后者可以正常工作,前者无法工作;而前者的实现,实际上是完整的,也就是说,它可以接收、发送中文短信,只是很可惜无法在C网工作。

根据我的测试,在G网下,如果用MessageConnection来实现的话,是可以设置短信编码格式并成功发送中文短信的;而4.7ROM下之所以无法直接发中文短信,是因为“编辑输入”的问题。

BB的那个编辑框,没有考虑到输入中文(或其他非ASCII字符)的需要,如果输入中文,会变成“?”这个跟短信的发送并没有什么关系。实际上BB的G网发送模块是正常的,只是无法输入中文,也就无法设置其编码方式;如果你有办法输入中文,并设置好这条中文短信的编码方式UCS2,那么就可以正常发送了。

这个“输入”有几种办法:

、              接收到的短信,直接转发,这样不需要你输入,这个短信是现成的,你只要命令BB发送就可以了——现在大家知道为什么G网可以转发中文短信,却不能编写发送了吧?

2、              自己写一个程序,设置一个编辑框,这个编辑框可以输入中文,然后再设置短信编码格式,并调用BB的G网发送模块,这样就绕过了输入问题。

未完,待续。

关于BlackBerry CDMA中文短信功能的分析(二)

星期三, 十二月 16th, 2009

上一章节,经过我们的分析,已经知道了“为什么在4.7.及之前的版本ROM下, CDMA模式接收到的短信是乱码”这个问题,更准确地说,我们知道了乱码的构成过程(错误解码的产生),因此,我们可以写个程序对这个“乱码”进行重新拼合,组成原来的样子,并让BB显示出来,这就是我的cuSMS程序的工作原理。

下面我们进入下一个话题:

二、在4.7的ROM下,为什么接收到的中文短信长度不足

这一章节的结论很简单,但过程的阐述会比较麻烦,我是边写边调整,希望能讲明白。

首先我简单地介绍一下cuSMS的程序构成,然后根据这个程序来分解、分析。该程序主体部分如下:

启动一个“监听”线程,该线程循环监听、接收短信
2 对收到的短信进行重新解码
3 在屏幕上显示短信

哈哈,大家看了我这个描述,是不是觉得很像“把大象装进冰箱里,统共分三步”啊,哈哈!我也是为了简化而已,其实第一步里面很有必要深入解释,我们留在后面详述。

可是,通过该程序“更正”BB在C网下的短信解码问题的过程中,总会发现短信长度严重不足,缺少一半还多,这是为什么呢?

这里有必要推测一下上述第一步中的“接收”这个“动作”了,因为cuSMS的接收很简单,就是用了java的一个“方法”(如果你不使用面向对象的编程,可以类比“函数”)——receive()。

打个比方,比如我收快递,只能到前台去,从前台手里拿我的快递,这就叫“收取”动作了。我是不可以在楼下拦住快递,在他的运输箱里翻我的东西的,他会把东西交给门卫,门卫负责交给前台,我只能从前台收快递。

而在BB上,我写的程序,只能调用BB ROM提供的这个receive()“方法”,也就是说,我只能通过调用这个功能来进行“接收”。

接收到短信之后,我会根据需要,处理一下短信内容,并整合成中文,让BB显示在屏幕上。

为了搞清楚短信长度的问题,在调试cuSMS的过程中,在接收短信之后,我让程序检查已收到短信的“长度”,并输出到屏幕上。

具体来说,例如第一章中我们发送了10个汉字(字符),其长度应该为20个字节(bytes),可是用int i = m.getLength();语句得到这个短信的长度,发现这个数字是10。

数字是10,单位是什么呢?是“字节数”还是“字符数”呢?实际上应该是字符数,但经过验证,发现,这个数字的单位是“字节数”。那么,这就表明数字少了一半。

我们可以推测一下,正常情况下的“接收”动作,又包含了一些什么“分解动作”呢?我想,它应该会首先获取一下这个短信的长度、编码格式等基本信息,然后慢慢收取,收取完毕后,通知短信中心“这条短信我收好了”,对方会删除短信队列里面的第一条,如果后面还有短信,就重复上述动作。

可是现在出现了问题,我推测如下:

短信中心告诉了BB:“你的短信长度是10个字符,编码是Unicode!”

BB只看到前半句,“噢,10个字符啊”,然后没有搭理短信中心的后半句话,把10个Unicode当作10个ASCII来接收,本来应该收20个字节(10个Unicode字符),它只收了10个字节(10个ASCII),就告诉短信中心“我收好了,谢谢敖!”然后它结束接收动作,短信中心就把这条短信删了,其实它只收了一半!

作为验证,我在cuSMS调试过程中,让程序getMessageCoding(),然后把这个数字代码打印到屏幕上,发现,不管发英文短信还是中文短信,BB打印出来的数字代码都是4。

这个4代表什么呢?怎么分析?“我猜它是ASCII的意思”“嗯,有道理,但是我们对待技术,需要大胆假设,小心求证!”

那就证一下吧。

我在程序里用setMessageCoding(),分别设置了如下类型的编码,然后getMessageCoding(),并把它们直接打印到屏幕,这样,就可以知道所有编码类型对应的数字代码了:

MESSAGE_CODING_DEFAULT
MESSAGE_CODING_8_BIT
MESSAGE_CODING_UCS2 2
MESSAGE_CODING_ASCII 4
MESSAGE_CODING_ISO8859_1 5
MESSAGE_CODING_KOREAN_KSX1001 6

“噢,买疙瘩,BB真是太傻太天真了!”看到了吧,不管发过来的是什么编码,它都当作ASCII,这就导致了“长度少一半、解码也很乱”!

对了,细心的朋友可能注意到了,举手提问说——“Coolfrog,你说你先设置上述编码,在获取编码的数值代码,你怎么知道有些什么类型的编码呢?”这个,其实有两个办法,一个是通过JDE里面java编程环境的“自动完成”“联想”功能,我通过BB的开发手册查阅到对象的属性,然后在JDE中输入,它会有自动补齐的功能,这样可以通过上下翻页查看其它可选的值;另外,我们可以根据它的命名规则,加上自己了解的常见编码格式(名称),来测试其是否存在。摸索,在黑暗中摸索。

总结一下:

假设BB能够知道这个数字是“字符数”,并且根据该“字符”编码的类型(是ASCII还是Unicode,等等),来计算出“字节数”,然后再接收,就没问题了,ASCII一个字符就是一个字节,Unicode一个字符就是2个字节,这是确定的。

可惜的是,经过反复测试,BB根本就不管收到的短信是什么编码方式什么字符,统统按照ASCII来处理。

最后,来解释一下为什么cuSMS显示的中文内容不足一半,比一半还少呢?

前面说过,BB在“接收”动作中,只收一半的“字节数”;而且它接收时,是按照ASCII处理的;一方面ASCII是7bits的编码方式,另一方面,从BB显示的乱码来看,它是在接收中,以7个bits为单位接收的,每收到一个7bits的内容,它就把它组合成一个字节(在7bits前面补一个bit的,二进制),然后收下一个7bits。

我们的cuSMS,是把这些内容中被BB添加的那些二进制的删掉,重新组合。

因为,BB认为它自己一共需要收10个字节(byte),实际上它是收了10个7bit。共70bits。实际上10个字节是有80bits,这就已经不是100%了,是7/8。我们复原,最多只能复原成这么多数据了,这个数字除以2,才得到完整的Unicode字符的数量。来算算:

原来是10个汉字,占20字节;现在只剩下70比特,70/8=8字节,还余6比特。

前面的8个字节可以构成4个汉字,后面的6个比特,实际上已经不能恢复成一个完整的汉字了。

总结一下:

我们cuSMS解码出来的内容,最多最多只能恢复出3.5/8的中文,就是这样计算出来的。

未完,待续。

关于BlackBerry CDMA中文短信功能的分析(一)

星期二, 十二月 15th, 2009

Coolfrog<coolfrog#gmail.com>

 

一直以来,使用 CDMA模式的朋友都对其中文短信功能十分苦恼,hcs兄弟和我也都写过相关的小程序,作为接受中文短信的无奈之选,苦闷啊!

今天抽空写这篇文章,主要是给大家分析分析RIM的,其CDMA中文短信为啥总让人失望,进而理解我的观点——现在的 CDMA手机,其中文短信问题的核心已经解决(我认为已经解决了98%),可以说,离完全支持中文短信,只差最后一步(还差2%)。

 

一、在4.7的ROM下,为什么接收到的中文短信都是乱码

非常感谢hcs兄弟,没有他,我就不可能开始这些分析,他开发了一个cSMS工具,作为接收中文短信的助手。

具体分析过程,是自己在RIM的 JDE 4.7.开发环境中开发了一个中文短信解码工具(更准确地说,是UCS-2短信解码工具),整个开发过程,其实就是分析过程;具体手段是以黑盒分析为主(测试、猜想、验证等)。

大家都知道,之前我们用4.7.版本的ROM时,在C网下无法接受中文短信,全是乱码。

比如,我用其他手机给C网BB发一条短信,是5个“你好”,共10个汉字(“你好你好你好你好你好”)。结果BB收到的短信,显示如下:

01_recieve_error_coding

本章节主要分析为什么出现这个现象。

我们把整个过程分解为:编写-编码-发送-运营商转递-接收-解码-显示,一共7个步骤。

首先排除“显示”的问题,因为我刷的ROM是支持中文显示的,而且在G网下可以接受中文短信,且这个短信在C网模式下仍然可以在BB的短信程序中打开、阅读。

然后,排除“编写”、“编码”、“发送”、“运营商转递”问题,因为如果不是发给BB,而是发给我三星的CDMA手机,就是正常的,这些环节不可能出错。

只剩下“接收”和“解码”两个问题了。

如果“接收”本身错误就出错,那我们只能断了这个念头,不可能通过附加程序来解决接收乱码的问题了;但俺看到hcs兄写的程序,是可以部分解码的,所以,排除该问题。

好了,终于定位到“解码”上了,我们来深入分析。

我们知道发出去的内容,也看到了显示出来的内容,中间BB是怎么做的,需要黑盒分析。

我想先列出发出去的内容的2进制编码,然后看看收到的内容的2进制编码,再寻找其中的转换规律。

理论上这里得详细解释一下“字符”、“字符集”以及“编码”和“解码”的概念问题,但是,这实在不是一两句话可以说清楚的(从微软的《Windows程序设计》到《Windows多线程程序设计》,乃至看雪学院的《加密与解密》,开篇都离不开这个话题),在这里我就不说了,请看不懂的朋友参阅google相关搜索结果。

“你好”这两个字,在Unicode中,每个字都需要2个字节来表示,一共需要4个字节。其中“你”,用16进制的字节形式表示,就是4F 60,“好”就是59 7D(准确地说,是UTF-16,但大家只要记住这是Unicode就行了,不是专业人士没必要搞那么清楚)。

转换成2进制,4F 60 59 7D就是:

02

最简单的猜想,就是:BB是不是把这些东西,当做ASCII来处理了?本来两个字节构成一个中文字符的,如果BB把他们孤立开来看,当成2个ASCII字符来处理,就会产生乱码。

有了猜想,验证一下:

03

明显跟我们BB上看到的不一样,说明这个猜想不正确。

(其实早就可以排除了,因为我们发的是5个“你好”,如果上述猜想正确,不管是什么字符,至少应该是重复出现、有规律循环出现的才对,而我们看到的东西好像一点规律都没有。)

没办法了,从“你好”这一边出发,分析不下去了。

我们干脆到BB上把这些字符提取出来,看看能分析出什么来。

BB上显示的是:’Xj=@Y>S

把它们用16进制表示:27 58 6A 3D 40 59 3E 53

再用2进制表示如下:

04

好,数据齐全了,我们把开头的6个字节抽取出来,把它们列在一起,并取消横向隔断,直接对比,看看有什么规律:

05

当然,在上面的对比中,我已经增加了颜色和空白,指出了规律特征,大家能看出来吗?

我来用文字描述一下这个规律特征:

BB从收到的内容(2进制)中,以7bit为单位提取出来,并将每7bit的数据当做一个字节的ASCII字符,显示出来。

备注:按照这个规律推到,为什么上面表格中还有两个字符没有显示呢(00010110010111)?那是因为,这两个字节的内容,转换成十六进制是0B和17,都是“不可见字符”(例如控制字符),是不能直接打印、显示的。

真不错,我们现在已经分析出来一个问题了。

后面将要分析的问题包括:

一、在4.7的ROM下,为什么接收到的中文短信长度不足

二、在4.7的ROM下,为什么无法发送中文短信

三、现在的5.0ROM,做到了些什么

……

更多精彩,感谢关注。

偷偷告诉大家,kaka的9630可以使用了

星期二, 十一月 24th, 2009

哈哈,不过这个没有研究直接修改机身ESN的方法,而是去电信走了个流程。

今天终于搞好了。

====update by kaka ====

上两张图

2009_11_25_14_15_07

另外 9700的ROM可以与9630的ROM混刷。已成功。

接收中文短信没问题。

暂时没有什么不妥的地方。

Palm Pre烧号过程中的QXDM连接不稳定问题

星期二, 八月 4th, 2009
这两天在帮一位朋友折腾Palm Pre的CDMA烧号,遇见一个问题:
、通过Python监听Palm Pre端口,成功打开8023端口;
2、通过Putty连接Palm Pre获取root权限并运行mpt diag(或mpt 0d)命令;
3、安装了diag模式驱动,在设备管理器中找到相应的diag端口(例如COM4);
4、在QPST Configuration中,设置连接端口时,如果选择”Show Serial and USB/QC Diagnostic ports only”的话,则左边的可选择端口中看不到COM4(COM3也看不到),如果把这个选项取消,则可以看到”COM3 – USB/Unknown”和”COM4 – USB/Unknown”,将COM4添加到端口列表中去,可以看到Palm Pre设备连接成功(稳定连接);
5、但是,如果此时打开QXDM,并通过Options – Communications选择COM4,就会出现一个非常奇怪的现象:无论从QXDM还是QSPT Configuration中,看到的Palm Pre连接,都会出现时连时断现象,大约循环时间为5秒钟左右,也就是每隔5秒会连接、断开、连接、断开,不停重复,因此无法通过QXDM进行任何操作;
具体如下图所示:
:从QXDM看,每隔5秒钟就连接上的截图
qxdm每隔5秒就连上
图2:从QXDM看,每隔5秒钟就断开的截图
qxdm每隔5秒就断开连接
图3、4:从QPST看,每隔5秒钟就连接上的截图
qpst每隔5秒就连接上
qpst每隔5秒就连接上
图5、6:从QPST看,每隔5秒钟就断开的截图
qpst每隔5秒就断开连接
qpst每隔5秒就断开连接
6、如果用CDMA Workshop,可以连接,并读取手机相关信息,可以操作SPC等,但是无法进行内存扫描,我猜测,就是因为时断时连,所以,对于瞬间的读取操作、写入操作是可以成功的,但是对于持续的读取就会失败;

其他信息:
Windows Server 2008 Stan sp2
QXDM 3.11.36
QPST 2.7 build 323
webOS ..4,已经激活、破解SPC

当然,在我的机器上,用QXDM/QPST、CDMA Workshop对 9530进行操作是没有任何问题的,否则我也就不可能研究出9530机身ESN/MEID的修改方法了。
问题的分析和解决:
首先怀疑是驱动程序的问题,因为在网上看大家好像都没碰到过类似问题,所以,怀疑是使用Windows 2008的人比较少,而这个diag mode的驱动在2008上不稳定——只是怀疑,没法验证,也找不到更新的驱动程序;
后来仔细分析了一下,认为这个问题与QXDM关系还是很大的,因为仅仅开QPST的话,是稳定连接的,虽然没有任何操作,但是连接是正常的;可是打开QXDM之后就不正常了,就开始不停地连接、断开;——这样看来,应该仔细看看QXDM:
我的QXDM以前一直用于 9530分析,所以默认打开的时候,会有三个子窗口,分别是Core Dump View、Memory Viewer、Command Output;
经过反复确认,发现问题就在Memory Viewer上:
、Memory Viewer打开的时候,默认显示内存地址是最后一次关闭时候所显示的内存地址,比如我最后一次折腾QXDM的时候,关闭前,内存地址是×20000000,现在打开QXDM,Memory Viewer默认就是显示×20000000这个地址;
problem
2、不巧的是,刚好×20000000这个地址在Palm Pre上是不可读地址,而QXDM的Memory Viewer会反复尝试去读取该地址,这个读取动作会导致Palm Pre断开diag mode的端口;
3、如此反复,导致上述现象的产生;
找到原因之后,解决办法就简单了:
、先把Memory Viewer关掉,然后把QXDM也关掉;
2、重新打开QXDM(这时候它不会自动打开Memory Viewer),所以就正常了;
3、再手动打开Memory Viewer,这时候应该显示的是×00400000,而这个地址是可读内存地址,所以还是正常的。
ok
好了,问题搞定!
补充:
如果这个问题存在的时候,一直不关闭QXDM,会导致最终无法连接Palm Pre,必须拔掉电池冷启动,才可以恢复。