zoukankan      html  css  js  c++  java
  • 手机锁机软件原理

    这两天在手机论坛里面发现好多手机被锁屏软件锁屏了,锁屏效果(模拟器中)如下:

    初次接触这个软件,我一直以为是锁定了fastloader,但是问哪些被锁屏的人,他们没有root,也没有刷过机,只是单单的安装了这个软件,所以就得排除锁定loader的方式。

    直到后来反编译这个锁屏软件的安装包,才解开它真正实现的原理:

      1. 通过锁定home键,锁定返回键,这样单凭按键是无法退出该应用。

      2. 用户可能选择强制关机,一旦开机之后,系统就会恢复到桌面应用,而不是本应用,为了开机之后打开本应用,就需要是在应用中注册一个开机完成的广播接受者

        广播如下:android:name="android.intent.action.BOOT_COMPLETED"/>,收到该广播后就通过intent打开本应用。

         3. 当应用不在前台时,比如如下情况: 手机被锁定了,手机来电了,这时应用就在电话应用的下一个应用,这个时候你可以按下home键,将后台的那个应用侧滑清除掉,

         

       为了保证侧滑不被清楚点,它便在后台开启一个看门狗服务,每150ms检测一下前台应用应用是不是我的应用,如果不是就跳转到我的应用,也就是判断上图中最底下的应用是不是我的锁屏应用,如果是的话,就重新打开我的应用。

     应用关键代码如下: 

      //4.0以上锁定home键
        getWindow().setFlags(0x80000000, 0x80000000);

      //这个方法是锁定home键,4.0下可用,4.0上对部分机型可用.
        getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);

      //屏蔽返回键 

         

    @Override
    public void onBackPressed() {

      //屏蔽父类的返回处理
      //super.onBackPressed();
    }

    开机广播接受处理:

     public class BootBroadcastReceiver extends BroadcastReceiver
      {
        String action_boot="android.intent.action.BOOT_COMPLETED";

        @Override
        public void onReceive(Context context, Intent intent)
        {

          /*因为手机刷了MIUI,我不知道能不能自启,如果不能,删除注释符号。*/

            if (intent.getAction().equals(action_boot)){
          Intent ootStartIntent=new Intent(context, MainActivity.class);
          ootStartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(ootStartIntent);
            }

        }

      }

    开门狗代码:

    public class killpoccessserve extends Service
    {
      Context context;
      @Override
      public IBinder onBind(Intent p1)
      {
        // TODO: Implement this method
        return null;
      }

      @Override
      public void onCreate()
      {
        context = this;
        //Handler线程,接收timertask的message,用于重启应用。
        final Handler h = new Handler(new Handler.Callback(){
          public boolean handleMessage(Message msg){
            ActivityManager am=(ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningTaskInfo> runningTasks = am.getRunningTasks(1);
            ActivityManager.RunningTaskInfo runningTaskInfo = runningTasks.get(0);
            ComponentName topActivity =runningTaskInfo.topActivity;
            String packageName =topActivity.getPackageName();
            if(packageName.equals("tk.jianmo.study")){//判断是否是本应用
            }else{
               //不是本应用,启动应用,并kill掉之前的应用
                Intent intent=new Intent();
                intent.setClass(context,MainActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                am.killBackgroundProcesses(packageName);
              }
            return false;
          }
        });

        Timer timer;
        TimerTask timertask;
        timer = new Timer();
        timertask = new TimerTask(){
        @Override
        public void run(){
          h.obtainMessage().sendToTarget();

          }
        };

        timer.schedule(timertask, 0, 150);//0.15秒启动一次timertask,无延迟

      }

      @Override
      public void onStart(Intent intent, int startId){
        // TODO: Implement this method
        super.onStart(intent, startId);

      }


      @Override
      public void onDestroy()
      {
        // TODO: Implement this method
        super.onDestroy();
        }
    }

     解决办法:软件卸载(以下的解决办法程度递增的)

      1. 锁屏软件也是软件,只不过你启动该软件后是手机无法退出该软件,当然不排除你手速够快能在150ms(软件开发者设定,如果1s你就gg了)的时间内卸载该应用。

      2. 既然手机是无法退出该应用,那么我们可以借助电脑来卸载该软件,如果手机打开了usb调试,就可以通过手机助手在电脑中卸载安装在手机中的软件,如何没有开启的话,如  果手速够快的话,也可以在150ms时间内,打开usb调试。

      3. 甚至有些手机可以远程管理手机应用,甚至是清除数据。

          4.手机数据双清。

          5.手机刷机。

  • 相关阅读:
    ThingJS之聚光灯,js开发+控制面板轻松搭
    ThingJS不到50行代码就轻松开发拾取功能
    ThingJS:3D交互技术简化第一人称行走模式
    ThingJS:3D地图开发组件更新啦!
    ThingJS教你怎么用拖拽的方式变身热力图
    天空盒结合ThingJS开发平台,会碰撞出什么火花呢
    ThingJS中支持引用css样式并使用js语法开发
    ThingJS基于CMAP组件融合高德地图web API
    ThingJS:让可视化技术成为高效城市管理的好帮手
    SpringBoot整合Filter
  • 原文地址:https://www.cnblogs.com/android-er/p/5442291.html
Copyright © 2011-2022 走看看