舒肤佳服务的两个分支,a()方法是很典型的消息处理代码,收到消息后对广播进行了中断, 由于 代码过长 ,我就不帖 出来了, 大家可以自 己打 开 Small 看看, 另一个 是 SafeGuardMmsService 了,它的 onCreate()代码如下:
.method public onCreate()V
.locals 4
invoke-super {p0}, Lcom/qihoo360/mobilesafe/service/MobileSafeService;->onCreate()V
const-string v0, "SafeGuardMmsService" const-string v1, "onCreate"
invoke-static {v0, v1}, Lals;->b(Ljava/lang/String;Ljava/lang/String;)V
#这里打 LOG
new-instance v0, Lhl;
invoke-direct {v0, p0}, Lhl;-><init>(Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;)V
sput-object v0, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->d:Landroid/database/Cont entObserver;
invoke-virtual {p0}, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->getContentResolver()Land roid/content/ContentResolver;
# getContentResolver()获取 ContentResolver
move-result-object v0
sget-object v1, Landroid/provider/Telephony$Sms;->CONTENT_URI:Landroid/net/Uri;
const/4 v2, 0x1 #获取短信的 CONTENT_URI,后面对它进行监视
sget-object v3, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->d:Landroid/database/Cont entObserver;
invoke-virtual {v0, v1, v2, v3}, Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLa
ndroid/database/ContentObserver;)V #注册短信数据库监视器对短信数据库变化进
行监听
const/4 v0, 0x0
sput-boolean v0, Lac;->a:Z
new-instance v0, Landroid/content/IntentFilter;
const-string v1, "android.provider.Telephony.SMS_RECEIVED" #这个太熟悉
了,用来注册短信广播接收者
invoke-direct {v0, v1}, Landroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
const v1, 0x7fffffff
invoke-virtual {v0, v1}, Landroid/content/IntentFilter;->setPriority(I)V
#设置最高的优先级
new-instance v1, Lcom/qihoo360/mobilesafe/receiver/MessageReceiver;
invoke-direct {v1},
Lcom/qihoo360/mobilesafe/receiver/MessageReceiver;-><init>()V
sput-object v1, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->h:Lcom/qihoo360/mobilesa fe/receiver/MessageReceiver;
sget-object v1, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->h:Lcom/qihoo360/mobilesa fe/receiver/MessageReceiver;
invoke-virtual {p0, v1, v0}, Lcom/qihoo360/mobilesafe/service/SafeGuardMmsService;->registerReceiver(Landroi d/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Int
ent; # ☻动态注册短信广播接收者☻
return-void
.end method
看看,有没有?有没有?在静态广播中创建一个服务,在服务中又动态创建一个广播, 真可谓是用心良苦啊!那这个 MessageReceiver 何时收到?服务何时启动呢?我没有再深入 了,不过它不是在开机启动广播中启动的,这为我们下一步的成功照亮了方向啊,下面是证 据:
打开“BootActionReceiver.smali”文件,看它的 onReceive()方法:
.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
.locals 2
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
move-result-wide v0
sput-wide v0, Lcom/qihoo360/mobilesafe/ui/index/MobileSafeApplication;->d:J
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J #上面只保存
了几个时间值,体检时用的
move-result-wide v0
sput-wide v0, Lcom/qihoo360/mobilesafe/ui/index/MobileSafeApplication;->c:J
invoke-static {p1}, Lom;->a(Landroid/content/Context;)V # 这里调 用了
om-a()方法
return-void
.end method
对 om-a()方法继续跟踪:(找到 om.smali 文件打开之)
.method public static a(Landroid/content/Context;)V
.locals 3 const/4 v2, 0x1
new-instance v0, Lafc;
invoke-direct {v0, p0}, Lafc;-><init>(Landroid/content/Context;)V
invoke-virtual {v0}, Lafc;->i()Z
move-result v0
if-eqz v0, :cond_0
new-instance v0, Landroid/content/Intent;
const-class v1,
Lcom/qihoo360/mobilesafe/protection/PhoneProtectionLockWindow;
invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
const-string v1, "PROTECTION_LOCK"
invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent; invoke-virtual {p0, v0}, Landroid/content/Context;->startService(Landroid/content/Intent;)Landroid/conte |