IM-A820L运营商短信修改教程(供其他泛泰机型参考)

news/2024/11/24 19:28:26/

想要恢复运营商短信自然要先了解短信发送流程,这里推荐看 Android平台 短信发送流程剖析(含编码) 这篇,

这里附上里面的流程图

既然A820L的正常中文短信都是都是OK的,那么就可以判断信息的储存取出应该是没有问题的

再看看下一幅流程图,当然A820L的流程图未必跟这个完全一样,但我们可以根据这个来查找

跟拆分短信的关系应该也是不大的,所以主要看sendText这一流程


接下来要做的,就是要看这一流程中泛泰有没有加入一些稀奇古怪的变态代码(如一些运营商判断之类的东东)

将framework转为java查看,最后我们可以发现在com.android.internal.telephony.GsmSMSDispatcher.java中的sendText里加入了这些变态的代码

	protected void sendText(String s, String s1, String s2, PendingIntent pendingintent, PendingIntent pendingintent1, String s3, int i){int j = Log.e("GSM", "=== sendText ===!! ");String s4;com.android.internal.telephony.gsm.SmsMessage.SubmitPdu submitpdu;if (SkyMsgConfig.isSKTVendor() || SkyMsgConfig.isLGVendor()){if (TextUtils.isEmpty(s3))s4 = ((TelephonyManager)mContext.getSystemService("CHARSET=UTF-8")).getLine1Number();elses4 = s3;} else{String s11 = TelephonyManager.getDefault().getLine1Number();if (s3 == null){s4 = s11;int j1;if (TextUtils.isEmpty(s4))j1 = Log.e("GsmSMSDispatcher", "Can not read MSISDN from SIM");} else{String s12 = s11.replace("+82", "0");String s13 = s3;String s14 = s12;if (s13.equals(s14))s4 = s11;elses4 = s3;}}if (TextUtils.isEmpty(s4)){int k;String s5;String s6;String s7;boolean flag;GsmSMSDispatcher gsmsmsdispatcher;String s8;String s9;String s10;com.android.internal.telephony.gsm.SmsMessage.SubmitPdu submitpdu1;HashMap hashmap;CommandsInterface.RadioTechnologyFamily radiotechnologyfamily;GsmSMSDispatcher gsmsmsdispatcher1;PendingIntent pendingintent2;PendingIntent pendingintent3;int i1;SMSDispatcher.SmsTracker smstracker;GsmSMSDispatcher gsmsmsdispatcher2;SMSDispatcher.SmsTracker smstracker1;if (pendingintent1 != null)k = 1;elsek = 0;s5 = s1;s6 = s;s7 = s2;flag = k;submitpdu = SmsMessage.getSubmitPdu(s5, s6, s7, flag);} else{SmsHeader smsheader = new SmsHeader();smsheader.ReplyAddr = s4;byte abyte0[] = SmsHeader.toByteArray(smsheader);int l;String s15;String s16;String s17;boolean flag1;byte abyte1[];if (pendingintent1 != null)l = 1;elsel = 0;s15 = s1;s16 = s;s17 = s2;flag1 = l;abyte1 = abyte0;submitpdu = SmsMessage.getSubmitPdu(s15, s16, s17, flag1, abyte1);}gsmsmsdispatcher = this;s8 = s;s9 = s1;s10 = s2;submitpdu1 = submitpdu;hashmap = gsmsmsdispatcher.SmsTrackerMapFactory(s8, s9, s10, submitpdu1);radiotechnologyfamily = CommandsInterface.RadioTechnologyFamily.RADIO_TECH_3GPP;gsmsmsdispatcher1 = this;pendingintent2 = pendingintent;pendingintent3 = pendingintent1;i1 = i;smstracker = gsmsmsdispatcher1.SmsTrackerFactory(hashmap, pendingintent2, pendingintent3, radiotechnologyfamily, i1);gsmsmsdispatcher2 = this;smstracker1 = smstracker;gsmsmsdispatcher2.sendRawPdu(smstracker1);}

参考一下https://github.com/CyanogenMod/android_frameworks_base/blob/gb-release-7.2/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java

    protected void sendText(String destAddr, String scAddr, String text,PendingIntent sentIntent, PendingIntent deliveryIntent) {SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(scAddr, destAddr, text, (deliveryIntent != null));sendRawPdu(pdu.encodedScAddress, pdu.encodedMessage, sentIntent, deliveryIntent);}

可以发现,我们需要的是

submitpdu = SmsMessage.getSubmitPdu(s5, s6, s7, flag);
而不是

submitpdu = SmsMessage.getSubmitPdu(s15, s16, s17, flag1, abyte1);
并且显然

if (SkyMsgConfig.isSKTVendor() || SkyMsgConfig.isLGVendor())
else

的判断加入的s4未必为空,那么加入的s4是什么呢?

根据A820L若不设置本机号码就可发送运营商短信,还有"smsheader.ReplyAddr = s4;",我们基本可以判断这个s4是本机号码

那么最后的问题就是如何修改才能让设置了本机号码的手机正常发送运营商短信了


我们需要做的就是让它只执行

submitpdu = SmsMessage.getSubmitPdu(s5, s6, s7, flag);
最简单的办法就是修改令s4为空

或修改

submitpdu = SmsMessage.getSubmitPdu(s15, s16, s17, flag1, abyte1);

submitpdu = SmsMessage.getSubmitPdu(s5, s6, s7, flag);

当然,也可以进行代码删除,剩下

	protected void sendText(String s, String s1, String s2, PendingIntent pendingintent, PendingIntent pendingintent1, String s3, int i){int j = Log.e("GSM", "=== sendText ===!! ");String s4;com.android.internal.telephony.gsm.SmsMessage.SubmitPdu submitpdu;int k;String s5;String s6;String s7;boolean flag;GsmSMSDispatcher gsmsmsdispatcher;String s8;String s9;String s10;com.android.internal.telephony.gsm.SmsMessage.SubmitPdu submitpdu1;HashMap hashmap;CommandsInterface.RadioTechnologyFamily radiotechnologyfamily;GsmSMSDispatcher gsmsmsdispatcher1;PendingIntent pendingintent2;PendingIntent pendingintent3;int i1;SMSDispatcher.SmsTracker smstracker;GsmSMSDispatcher gsmsmsdispatcher2;SMSDispatcher.SmsTracker smstracker1;if (pendingintent1 != null)k = 1;elsek = 0;s5 = s1;s6 = s;s7 = s2;flag = k;submitpdu = SmsMessage.getSubmitPdu(s5, s6, s7, flag);gsmsmsdispatcher = this;s8 = s;s9 = s1;s10 = s2;submitpdu1 = submitpdu;hashmap = gsmsmsdispatcher.SmsTrackerMapFactory(s8, s9, s10, submitpdu1);radiotechnologyfamily = CommandsInterface.RadioTechnologyFamily.RADIO_TECH_3GPP;gsmsmsdispatcher1 = this;pendingintent2 = pendingintent;pendingintent3 = pendingintent1;i1 = i;smstracker = gsmsmsdispatcher1.SmsTrackerFactory(hashmap, pendingintent2, pendingintent3, radiotechnologyfamily, i1);gsmsmsdispatcher2 = this;smstracker1 = smstracker;gsmsmsdispatcher2.sendRawPdu(smstracker1);}
这里就不提供smali代码了,请自行修改之



http://www.ppmy.cn/news/253838.html

相关文章

《小米手机与泛泰A820L的分区结构对比分析-外加eMMC介绍》

-----------纯手打,部分参考网络资料。尚未完全写成,请暂勿转载 Android其实是一个Linux系统,Android手机的需要类似电脑主板的bios硬件引导程序才能正确加载系统。 这个类似bios的引导程序就是bootloader,他是加载内核之前运行的…

泛泰A820L (高通公司MSM8660 cpu) 3.4内核CM10.1(Android 4.2.2) 测试版第二版

欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪) windxixi(雪狐) wangsai008 组成) 感谢: tenfar(R大师)&#xff…

IM-A820L显示QHSUSB_DLOAD的救砖方案(修改中)

该方案基于个人理解,已修复一砖,不过不保证一定适合所有情况 主要使用QPST中的eMMC Software Download工具进行修复 这里使用的版本主要是QPST_2.7_374,也可以下其他更新的版本(366等旧版本不支持8660的hex,会报错&am…

泛泰A820L (高通MSM8660 cpu) 3.4内核的CM10.1(Android 4.2.2) 測试版第二版

欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪) windxixi(雪狐) wangsai008 组成) 感谢: tenfar(R大师)&#xff…

IM-A820L官方升级文件update包,更至1.53(7.31)

密码suky update.149.zip update.149to150.zip update.150to152.zip update.152to153.zip update.133to139.zip update.139to145.zip update.139to142.zip update.142to145.zip update.145to147.zip update.147to149.zip 以上文件均为官方OTA,获取方法…

编译联想A820内核源码

编译平台:Fedora 20 x64 交叉编译工具链:arm-linux-androideabi-4.6 话说这个编译工具我研究了两天,Fedora自带一个arm-none-eabi的ToolChain(工具链),但是会有编译错误,后来又换成CodeBench ToolChain,还是…

记一次联想A820t救砖线刷

因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下…

a820救砖记录

话说刷机也有几个年头了。就是每一次刷机都得救砖。 而且还得过夜,就是得要两天才能刷好。 这次也没能例外。 故事的起因是因为a820的内存太小了。姑且不说不支持Class4的sd卡了。 就是应用也只能装上微信跟支付宝,而且还非常勉强。再加上root 混乱&a…