|
早想整一下这个问题了,一直没样本,短信太少。
& @- \* H% a* d: {今天终于收到这样一个垃圾短信,可以分析一下了。
+ n# f) L" [8 w9 c8 [# [ B2 U4 C/ d短信存在sqlite3数据库里,文件是/var/luna/data/dbdata/PalmDatabase.db3 ,: T0 u n% T+ u/ x
其中有两个表涉及短信内容, D( _$ ]7 f; ?( @' f: t. n/ K
一个是com_palm_messaging_data_ChatThread,这里的summary字段保存的是短信对话最后一条
v6 t1 u, ]4 h/ l5 T8 D另一个是com_palm_pim_FolderEntry,这里的messageText字段保存的是所有来往短信1 B9 @6 b7 k- n3 I# a$ L
其中,如果com_palm_messaging_data_ChatThread表有问题,会使整个短信程序都进不去,
5 y* i e3 l9 g$ I+ p# b, n因为这个只保存最后一条,因此再接收/发送到出问题的这个号码就会把原来有问题的覆盖掉,这样短信程序就可以进去了,: W1 Y3 s% L# H! K& v
但由于com_palm_messaging_data_ChatThread里还有出问题的短信,因此还不能显示与这个号码的详细住来,其他人的没问题。
/ Q. A% s! w$ d8 P对于我收到的这条短信,问题在于,其中包含一个非法的UTF8字符,十六进制为“E280A9”,
6 W |$ b: c/ {查下表,这个位置没有任何对应的字,
- D0 o) a) y. Z! O6 M4 i) f: {6 S4 }是不是还存在其他的非法字符,就不知道了,手上只有这一个样本。/ E. u1 R7 u3 \, g# H- o7 Q: ~
于是,解决的方式就是,将这三个字节删除,或者替换为别的就没问题了。
* l( A% m" A- p& s7 ~进一步如何自动化解决?
2 F( J; d1 w# x9 H) v一个可行的想法就是写一个小程序,做这个替换工作,每次进不去短信的时候就运行一下。
, k$ c7 u* J, [( j0 F另一个不很可行想法就是看看是谁在写这个短信数据库,是不是能直接过滤一下再写,有很大可能涉及到底层服务。2 i( O7 H3 x# c A3 `7 I2 ^; m
再一个可行想法就是死等webos2.0,底层服务重写过了,应该再没这毛病了吧?
2 l5 w6 x* V, i+ o附两个SQL语句,可以快速定位出错的条目
! r& o; c/ Z9 l$ F+ j7 a) {7 u- SELECT messageText FROM com_palm_pim_FolderEntry WHERE messageText LIKE X'25E280A925'
" [9 C/ O) R. c- ?- B* Z( c8 O9 | k - SELECT summary FROM com_palm_messaging_data_ChatThread WHERE summary LIKE X'25E280A925'
1 g4 S- Z1 l& Z' _# |
复制代码 |
评分
-
查看全部评分
|