Home首页 Treo吹友吧 BlackBerry iPhone 下载中心 English 数码商城 电信镜像 网通镜像 美国镜像 更多镜像
 
广告:Palm 全系列特价 中关村实体店华宇科技—全系列(palm)PDA批发北京小孟palm专卖中关村实体店
 67 12
发新话题
打印

[CDMA短信] 关于中文短信的小结,致力于中文短信的兄弟可以进来看看

关于中文短信的小结,致力于中文短信的兄弟可以进来看看

近来许多热心的朋友在关心中文短信的问题,前段时间我也投入了不少的心力于此,近来比较忙,暂时没时间继续弄,很想写一下自己的经验和想法给各位,以供抛砖引玉。
下面对我认为可能解决中文短信的这些途径一一叙述,先讲述短信接收:


1、纯粹基于Palm上的编程。
无论是基于SMS Library 、Phone library还是 sms Exchange Library的编程我都尝试过,结果都是失败的,终其原因,因为treo是底层将短信解码后再写入数据库,前一个api库读取的是数据库的,当然不行。后一个api库似乎是有希望读到更底层的信息,但是好像cdma的手机不支持这个api函数集。
读取数据库中的短信信息,能够获得的乱码是非常不完整的,可能只有聊聊的一个字节,或数个字节,能够从原中文短信中寻觅到字节更是几乎没有(我相信有的时候也只是巧合而已),更有甚者,接收到的只是几个FF,所以,目前的状况想从这个数据库中的信息反向得到原短信,我觉得几率是零。当然,这跟treo的短信解码有关,如果能如某位说的那样通过改变sms_00000,使treo提交到数据库的短信乱码的数据不丢失那么严重,那还是有希望的,编程方面想试试的兄弟可以看看sdk带的例子SMSsample、SimpleSMS、Sms Exchange Library Sample,至于sms_00000等的资料就完全空白了。

2、AT命令
在palm上可以编程打开与无线模块通讯的串口,这时通过modem命令可以与之通讯,前段时间大家收集了大量的AT命令集,但经过FirstFan的测试程序测试,cdma的treo 650 只支持寥寥几个命令而已,对绝大多数命令都不支持,短信的AT命令也是不支持的。而gsm的是可以读取到短信信息的,老许的程序是用这个方法写的,据说他也测试过cdma是不支持的,相信两位高手的判断,这个方法也是行不通的。

3、BREW
通过BREW,这也是吹友吧上的一个朋友提出的,人民的智慧真是无穷的。根据palm的资料,v版的手机应该是支持brew的,不过我刷了v版的rom好像没发现有什么特别的,是我没看的仔细?也许把某些文件通过bitpim写入无线模块可以让无线模块从底层支持brew的数据收发(这也是也许而已,但是具有一定的可能性,因为底层的程序比较单一,不像rom、palm操作系统那样存在一层套一层的关系,底层的程序跟硬件结合很紧密,只要硬件非常雷同,应该可以),但是我们怎么能够从palm的操作系统上去访问底层程序提供的数据呢?如果可以那还不如直接访问sms_00001了,似乎是不可能的,如果想通过个人的努力让treo 650支持联通的brew好像是天方夜谈而已。

4、读取SMS_00001
我觉得致力于解决短信问题,至少应该有资深的编程经验和一定的硬件知识。首先sms_00001是存于无线模块中的,应该就是高通无线芯片的存储空间内,我的理解,这不是palm的cpu能够寻址访问的范围,现在之所以能够通过pc访问,是因为将手机置于编程状态,手机将无线模块的编程接口直通到手机的数据口,因而pc能够访问,而这个数据口,还没看到有什么办法可以从palm上面去访问。就是说palm是站在长长的水管外,他可以拧开水管中部阀门的开关,水可以从水管一头流到另一头,但是他站中间却接触不到水管中的水。也许我的理解是错误的,但起码目前还没有看到什么资料说能够在palm上面编程访问到这些数据,搜索sms_00001可以看到,前两年就有个韩国人在许多论坛寻求从palm上面访问sms_00001的帖子,但是没有人能够回应这个问题。

通过读取sms_00001还是提供了途径解决短信问题的,但是需要增改硬件。目前在palm上无法访问sms_00001文件,但是我们可以把现在接到pc上的串口环回到手机的某个端口上读取,那么在手机上就可以用pc上同样的方法读取短信了,看看arm的外围电路,可能性比较大的就是红外接口,红外接口也是串行口,能够很方便的在palm上编程访问,收发数据。红外口平常我们也不会使用,用来收发短信信息非常合适。但是由于红外接口的信号是经过了编码的,需要通过红外编码芯片才能和普通串口连接,这部分工作还是可以解决的,我也购买了解码芯片和外围元件,剩余的问题就是怎么通过编程来让手机进入passthrough方式了,原以为很容易的,没想到找了很多资料都没有看到有什么办法,如果不能够通过编程来进出passthrough模式,就要将手机一直置于passthrough方式来收发短信,那么手机的耗电、寿命、使用方便性都存在很大问题。于是就没动手实施这个方案。

5、修改ROM
这个想法源于码分多址兄弟在吹友吧上发布了三星i539的有关rom文件,对比了i539和650里面rom的文件,直接替换估计是没用的。我相信一个软件系统的各层次软件是丝丝相扣的,把一个个大小不同,名称不一样的模块弄一起也是转不起来的。我概念里面修改rom不是替换文件,而是要找到rom里面解码的代码段,修改rom文件使其跳过解码,直接将底层的数据提交到短信数据库,再通过重新写的解码软件来读取短信内容。当然这个难度是非常非常大的,我也没信心能否实现,但是我觉得这是最好的解决途径,纯软件的完美解决方案。
有兴趣的兄弟可以先看看《Palm软件的破解Step by Step》,原理是类似的。为什么不直接改rom里面的解码算法呢,诚然那是最完美的,但是也是不可能的,首先是rom的相关文件我们只有二进制代码,通过二进制的代码或汇编来写短信的解码那是非常痛苦的,另一方面,没法将这些代码塞到原来的文件里面,最现实的作法就是改一个跳转指令,把解码部分跳过,这也是软件破解的最常用方法。另一方面,将底层数据提交上来的时候,如果遇到00的字节也必须要处理掉,否则写入数据库会将其当成字符串结束字符。
好,那么现在最大的问题就是在于怎么找到解码的位置,我尝试了两天,没什么成果。 原因,缺乏有效的反汇编工具,对palm的prc文件也不了解,用PRCExplorer打开prc文件似乎没看到希望看到的大量汇编代码。怎么寻找解码位置呢?我想了一个办法,还没时间去试,就是先写一个读写短信数据库的palm程序,反汇编之看看写短信数据库的汇编代码是怎么样的,再去rom里面寻找想匹配的代码段,找到了rom里面写短信数据库的代码,往上回溯就能够找到解码的代码,如果运气好,说不定就找到了读取sms_00001的代码。 ^_^

短信的发送我也试了,编码没有问题,只是字节数解决不了,后面有机会再讨论吧。
欢迎大家扔砖头
本帖最近评分记录
  • 卒子 威望 +20 写的虽然不怎样,但是还要表扬一下 2007-11-9 22:49
  • 寂夜清风 威望 +10 精品文章 2007-4-18 18:34
高手!基本上可能的方法都被你想到了。
顶一下  这么多字 光打就不知道要了多长时间
更何况还要思考      
支持一下
I Love Inter   
我希望有一天我能用鼠标双击我的钱包,然后选中一张100元,按住“ctrl-c”接着不停的“ctrl-v”。
关注CDMA区的任何技术贴!
700P寻觅中。....KEHAN,你辛苦了!
该犒劳犒劳自己买个700W了。
700P卖给我吧!
我来自SKY,我热爱XBOX.
以维护TREO论坛交易区纯净,严肃为己任
争取做一名无声刽子手.违反规定者斩立决!
这么深入的探讨,俺就旁边看看了,学习就算了,哈哈
最后一种办法是比较理想的。希望吹友能支持LZ,有钱的出钱,有力的出力。
感谢CyberVsQ兄的劳动,其实我也已经在中文sms方面花了很多精力。就我的个人想法,BREW的方法肯定行不通,因为brew程序注入650需要高通的授权,直接读取sms_0001的想法很好但是查边各大论坛都没有丝毫信息,并且类似的想法其实1年多之前www.shadowmite.com上就有xd提出过,可惜没有一点点的下文。采用I539 rom再对650 rom进行改造,我认为是最有希望的。但是问题在于直接执行539的sms程序时系统直接重起,crash的纪录只有:"fatal exception"并且无法进行出错的跟踪。因此hack不知从何开始。
欢迎大家拍转。
T_____Try
R_____Resetting
E_____Every-
O__________One!

回复 #7 Merlin99cn 的帖子

我觉得应用程序可能可以通用,因为那是基于操作系统上面的抽象,api接口可以做到兼容,无论操作系统的版本还是硬件的内存、cpu都可以屏蔽掉,rom却不是这样,每个文件间都可能是紧密耦合的,每个文件里面包含什么功能,调用其他模块的哪个函数不同的rom可能都不一样,所以我觉得直接替换掉文件就行的可能性不大
引用:
原帖由 CyberVsQ 于 2007-4-18 17:36 发表
我觉得应用程序可能可以通用,因为那是基于操作系统上面的抽象,api接口可以做到兼容,无论操作系统的版本还是硬件的内存、cpu都可以屏蔽掉,rom却不是这样,每个文件间都可能是紧密耦合的,每个文件里面包含什 ...
同意,但是因为还没看到I539完全的rom,所以hack还有一线希望
T_____Try
R_____Resetting
E_____Every-
O__________One!
好专业的评论哦...
别猜了,我就是阿海
创造快感,唯有双手
真是高手啊,绝对支持楼主!!
这个 一定要顶!!!!!!!!!!!!!!!!!!!!!!
辛苦了 !!!
不是强帖,我不顶!
楼主强人。。。拜一个。

惭愧。。。我以后再也不提解决cdma650短信问题了
推荐小家电专卖:http://shop36322153.taobao.com,新开张,为了吸引人气,论坛网友购买一律惊喜价。
一定要顶!!!
各种原由好复杂```      太谢谢LZ对650CDMA版本  短信所 做出的一切!!!!
TP 570
Treo 650(CDMA)曾经,哎``
XV6700
我认为读数据库就未必不行,按照我目前的想法,乱码的短信其实还是包含了原始内容的全部信息的,只是位置不对,所以我非常希望能有人提供一份乱码的短信让我验证下想法
引用:
原帖由 victorzhao 于 2007-4-19 09:02 发表
我认为读数据库就未必不行,按照我目前的想法,乱码的短信其实还是包含了原始内容的全部信息的,只是位置不对,所以我非常希望能有人提供一份乱码的短信让我验证下想法
和我联系一下,我来帮你
T_____Try
R_____Resetting
E_____Every-
O__________One!
引用:
原帖由 victorzhao 于 2007-4-19 09:02 发表
我认为读数据库就未必不行,按照我目前的想法,乱码的短信其实还是包含了原始内容的全部信息的,只是位置不对,所以我非常希望能有人提供一份乱码的短信让我验证下想法
我之前做过很详细的测试 ,发送一个汉字(烫,为什么选择这几个字?因为烫的内码高低字节都一样,现在看来这个想法不对,应该选择unicode的高低字节一样的),两个汉字,三个汉字,具体的结果我没有保留下来,现在无法提供给你,但是我记得发三个汉字“好烫啊”时候,因为 ,收到的是3f 3f 3f  3f,就是收到4个"?"而已,字节数都不对,发一、两个汉字时候不同的汉字可能出来的也只是 3f 或者 ff 而已,试问怎么还原?

当然支持你再试一回,前提当然是你要有手机,只靠别人提供一条短信给你是不足够的。另外,我建议先要搞清楚sms_00000,就是手机的编码方式配置,这才是突破口,在现在的这种配置情况下实在是没可能了

可以看看别人的测试
http://www.hi-pda.com/forum/viewthread.php?tid=339808&highlight=%D6%D0%CE%C4%B6%CC%D0%C5

[ 本帖最后由 CyberVsQ 于 2007-4-19 10:00 编辑 ]
信息一旦经过机器处理后就少了很多东西了.已经纯粹是乱的了...

减掉一个校验位,一个汉字就少了两个bit,如果是多个汉字,后面的字减掉两个bit后再向前移两位...晕倒..

想想看那位是什么样子?
引用:
原帖由 寂夜清风 于 2007-4-19 10:03 发表
信息一旦经过机器处理后就少了很多东西了.已经纯粹是乱的了...

减掉一个校验位,一个汉字就少了两个bit,如果是多个汉字,后面的字减掉两个bit后再向前移两位...晕倒..

想想看那位是什么样子?
校验位是加在每个字符里的么?我原以为是加在短信头的。
但即使如此应该页还是可以解决部分中文显示的问题,以为减掉的不是1就是0,然后根据unicode表把常用的字补全,这样应该可以大致显示短信信息。
引用:
原帖由 CyberVsQ 于 2007-4-19 09:43 发表


我之前做过很详细的测试 ,发送一个汉字(烫,为什么选择这几个字?因为烫的内码高低字节都一样,现在看来这个想法不对,应该选择unicode的高低字节一样的),两个汉字,三个汉字,具体的结果我没有保留下来 ...
你的3f3f3f3f是直接把编码显示出来还是你根据四个"?"而推出它是3f3f3f3f?

如果是后者可能就有问题了,我想CJK应该不会显示所有的unicode码,对于超出它显示范围的可能就是简单的用“?”来代替了。
虽然咱不懂,但是要顶的!!!!!!!!
CyberVsQ DX算是在CDMA短信研究上投入较多精力的一个,辛苦了!

现在能直接看到结果的,也就SMS_0000的方法,其它的都还太远,我的CDMA 650自从“3月短信事件”后已在抽屉中闲了一段时间了,更多的朋友加进来,才有希望。。。
顶顶,虽然我不懂
楼上几位高手,RP就是好,没啥好说的,热烈支持你们!

回复 #22 victorzhao 的帖子

我是写程序去读的, 确实读了里面的ascii码值,包括不是3f的都读出来,试着把两者写成二进制来比较,但是实在找不到超过半个字节的相同. 我觉得没什么好讨论了,你试试吧
用写号线能读取最后一条短信,这能给各位XD一点提示吗?