找回密码
 加入我们

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2809|回复: 13

[Pixi] CDMA Pixi、Pixi Plus 无尾巴中文短信补丁是无效的

[复制链接]
发表于 2012-6-10 16:32 | 显示全部楼层 |阅读模式
    看了一下论坛新近发布的CDMA Pixi、Pixi Plus 无尾巴中文短信补丁,发现作者是想在短信的最后增加两个零来标示结尾,希望这样可以在短信发送或显示时截断后面的尾巴。以前我自己也这样做过,但结果是不能截断后面的尾巴,原因是cdma系统和手机并不是以零来判断字串的结尾,而是由单独的长度变量来决定字串的结尾。所以尾巴还是会有,只是短信和尾巴之间多增加两个零而已。5 z) @: [2 n6 a* E) P# S% I( d
  很多人认为这个补丁有效是因为测试方法不对。首先不能刚重启就立即发短信,因为这时候基带modem的短信缓冲不存在,这时候发短信,尾巴里的数据是内存中的一些初始数据,比如0或者0xff,这些数据在有些手机上显示不出来,所以让人误解是没有尾巴了,其实不是没有尾巴,只是尾巴的内容无法显示而已。其次,你发的短信长度要小于短信缓冲的长度,否则会造成缓冲区溢出,尾巴里还是显示不出来的数据,还是会让你误认为没有尾巴了。那么什么才是正确的测试方法呢?
/ s$ O8 k; o! D8 d   正确的测试方法是这样的:0 ], X6 z  {  q3 N
重启后先收一条短信,这条短信的长度要大于你要发的短信,为了效果更明显,这条短信的长度要大于你要发短信的2倍。比如你要发2个汉字的测试短信,你要先收1条4个汉字的短信,由于补丁加了一个字,你发2个字相当于是发了3个字,所以你要先收一条6个字的短信。这时你发2个字短信,接收方就会收到6个字的短信,前2个字是原文,第3个字是补丁加的,后3个字是尾巴,尾巴的内容就是发送方在发送之前收到的那条6字短信的后3个字。- U3 h/ F5 }/ H6 }
   用正确的测试方法很快就会发现补丁是无效的,尾巴一直都是存在的,只是内容能不能显示的区别,只要你重启之后,收到过短信,你再发短信的时候,所发短信的长度小于收到短信的总和,就会把你收到短信的内容作为尾巴发出去,泄漏你的信息。
. d, R& O* g' S3 {9 d3 U# Q# N3 {  V   从这里也可以看出,重启后没有收到短信就立即发短信,发出去的是隐形尾巴,不会泄漏信息,所以如果你收到重要短信不想泄漏,不用打补丁,只要重启手机然后立即发短信,就行了,这可以看作是很少发短信的人可以用的一个没有办法的办法。要从根本上解决问题,还得要升级amss到最新版,才能正确处理utf16短信的长度,或者有人能够修改现有的amss,使得短信从app传到基带时被加倍,或者从基带传到cdma网络时被减半。
回复

使用道具 举报

发表于 2012-6-11 13:16 | 显示全部楼层
顶 就是这样 重启后有效 收到短信无效
回复 支持 反对

使用道具 举报

发表于 2012-6-11 13:48 | 显示全部楼层
怎么说呢,加0当然不能就此截断短信内容,但是有可能会让接收方不显示0后的内容。不论基带或者cdma网络怎么处理,所有的手机在处理短信的时候最终总是要把内容提交给应用的。这个小补丁的目的就是希望有些应用可以遇见0然后截断尾巴。另外,pixi的问题好像不在amss上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-11 14:46 | 显示全部楼层
snowmonkey 发表于 2012-6-11 13:48
+ n2 i7 z% W, v( o怎么说呢,加0当然不能就此截断短信内容,但是有可能会让接收方不显示0后的内容。不论基带或者cdma网络怎么 ...
. C* }( _4 U+ ^
      你想由接收方的应用程序来不显示0后面的内容,就是我第一句话所说的“显示时截断后面的尾巴”,这要看接收方的应用程序是以C的方式决定长度,还是依赖单独的变量决定长度,很不幸的是,我测试了pixi、黑莓5.0系统、还有一款06年产的三星cdma功能手机,它们的短信应用程序都是由cdma网络传来的单独长度变量决定字串长度,所以0都不会在显示时截断尾巴。iphone和android我没试,有兴趣的机油可以用我说的重启后收完短信再发的方法试下,如果也不能截断尾巴,恐怕暗示直接使用网络传来的长度而不以c方式决定长度是一种标准,这样的话你的想法会在所有手机上落空。另外,pixi的问题恰恰是在amss上,pixi旧版的amss只接受了应用核传来的一个长度变量,在amss内部复制短信时,它把这个量认为是字节数,但是在基带发往cdma网络时,却把这个变量认为是字符数,二者正好相差一倍,所以发任何短信都会带一倍的尾巴,这个过程都在amss内部完成,不更改内部这种处理差异的错误,应用核端的软件再怎么改都是徒劳的,总是会相差一倍。新版的amss接受两个长度变量和一个编码变量,一个指明字节数,一个指明字符数,还有一个指明数据的编码方式,这样就没问题了,这些都可以在amss相关资料中查到。本来这些pixi都是为美国运营商定制,美国使用ascii码,字节数和字符数是相等的,所以即使高通知道有这个问题,反正这些机器只在美国用,也就不去更新的了。而新版做了统一的国际化版本,这些问题就都不存在了。
回复 支持 反对

使用道具 举报

发表于 2012-6-11 15:28 | 显示全部楼层
pollyster 发表于 2012-6-11 14:46 ; W+ S3 A4 y* {
你想由接收方的应用程序来不显示0后面的内容,就是我第一句话所说的“显示时截断后面的尾巴”,这要 ...

' y2 [0 E0 a, c$ j2 |5 J2 N2 o你还是没有搞清楚我的观点。我的意思是,在上层应用处理短信内容的时候,对于字符串内出现的0,有可能会截断其后的内容。这个跟cdma的标准协议无关,跟底层的接收也无关。所以,这个补丁在一部分机器上是有效的。虽然不是全部有效。% _. n8 M: s6 T, b9 H
# [; e8 A6 O) m/ K
另外,我对fw部分不懂,主要没有多少资料可以参考。我是看到当短信进入wms.c处理的时候就已经被加倍字长了,不知道这个是在什么地方。/ W! B: g* G7 o, H/ y' d; \
! ~" Y# G* J  d
再有,如果因为fw太旧的话,那为啥更早的650的fw都没有问题呢?( z! W8 Z8 S& C4 d& o
  P" g8 \# n& j  d. I
更进一步的探讨,如果是早期的amss对ucs2没有支持的话,那为什么它偏偏对编码标志为4的短信进行这种字长加倍的处理呢?而其他标志都不会有这种处理?那么能否理解为高通其实是处理了ucs2,只是没处理对?又或者这个不是高通的错误呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-11 18:34 | 显示全部楼层
本帖最后由 pollyster 于 2012-6-11 18:44 编辑
3 B2 l4 L9 }( T1 D7 K$ `+ m
snowmonkey 发表于 2012-6-11 15:28
. s5 g& H$ r/ ?6 j5 J" a你还是没有搞清楚我的观点。我的意思是,在上层应用处理短信内容的时候,对于字符串内出现的0,有可能会截 ...

: N& U, o; C- M/ {, y, s2 A5 T
0 G" H# j* Y0 @$ y& I+ m3 g     不知是我没表达清楚,还是你没理解清楚,我再明确说明一次,我说的不会遇到零就截断,而是靠长度变量来结尾,指的正是接收方手机上的应用程序,不是指的底层,更不是指cdma协议,应用程序的编写也是有规范的啊,比如cdma网络传来的字串,应用程序是按C的方式处理呢?还是去读网络传来的长度变量来结尾呢?应用程序也有这两个选择啊,至少我测试的三种手机的应用程序清一色地选择了第二种方法,没有遇0截断啊,如果iphone和android上面的应用程序(注意是应用程序不是底层)也是选择的第二种方法,难道不能合理怀疑在应用程序的编写中,尤其是短信等字串处理问题中,所有手机商的应用程序编写都遵循相同规范吗?再重复一便,我这里指的标准或规范是应用程序的编写规范,与底层毫无关系,与cdma协议更无关系,之所以提到cdma只是因为长度数据的来源是cdma网络而已。
" h/ `: }  F/ K. j1 [& I0 n    pixi中有两个核,一个核跑linux,另个核跑amss,对于linux来说,amss就像是一个外设,具体来说是个modem,最早通过向一个虚拟的串口发at命令来通信,就像pc机上的拨号modem那样,pixi上的两核除了at命令,还有更新的通讯方式,你可以认为是非at格式的命令,而且不是通过虚拟串口来通讯的。现在短信从libTelephonyInterfaceLayer通过发命令传到了amss,这个命令中只包含了一个长度,在复制命令中的短信内容的时候,是按这个长度来复制的,这个长度是字节数还是字符数呢?amss处理命令的模块认为它既是字节数又是字符数,因为整个系统在美国使用,采用ascii码,决定复制长度的时候,它不会去理睬cdma发送编码(就是你说的4),因为这个4本来是不该出现的,在美国用的手机发ascii码,怎么会出现4呢?这个4是你通过修改libTelephonyInterfaceLayer让它意外出现的,amss命令处理模块不管,还按ascii那样来处理。但问题是pixi的基带发往cdma网络的模块不是这样的,它懂得要通过cdma发送编码来确定字节数和字符数的关系,它是个国际化的模块,也就是说这两个功能模块在国际化方面进度不一致,也没必要一致,因为是用在ascii国家。至于为什么不一致,也许根本就是分立的硬件,发送部分对amss又是个硬件modem设备,这样可以卖到中国,只要把一个模块换掉不用换发送模块就行了,也许只是两个部门进度整合不一致,由于不影响美国使用就没有在这个版本中让它们一致,我们外人不能肯定不一致的原因。但是能回答你的疑惑,老的650的fw为什么可以呢? 因为这两个模块进度一致了,比如都不懂国际化,就只需提供字节数就行了,尽管字节数会被cdma网络曲解,但是在发送方不会缓冲溢出,不会发送时带上发送方的信息,当然接收方有可能溢出,但没有泄密问题。如果进度一致是都懂国际化,那就更不用说了。老产品比新产品国际化得更好这并不是什么奇怪的事。而且pixi的amss也可能不是新旧的问题,只是其中一个模块采用ascii模块而已,因为只用在美国。而新amss就不这么分了,统一为国际化模块。所以两个模块一个懂一个不懂国际化,就造成如果人为指定utf16(ucs2)编码的时候,一个会处理一个不会处理的错误,在pixi上就是带尾巴。新的amss除了发送编码,还加了数据编码,数据编码告诉amss你发过来的数据怎么算长度,而发送编码告诉cdma网络你用哪种编码。其实有时间看汇编的话,有两种改法,一种是在amss上找到向基带准备数据的部分,把长度减半就行了。另一种是找到amss复制libTelephonyInterfaceLayer传来短信的部分,把长度加倍,然后再在libTelephonyInterfaceLayer写0xb9,0xba的长度栏位时减半就一切正确了。
回复 支持 反对

使用道具 举报

发表于 2012-6-12 20:56 | 显示全部楼层
湊一下熱鬧^_^1 C; y% f2 x8 O7 E9 z' G4 ~+ s
我發現接收來自pixi短信的尾巴,其實是pixi上接收的最後一條短信的“隨機”內容,該內容有幾點特徵:
" U( T9 o% A" w4 e. f1. 來自pixi接收的最後一條短信
# m, C8 A, J4 F! {1 X  W/ I2. 長度基本與發送文本長度一致(此長度只是字數,不分ASCII或中文)
* j  z) t' t% V$ t& F$ {我的問題是& u% R- U5 a. N* `6 h1 f
1. 為什麼接收的短信內容會被“隨機”增加成發送信息的尾巴?發送和接收的內存是共用的?
) n3 q3 S# r0 L( ~  }2. 能不能在發送信息之前清空短信所佔用的內存,比如全部設為0& t8 p$ W4 h, R  U: I
3. 關於中文短信長度,尤其中英文混合,確實是比較頭疼的,有沒有可能全部轉成Unicode再發送?# Y9 Q( V4 X% }9 w" O8 c9 r$ E
4. 我記得以前看手機資料有看到,在AT指令中,是可以選擇ASCII或UNICODE或其他編碼方式發送文本,其實短信最終發送的字節長度也在此說明,有沒有可能在這個地方做文章?
回复 支持 反对

使用道具 举报

发表于 2012-6-13 10:21 | 显示全部楼层
我是pixi plus cdma v版,打了无尾巴补丁,一切正常,是有效的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-13 10:36 | 显示全部楼层
本帖最后由 pollyster 于 2012-6-13 10:37 编辑 / E/ q1 e8 h; z+ T( K* e4 i
jb5867386 发表于 2012-6-13 10:21 / e  M# A3 k) x2 S$ b( C
我是pixi plus cdma v版,打了无尾巴补丁,一切正常,是有效的。
, E, [& }8 ?' N  L! t( i' M

3 q/ p" h1 D+ X* ^5 _) @6 `: R你可以说出你是用什么手机接收短信的吗?
回复 支持 反对

使用道具 举报

发表于 2012-6-27 17:02 | 显示全部楼层
我的pixi plus cdma 1.45.1开始有用,现在有尾巴了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 23:28 | 显示全部楼层
jb5867386 发表于 2012-6-27 17:02
" m# c# |! m: _/ [( S  Q我的pixi plus cdma 1.45.1开始有用,现在有尾巴了!

: p2 r1 x5 w2 g5 G" O对,你这种情况属于我在前面说过的测试方法错误。每当手机重启后,尾巴是看不见的,必须先收过短信后再发短信才能在接受手机上看见尾巴,每次重启后在收短信之前发短信,尾巴里是一些显示不了的字符,所以接收手机上是看不见尾巴的。
回复 支持 反对

使用道具 举报

发表于 2012-7-1 16:19 | 显示全部楼层
那怎么搞,我都烦死了!每次发短信就换个手机!这个pixi plus cdmaV版现在收短信完全没有问题!但是发短信,人家收到的后面都莫名加了些内容!!!!哭啊!!!
回复 支持 反对

使用道具 举报

发表于 2012-7-6 17:23 | 显示全部楼层
今天还想着把手机擦下灰再用呢。这个问题到现在还没有解决啊。
回复 支持 反对

使用道具 举报

发表于 2013-5-27 22:29 | 显示全部楼层
我也测试了,确实不管用。不过基本也不发中文短信了,用gtalk挺好的,哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2024-3-29 15:35 , Processed in 0.213745 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表