360 有反编译手段,不过我们要分析的代码都已经成功的反编译出来了。在反汇编的 Smali 文件夹中 搜索“ android.intent.action.BOOT_COMPLETED ”,我 们 可以很 快 发现 “AutoRunManager.smali”与“ExamMain.smali”两个文件中有结果,我们通过文件名果断的 判 断 第 一 个 文 件 是 我 们 要 分 析 的 重 点 , 它 位 于 “smali\com\qihoo360\mobilesafe\opti\autorun”文件夹 。打开“AutoRunManager.smali” 文 件,我 们发 现“ AutoRunManager ”类是 继承自 “ android/app/Activity ”。 搜 索 “android.intent.action.BOOT_COMPLETED”,发现在.“method private a(ZZ)”、“method private e()V”、“method public onCreate(Landroid/os/Bundle;)V”三处发现有调用。先到 onCreate()方法中看看,代码被 Proguard 过,很难阅读,不过我们可以简单的判断它 只是进行了初始化,然后启动一个 AsyncTask。关键代码不在这里,限于篇幅就不列出来了。那怎么找关键点呢?我们看看上面显示的图,知道点击一键加速按钮与任意一栏的 List 后 会执行加速动作,我们仔细观察会发现在“onCreate(Landroid/os/Bundle;)V”方法的下面 有个 public onItemClick()方法,代码如下:
.method public onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V .locals 3 const/4 v1, 0x0 invoke-virtual {p1}, Landroid/widget/AdapterView;->getId()I #获取 ID move-result v0 packed-switch v0, :pswitch_data_0 #Switch 语句调用 :cond_0 :goto_0 :pswitch_0 #分支 0 return-void :pswitch_1 #分支 1 iput v1, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->x:I iget-boolean v0, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->p:Z if-nez v0, :cond_1 #☻通过 p 是否为真来进行相应的操作☻后面分析发现是启用 还是禁止的 Boolean 值 invoke-direct {p0}, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->f()V #刷新显示 goto :goto_0 :cond_1 iget-object v0, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->u:Lank; if-eqz v0, :cond_2 iget-object v0, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->u:Lank; iget-boolean v0, v0, Lank;->b:Z if-eqz v0, :cond_2 #u 与 u->b 不能为空 if-ltz p3, :cond_0 iget-object v0, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->K:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->size()I #获取 List 的大小 move-result v0 if-ge p3, v0, :cond_0 iget-object v0, p0, Lcom/qihoo360/mobilesafe/opti/autorun/AutoRunManager;->c:Landroid/widget/ListVi |