首页
社区
课程
招聘
[原创]手机毒霸去广告功能分析二:广告View的识别
发表于: 2013-3-21 10:43 12234

[原创]手机毒霸去广告功能分析二:广告View的识别

2013-3-21 10:43
12234

上次我们提到手机毒霸获得root权限之后,生成一个root进程,然后通过进程注入的方式将广告应用中的广告检测出来,并且清除之。这次我们将详细介绍手机毒霸(v1.6.0)是如何找到广告View的。

一、广告View判定规则分析
接着上次的说,注入代码勾住了ActivityThread中的mH的mCallback回调【@】,拦截了RESUME_ACTIVITY(107)和PAUSE_ACTIVITY(101)消息。直接看dex2jar反编译ksremote.jar后的代码。

@com.ijinshan.remotejar.e
              if (paramMessage.what == 107)
              {
                if (com.ijinshan.hookutil.b.a)
                  Log.d("HookActivityThread", "RESUME_ACTIVITY");
                f.a(paramMessage.obj); //这里就是在Activity resume之前做的事情
                KsRemoteCtrl.a(107);
                break;
              }
              if (paramMessage.what == 101)
              {
                f.b(paramMessage.obj);
                break;
              }
@ com.ijinshan.remotejar.f
  public static void a(Object paramObject) {//paramObjects实际是IBinder类型的token
    if ((a != null) && (e != null)) {
      Object localObject = a.get(paramObject);//根据token拿到ActivityClientRecord
      if (localObject != null) {
        Activity localActivity = c(localObject);//根据ActivityClientRecord拿到Activity
        if (localActivity != null) {
          //根据Activity拿到com.ijinshan.duba.a.b对象
          com.ijinshan.duba.a.b localb = (com.ijinshan.duba.a.b)e.get(localActivity);
          if (localb != null) localb.d();//接下来要跟这个函数
        }
      }
    }
    d();
  }
@ com.ijinshan.duba.a.b
  public void d()
  {
    if (com.ijinshan.hookutil.b.a)
      Log.e(a, this.c.toString() + " onResume");
    // com.ijinshan.remotejar.d.b()返回了主线程的一个Handler
    com.ijinshan.remotejar.d.b().postDelayed(this.h, 1000L);
  }
@com.ijinshan.duba.a.c
  public void run()
  {
    if (!a.h());
    while (true)
    {
      return;
      if (!b.a(this.a).isFinishing())
      {
        b.b(this.a);
        …
        boolean bool = this.a.a(b.a(this.a));//这里如果找到广告View就返回true
        …
        if (bool)
          b.a(this.a, true);
        else if (b.a(this.a).getClass().toString().indexOf("qsbk.app.logic.TopActivity") > -1)
          d.b().postDelayed(b.c(this.a), 500L);
      }
    }
  }
@ com.ijinshan.duba.a.b
  public boolean a(Activity paramActivity) {
    int i = 0;
    FrameLayout localFrameLayout = (FrameLayout)paramActivity.getWindow().getDecorView();//获得当前Activity的DecorView
    if (localFrameLayout != null) {
      localFrameLayout.getClass();
      bool = false;
      while (i < localFrameLayout.getChildCount()) {//从根开始遍历所有view
        if (a("---", localFrameLayout, localFrameLayout.getChildAt(i)))//接着看a方法
          bool = true;
        i++;
      }
    }
    boolean bool = false;
    return bool;
  }

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 6723
活跃值: (1199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
拜读中,沙发......
2013-3-21 10:49
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
3
反编译后都是源码.....
2013-3-21 11:07
0
雪    币: 202
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也想学习,但是感觉有点难~~~
2013-4-9 20:24
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持下!!!!!
2017-2-16 20:36
0
雪    币: 15
活跃值: (765)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
回帖支持,拜读受用
2017-2-16 23:56
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
比较66666比较66666
2017-2-17 13:49
0
游客
登录 | 注册 方可回帖
返回
//