上面第一种思路是分析所得的结果,思路如下,首先,要知道 360 是何时注册的广播接 收者,打开“smali\com\qihoo360\mobilesafe\receiver\MessageReceiver.smali”文件, 它 就 是 短 信 接 收 者 , 直 接 看 “onReceive(Landroid/content/Context;Landroid/content/Intent;)V”代码如下: .method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V .locals 5 const/4 v4, 0x0 sget-boolean v0, Lcom/qihoo360/mobilesafe/service/MobileSafeService;->c:Z if-eqz v0, :cond_0 sget-boolean v0, Lcp;->f:Z if-eqz v0, :cond_1 :cond_0 :goto_0 #MobileSafeService->c 与 cp->f 条件判断 return-void :cond_1 const-class v0, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService; # 获取 SafeGuardMmsService 类 -->> v0 = SafeGuardMmsService.class invoke-virtual {p2, p1, v0}, Landroid/content/Intent;->setClass(Landroid/content/Context;Ljava/lang/Class;)L android/content/Intent; #☻ p2 为 第 二 个 参 数 , -->> p2.setClass( 参 数 1, SafeGuardMmsService.class); invoke-static {}, Lawv;->a()I move-result v0 const-string v1, "MessageReceiver" new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V const-string v3, "onReceive::SDKVer =" invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-static {v1, v2}, Lals;->b(Ljava/lang/String;Ljava/lang/String;)V #调用 als->b(),猜测为打 log const/4 v1, 0x4 if-le v0, v1, :cond_2 #判断 SDK 版本是否大于 4 :try_start_0 const-class v1, Landroid/content/BroadcastReceiver; const-string v2, "isOrderedBroadcast" #是否为有序广播 const/4 v0, 0x0 check-cast v0, [Ljava/lang/Class; invoke-virtual {v1, v2, v0}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava /lang/reflect/Method; #获取方法,用来判断是否为有序广播 move-result-object v1 const/4 v0, 0x0 check-cast v0, [Ljava/lang/Object; #0 类型转换为 Object invoke-virtual {v1, p0, v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/ lang/Object; #调用判断方法 move-result-object v0 check-cast v0, Ljava/lang/Boolean; invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z #结果转换为 Boolean 值 :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 move-result v0 :goto_1 if-eqz v0, :cond_3 #如果为 0 就跳走(开启保护),为有序广播就继续处理 invoke-direct {p0, p1, p2}, Lcom/qihoo360/mobilesafe/receiver/MessageReceiver;->a(Landroid/content/Context; Landroid/content/Intent;)V #☻ 调用 a()方法☻ :goto_2 invoke-static {p1}, Lcp;->c(Landroid/content/Context;)V goto :goto_0 #返回 :catch_0 #catch 处理 move-exception v0 const-string v1, "MessageReceiver" new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V const-string v3, "invoke error " #生成错误提示字符串 invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String; move-result-object v0 invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-static {v1, v0}, Lals;->b(Ljava/lang/String;Ljava/lang/String;)V #这里打 log 显示 move v0, v4 goto :goto_1 :cond_2 move v0, v4 goto :goto_1 :cond_3 invoke-virtual {p1, p2}, Landroid/content/Context;->startService(Landroid/content/Intent;)Landroid/conte nt/ComponentName; #☻ 启用了 SafeGuardMmsService 服务(开启舒肤佳短信服务*^_^*)☻ goto :goto_2 .end method 在 onReceive()收到广播后,对消息进行判断,对是否为有序广播执行了 a()与开启 |