- 积分
- 588
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
发表于 2007-4-7 20:08:58
|
显示全部楼层
你可以参考一下这篇文章http://www.delphibbs.com/keylife/iblog_show.asp?xid=22411
个人认为:
刷了补丁后,在短信内容前加个普通空格,那么在发出短信之前,根据是否有空格,对短信最终的PDU编码进行修改,然后发送。
对方根据含有标志该消息是免提短信的PDU编码进行解析
但我还没找到到底是哪个编码!
+:
是我所想:
参照:http://cwqu.3322.org/topic_list_detail?subject_id=42&topic_id=1980&topic_page_id=2
里面一小段:
//普通
if(!sms.m_nClass)
{
pdu.m_sPDUBody.Format(_T("001100%s000801%02X%s"),
sTPDA, sSMS.GetLength() / 2, sSMS);
}
//免提
else
{
pdu.m_sPDUBody.Format(_T("001100%s001801%02X%s"),
sTPDA, sSMS.GetLength() / 2, sSMS);
}
里面有一处红处标出的是不一样的!由于类是封装的,不知道具体是哪一节码。
再+:
啊,找到了,再结合:http://www.emsky.net/bbs/simple/index.php?t9626.html
不知NC系列的其他机器支不支持直接发送短信(不通过手机管理器),如果支持的话,就可以修改内核发送免提短信。
文曲星是使用AT指令集来发送短信的,就是通过串口(红外口)发送诸如“AT+CMGS”等等命令。短信编码一般使用PDU格式,比如:
001100 0D 91683168027581F0 001800 04 6D4B8BD5(为字符串,即ASCII码30 30 31 31 。。。)
其中,001100固定(具体意义可以上网找)
0D是电话号码长度,91683168027581F0即电话号码+8613862057180
001800就是关键所在,中间的如果是18就是免提短信,08就是普通短信。
04是短信内容长度,6D4B8BD5是短信内容的UNICODE编码。
我只有NC360,没有办法做别的机器的内核。不过根据上面说的原理,各位高手应该可以轻松完成。
问题解决了,08或18这个地方是编码方式,即TP-DCS。
18的二进制编码:
00010010
[ 本帖最后由 losehave 于 2007-4-7 20:42 编辑 ] |
|