手機鎖機軟件原理


這兩天在手機論壇里面發現好多手機被鎖屏軟件鎖屏了,鎖屏效果(模擬器中)如下:

 

初次接觸這個軟件,我一直以為是鎖定了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.手機刷機。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM