韩版机泛泰A850framework去除漫游、本地化

适用于泛泰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"


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值