适用于泛泰A850K,系统版本S0837210
改framework.odex或framework.jar去除漫游,发送短信时可以把国家代码替换为0
Java、samli、baksmali、dex2jar、jd-gui、apktool这些工具和环境请自备,使用方法请自行摸索。
Dex或odex反编译成smali汇编代码用于修改。
Dex转为jar,用于修改时对照java代码。
以下+号代表增加行,-号代表删除行。
一、com\android\internal\telephony\CallerInfoAsyncQuery.java
目标代码分析:
protectedclass CallerInfoWorkerHandler extends AsyncQueryHandler.WorkerHandler函数中的
label132: if ((i != 0) && (str1 != null) && (str1.length() >= 12) && ((localCookieWrapper.cookie instanceof Connection)) && (((Connection)localCookieWrapper.cookie).isIncoming()) && (CallerInfoAsyncQuery.CallerInfoAsyncQueryHandler.this.isRoaming(CallerInfoAsyncQuery.CallerInfoAsyncQueryHandler.this.mQueryContext)) && (str1.startsWith("+82")))
改为
label132: if ((i != 0) && (str1 != null) && (str1.length() >= 12) && ((localCookieWrapper.cookie instanceof Connection)) && (((Connection)localCookieWrapper.cookie).isIncoming()) && (CallerInfoAsyncQuery.CallerInfoAsyncQueryHandler.this.isRoaming(CallerInfoAsyncQuery.CallerInfoAsyncQueryHandler.this.mQueryContext)) && (str1.startsWith("+82")) && (str1.startsWith("+86")) && (str1.startsWith("+886")) && (str1.startsWith("+852")) && (str1.startsWith("+853")) && (str1.startsWith("+84")) && (str1.startsWith("+60")))
接下来修改smali汇编
com\android\internal\telephony\CallerInfoAsyncQuery$CallerInfoAsyncQueryHandler$CallerInfoWorkerHandler.smali
invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_a8
+
+ const-string v2, "+86"
+
+ move-object/from16 v0, v17
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
+ const-string v2, "+886"
+
+ move-object/from16 v0, v17
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
+ const-string v2, "+852"
+
+ move-object/from16 v0, v17
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
+ const-string v2, "+853"
+
+ move-object/from16 v0, v17
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
+ const-string v2, "+84"
+
+ move-object/from16 v0, v17
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
+ const-string v2, "+60"
+
+ move-object/from16 v0, v17
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_a8
+
.line 180
const/4 v2, 0x3
move-object/from16 v0, v17
invoke-virtual {v0, v2}, Ljava/lang/String;->charAt(I)C
目标代码分析:
private boolean isRoaming(Context paramContext)
{
return ((TelephonyManager)paramContext.getSystemService("phone")).isNetworkRoaming();
}
强制改为非漫游
private boolean isRoaming(Context paramContext)
{
return false;
}
接下来修改smali汇编
.method private isRoaming(Landroid/content/Context;)Z
.registers 4
.parameter "context"
.prologue
.line 272
const-string/jumbo v1, "phone"
invoke-virtual {p1, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/telephony/TelephonyManager;
.line 273
.local v0, telephonyManager:Landroid/telephony/TelephonyManager;
invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->isNetworkRoaming()Z
move-result v1
return v1
.end method
改为
.method private isRoaming(Landroid/content/Context;)Z
.registers 4
.parameter "context"
.prologue
.line 272
const/4 v1, 0x0
return v1
.end method
二、com\android\internal\telephony\gsm\GsmMmiCode.java
目标代码分析:
private String getCFQueryResultNumber(CallForwardInfo paramCallForwardInfo)函数中的
if (str.startsWith("+82"))
{
localStringBuilder.append("0");
localStringBuilder.append(str.substring("+82".length()));
str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
}
+ if (str.startsWith("+86"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+86".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
+ if (str.startsWith("+886"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+886".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
+ if (str.startsWith("+852"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+852".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
+ if (str.startsWith("+853"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+853".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
+ if (str.startsWith("+84"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+84".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
+ if (str.startsWith("+60"))
+ {
+ localStringBuilder.append("0");
+ localStringBuilder.append(str.substring("+60".length()));
+ str = PhoneNumberUtils.formatNumber(localStringBuilder.toString());
+ }
}
else
+ {
return str;
+ }
return PhoneNumberUtils.formatNumber(str.toString());
}
接下来修改smali汇编
com\android\internal\telephony\gsm\GsmMmiCode.smali
invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
.line 1778
+ :cond_38
+
+ const-string v2, "+86"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_1
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+86"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
+ :cond_1
+
+ const-string v2, "+886"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_2
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+886"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
+ :cond_2
+
+ const-string v2, "+852"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_3
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+852"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
+ :cond_3
+
+ const-string v2, "+853"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_4
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+853"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
+ :cond_4
+
+ const-string v2, "+84"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_5
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+84"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
+ :cond_5
+
+ const-string v2, "+60"
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
+
+ move-result v2
+
+ if-eqz v2, :cond_6
+
+ const-string v2, "0"
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ const-string v2, "+60"
+
+ invoke-virtual {v2}, Ljava/lang/String;->length()I
+
+ move-result v2
+
+ invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+
+ invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
+
+ move-result-object v2
+
+ invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
+
+ move-result-object v0
+
:cond_37
+
:goto_37
return-object v0
.line 1775
- :cond_38
+ :cond_6
invoke-virtual {v0}, Ljava/lang/String;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Landroid/telephony/PhoneNumberUtils;->formatNumber(Ljava/lang/String;)Ljava/lang/String;
三、com\android\internal\telephony\gsm\GsmSMSDispatcher.java
目标代码分析:
protectedvoid sendText(String paramString1, String paramString2, String paramString3,PendingIntent paramPendingIntent1, PendingIntent paramPendingIntent2, String paramString4,int paramInt)函数中的
if (paramString4.equals(str.replace("+82", "0")))
{
localObject = str;
break;
}
+ if (paramString4.equals(str.replace("+86", "0")))
+ {
+ localObject = str;
+ break;
+ }
+ if (paramString4.equals(str.replace("+886", "0")))
+ {
+ localObject = str;
+ break;
+ }
+ if (paramString4.equals(str.replace("+852", "0")))
+ {
+ localObject = str;
+ break;
+ }
+ if (paramString4.equals(str.replace("+853", "0")))
+ {
+ localObject = str;
+ break;
+ }
+ if (paramString4.equals(str.replace("+84", "0")))
+ {
+ localObject = str;
+ break;
+ }
+ if (paramString4.equals(str.replace("+60", "0")))
+ {
+ localObject = str;
+ break;
+ }
localObject = paramString4;
break;
}
接下来修改smali汇编
com\android\internal\telephony\gsm\GsmSMSDispatcher.smali
const-string v4, "+82"
const-string v6, "0"
invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v10
.line 372
.local v10, fromNum:Ljava/lang/String;
move-object/from16 v0, p6
invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_96
.line 373
move-object v12, v11
goto :goto_2c
.line 375
:cond_96
+
+ const-string v4, "+86"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_1
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_1
+
+ const-string v4, "+886"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_2
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_2
+
+ const-string v4, "+852"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_3
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_3
+
+ const-string v4, "+853"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_4
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_4
+
+ const-string v4, "+84"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_5
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_5
+
+ const-string v4, "+60"
+
+ const-string v6, "0"
+
+ invoke-virtual {v11, v4, v6}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object v10
+
+ .local v10, fromNum:Ljava/lang/String;
+ move-object/from16 v0, p6
+
+ invoke-virtual {v0, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v4
+
+ if-eqz v4, :cond_6
+
+ move-object v12, v11
+
+ goto :goto_2c
+
+ :cond_6
+
move-object/from16 v12, p6
goto :goto_2c
.line 382
.end local v10 #fromNum:Ljava/lang/String;
四、android\telephony\MSimSmsManager.java
目标代码分析:
publicvoid sendTextMessage(String paramString1, String paramString2, StringparamString3, PendingIntent paramPendingIntent1, PendingIntentparamPendingIntent2, String paramString4, int paramInt1, int paramInt2)函数中的
if (paramString1.equals(TelephonyManager.getDefault().getLine1Number()))
{
Log.d("MSimSmsManager", "destinationAddress is the same self-number");
if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '2'))
paramString1 = paramString1.replace("+82", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '6'))
+ paramString1 = paramString1.replace("+86", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '8') && (paramString1.charAt(3) == '6'))
+ paramString1 = paramString1.replace("+886", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '5') && (paramString1.charAt(3) == '2'))
+ paramString1 = paramString1.replace("+852", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '5') && (paramString1.charAt(3) == '3'))
+ paramString1 = paramString1.replace("+853", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '4'))
+ paramString1 = paramString1.replace("+84", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '6') && (paramString1.charAt(2) == '0'))
+ paramString1 = paramString1.replace("+60", "0");
}
try
{
ISmsMSim localISmsMSim = ISmsMSim.Stub.asInterface(ServiceManager.getService("isms_msim"));
if (localISmsMSim != null)
localISmsMSim.sendTextWithCount(paramString1, paramString2, paramString3, paramPendingIntent1, paramPendingIntent2, paramString4, paramInt1, paramInt2);
接下来修改smali汇编
android\telephony\MSimSmsManager.smali
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x2b
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
const/4 v1, 0x1
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x38
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
const/4 v1, 0x2
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x32
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
.line 177
const-string v1, "+82"
const-string v2, "0"
invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object p1
.line 182
+ :cond_48
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_1
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_1
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_1
+
+ const-string v1, "+86"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_1
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_2
+
+ const-string v1, "+886"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_2
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x35
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x32
+
+ if-ne v1, v2, :cond_3
+
+ const-string v1, "+852"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_3
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x35
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x33
+
+ if-ne v1, v2, :cond_4
+
+ const-string v1, "+853"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_4
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_5
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_5
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x34
+
+ if-ne v1, v2, :cond_5
+
+ const-string v1, "+84"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_5
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_6
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_6
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x30
+
+ if-ne v1, v2, :cond_6
+
+ const-string v1, "+60"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_6
+
:cond_47
+
:try_start_47
const-string v1, "isms_msim"
invoke-static {v1}, Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
move-result-object v1
五、android\telephony\SmsManager.java
目标代码分析:
publicvoid sendTextMessage(String paramString1, String paramString2, String paramString3,PendingIntent paramPendingIntent1, PendingIntent paramPendingIntent2)函数中的
if (paramString1.equals(TelephonyManager.getDefault().getLine1Number()))
{
Log.d("SmsManager", "destinationAddress is the same self-number");
if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '2'))
paramString1 = paramString1.replace("+82", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '6'))
+ paramString1 = paramString1.replace("+86", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '8') && (paramString1.charAt(3) == '6'))
+ paramString1 = paramString1.replace("+886", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '5') && (paramString1.charAt(3) == '2'))
+ paramString1 = paramString1.replace("+852", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '5') && (paramString1.charAt(3) == '3'))
+ paramString1 = paramString1.replace("+853", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '8') && (paramString1.charAt(2) == '4'))
+ paramString1 = paramString1.replace("+84", "0");
+ if ((paramString1.charAt(0) == '+') && (paramString1.charAt(1) == '6') && (paramString1.charAt(2) == '0'))
+ paramString1 = paramString1.replace("+60", "0");
}
try
{
ISms localISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
if (localISms != null)
localISms.sendTextWithCount(paramString1, paramString2, paramString3, paramPendingIntent1, paramPendingIntent2, paramString4, paramInt);
接下来修改smali汇编
android\telephony\SmsManager.smali
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x2b
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
const/4 v1, 0x1
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x38
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
const/4 v1, 0x2
invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
move-result v1
const/16 v2, 0x32
- if-ne v1, v2, :cond_47
+ if-ne v1, v2, :cond_48
.line 159
const-string v1, "+82"
const-string v2, "0"
invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object p1
.line 164
+ :cond_48
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_1
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_1
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_1
+
+ const-string v1, "+86"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_1
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_2
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_2
+
+ const-string v1, "+886"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_2
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x35
+
+ if-ne v1, v2, :cond_3
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x32
+
+ if-ne v1, v2, :cond_3
+
+ const-string v1, "+852"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_3
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x35
+
+ if-ne v1, v2, :cond_4
+
+ const/4 v1, 0x3
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x33
+
+ if-ne v1, v2, :cond_4
+
+ const-string v1, "+853"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_4
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_5
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x38
+
+ if-ne v1, v2, :cond_5
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x34
+
+ if-ne v1, v2, :cond_5
+
+ const-string v1, "+84"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_5
+
+ const/4 v1, 0x0
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x2b
+
+ if-ne v1, v2, :cond_6
+
+ const/4 v1, 0x1
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x36
+
+ if-ne v1, v2, :cond_6
+
+ const/4 v1, 0x2
+
+ invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C
+
+ move-result v1
+
+ const/16 v2, 0x30
+
+ if-ne v1, v2, :cond_6
+
+ const-string v1, "+60"
+
+ const-string v2, "0"
+
+ invoke-virtual {p1, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
+
+ move-result-object p1
+
+ :cond_6
+
:cond_47
:try_start_47
const-string v1, "isms"
invoke-static {v1}, Landroid/os/ServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder;
move-result-object v1
六、com\android\internal\telephony\cdma\CdmaServiceStateTracker.java
目标代码分析:
protected boolean regCodeIsRoaming(int paramInt)
{
return 5 == paramInt;
}
改为
protected boolean regCodeIsRoaming(int paramInt)
{
return false;
}
接下来修改smali汇编
\out\com\android\internal\telephony\cdma\CdmaServiceStateTracker.smali
.method protected regCodeIsRoaming(I)Z
.registers 3
.parameter "code"
.prologue
.line 1156
- const/4 v0, 0x5
- if-ne v0, p1, :cond_5
-
- const/4 v0, 0x1
+ const/4 v0, 0x0
- :goto_4
return v0
-
- :cond_5
- const/4 v0, 0x0
-
- goto :goto_4
.end method
.method protected regCodeToServiceState(I)I
.registers 5
.parameter "code"
七、com\android\internal\telephony\gsm\GsmServiceStateTracker.java
目标代码分析:
if ((str3 != null) && (str1.equals(str3)))
{
j = 1;
str4 = getSystemProperty("gsm.sim.operator.numeric", "");
str5 = paramServiceState.getOperatorNumeric();
k = 1;
}
根据cm10的spn文件信息,改为
if ((str3 != null) && (str1.equals(str3)))
{
j = 1;
str4 = getSystemProperty("gsm.sim.operator.numeric", "");
str5 = paramServiceState.getOperatorNumeric();
if ((str5.equals("46000")) || (str5.equals("46001")) || (str5.equals("46002")) || (str5.equals("46003")) || (str5.equals("46007")) || (str5.equals("45406")) || (str5.equals("45406")) || (str5.equals("45412")) || (str5.equals("46601")) || (str5.equals("46688")) || (str5.equals("46689")) || (str5.equals("46692")) || (str5.equals("46693")) || (str5.equals("46697")) || (str5.equals("46699")))
{
i = 1;
j = 1;
}
k = 1;
}
接下来修改smali汇编
out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali
const-string v10, "gsm.sim.operator.numeric"
const-string v11, ""
invoke-virtual {p0, v10, v11}, Lcom/android/internal/telephony/gsm/GsmServiceStateTracker;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
move-result-object v6
.line 1615
.local v6, simNumeric:Ljava/lang/String;
invoke-virtual {p2}, Landroid/telephony/ServiceState;->getOperatorNumeric()Ljava/lang/String;
move-result-object v5
+ const-string v10, "46000"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46001"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
const-string v10, "46002"
- invoke-virtual {v6, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
- if-eqz v10, :cond_42
+ if-nez v10, :cond_1
- const-string v10, "46000"
+ const-string v10, "46003"
invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
- if-eqz v10, :cond_42
-
+ if-nez v10, :cond_1
+
+ const-string v10, "46007"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "45406"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "45406"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "45412"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46601"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46688"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46689"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46692"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46693"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46697"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-nez v10, :cond_1
+
+ const-string v10, "46699"
+
+ invoke-virtual {v5, v10}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
+
+ move-result v10
+
+ if-eqz v10, :cond_2
+
+ :cond_1
+
const/4 v1, 0x1
+
const/4 v2, 0x1
+
+ :cond_2
.line 1617
.local v5, operatorNumeric:Ljava/lang/String;
- :cond_42
const/4 v0, 0x1
+
.line 1619
.local v0, equalsMcc:Z
const/4 v10, 0x0
const/4 v11, 0x3
目标代码分析:
private boolean regCodeIsRoaming(int paramInt)
{
return 5 == paramInt;
}
改为
private boolean regCodeIsRoaming(int paramInt)
{
return false;
}
接下来修改smali汇编
out\com\android\internal\telephony\gsm\GsmServiceStateTracker.smali
.method private regCodeIsRoaming(I)Z
.registers 3
.parameter "code"
.prologue
.line 1591
- const/4 v0, 0x5
- if-ne v0, p1, :cond_5
-
- const/4 v0, 0x1
+ const/4 v0, 0x0
- :goto_4
return v0
- :cond_5
- const/4 v0, 0x0
-
- goto :goto_4
.end method
.method private regCodeToServiceState(I)I
.registers 5
.parameter "code"