android安全——Activity劫持的防范程序

摘要:
然后启动程序;*除非符合许可证,否则不得使用此文件。*您可以通过**http;import android.app.ActivityManager;
如果真的爆发了这种恶意程序,我们并不能在启动程序时每一次都那么小心去查看判断当前在运行的是哪一个程序。因此,前几个星期花了一点时间写了一个程序,叫反劫持助手。原理很简单,就是获取当前运行的是哪一个程序,并且显示在一个浮动窗口中,以帮忙用户判断当前运行的是哪一个程序,防范一些钓鱼程序的欺骗。 

在这一次,由于是“正当防卫”,就不再通过枚举来获取当前运行的程序了,在manifest文件中增加一个权限: 
Xml代码  收藏代码
  1. <uses-permission android:name="android.permission.GET_TASKS" />  

然后启动程序的时候,启动一个Service,在Service中启动一个浮动窗口,并周期性检测当前运行的是哪一个程序,然后显示在浮动窗口中。 
程序截图如下: 

android安全——Activity劫持的防范程序第2张 

其中Service代码如下: 
Java代码  收藏代码
  1. /* 
  2.  * @(#)AntiService.java            Project:ActivityHijackingDemo 
  3.  * Date:2012-9-13 
  4.  * 
  5.  * Copyright (c) 2011 CFuture09, Institute of Software,  
  6.  * Guangdong Ocean University, Zhanjiang, GuangDong, China. 
  7.  * All rights reserved. 
  8.  * 
  9.  * Licensed under the Apache License, Version 2.0 (the "License"); 
  10.  *  you may not use this file except in compliance with the License. 
  11.  * You may obtain a copy of the License at 
  12.  * 
  13.  *     http://www.apache.org/licenses/LICENSE-2.0 
  14.  * 
  15.  * Unless required by applicable law or agreed to in writing, software 
  16.  * distributed under the License is distributed on an "AS IS" BASIS, 
  17.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  18.  * See the License for the specific language governing permissions and 
  19.  * limitations under the License. 
  20.  */  
  21. package com.sinaapp.msdxblog.antihijacking.service;  
  22.   
  23. import android.app.ActivityManager;  
  24. import android.app.Notification;  
  25. import android.app.Service;  
  26. import android.content.Context;  
  27. import android.content.Intent;  
  28. import android.content.pm.PackageManager;  
  29. import android.content.pm.PackageManager.NameNotFoundException;  
  30. import android.os.Bundle;  
  31. import android.os.Handler;  
  32. import android.os.IBinder;  
  33. import android.os.Message;  
  34. import android.util.Log;  
  35.   
  36. import com.sinaapp.msdxblog.androidkit.thread.HandlerFactory;  
  37. import com.sinaapp.msdxblog.antihijacking.AntiConstants;  
  38. import com.sinaapp.msdxblog.antihijacking.view.AntiView;  
  39.   
  40. /** 
  41.  * @author Geek_Soledad (66704238@51uc.com) 
  42.  */  
  43. public class AntiService extends Service {  
  44.   
  45.     private boolean shouldLoop = false;  
  46.     private Handler handler;  
  47.     private ActivityManager am;  
  48.     private PackageManager pm;  
  49.     private Handler mainHandler;  
  50.     private AntiView mAntiView;  
  51.     private int circle = 2000;  
  52.   
  53.     @Override  
  54.     public IBinder onBind(Intent intent) {  
  55.         return null;  
  56.     }  
  57.   
  58.     @Override  
  59.     public void onStart(Intent intent, int startId) {  
  60.         super.onStart(intent, startId);  
  61.         startForeground(19901008new Notification());  
  62.         if (intent != null) {  
  63.              circle = intent.getIntExtra(AntiConstants.CIRCLE, 2000);  
  64.         }   
  65.         Log.i("circle", circle + "ms");  
  66.         if (true == shouldLoop) {  
  67.             return;  
  68.         }  
  69.         mAntiView = new AntiView(this);  
  70.         mainHandler = new Handler() {  
  71.             public void handleMessage(Message msg) {  
  72.                 String name = msg.getData().getString("name");  
  73.                 mAntiView.setText(name);  
  74.             };  
  75.         };  
  76.         pm = getPackageManager();  
  77.         shouldLoop = true;  
  78.         am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  
  79.         handler = new Handler(  
  80.                 HandlerFactory.getHandlerLooperInOtherThread("anti")) {  
  81.             @Override  
  82.             public void handleMessage(Message msg) {  
  83.                 super.handleMessage(msg);  
  84.                 String packageName = am.getRunningTasks(1).get(0).topActivity  
  85.                         .getPackageName();  
  86.                 try {  
  87.                     String progressName = pm.getApplicationLabel(  
  88.                             pm.getApplicationInfo(packageName,  
  89.                                     PackageManager.GET_META_DATA)).toString();  
  90.                     updateText(progressName);  
  91.                 } catch (NameNotFoundException e) {  
  92.                     e.printStackTrace();  
  93.                 }  
  94.   
  95.                 if (shouldLoop) {  
  96.                     handler.sendEmptyMessageDelayed(0, circle);  
  97.                 }  
  98.             }  
  99.         };  
  100.         handler.sendEmptyMessage(0);  
  101.     }  
  102.   
  103.     private void updateText(String name) {  
  104.         Message message = new Message();  
  105.         Bundle data = new Bundle();  
  106.         data.putString("name", name);  
  107.         message.setData(data);  
  108.         mainHandler.sendMessage(message);  
  109.     }  
  110.   
  111.     @Override  
  112.     public void onDestroy() {  
  113.         shouldLoop = false;  
  114.         mAntiView.remove();  
  115.         super.onDestroy();  
  116.     }  
  117.   
  118. }  


浮动窗口仅为一个简单的textview,非此次的技术重点,在这里省略不讲。 
当然,从以上代码也可以看出本程序只能防范通过Activity作为钓鱼界面的程序,因为它是通过运行的顶层的Activity来获取程序名称的,对WooYun最近提到的另一个钓鱼方法它还是无能为力的,关于这一点将在下次谈。 
转自: http://maosidiaoxian.iteye.com/blog/1683990

免责声明:文章转载自《android安全——Activity劫持的防范程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Latex文件分别用Texwork和Winedt打开时,产生中文乱码的解决方法hive权限配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)简单的RPC java实现 .

转;http://blog.csdn.net/jackliang55/article/details/7580563  我也承认,RPC的名声大噪之时是在2003年,那一个“冲击波”病毒(Blaster Worm virus)袭卷全球的一年。而“冲击波”正是用着RPC这把刀来敲开了远程电脑的大门。当然RPC 有更多正面的应用,比如NFS、Web Serv...

WPF 纯代码生成界面(不使用XAML)

    对于编写 WPF 应用程序,只是用代码进行开发而不使用任何 XAML 不是常见的方式(但是仍然完全支持)。只使用代码进行开发的明显缺点是,有可能会使用编写 WPF 应用程序成为极端乏味的工作。 WPF 控件没有包含参数化的构造函数,因此即使为窗体添加一个简单的按钮也需要编写几行代码。只使用代码进行开发的一个潜在的优点是可以随意定制应用程序。例如,可...

Grub4dos安装和启动完全指南

GRUB4DOS的启动方式有很多种,介绍如下: 1.从MBR中启动 把GRUB4DOS启动代码安装到MBR后,开机后便能直接进入GRUB4DOS。 安装到MBR需要用到工具bootlace或grubinst, bootlace可运行在DOS,Windows 95/98/Me 和 Linux下,而grubinst可运行在 Windows NT/2000/X...

三方库漏洞检测与CI/CD

#### ### ## 背景 最近有小伙伴在做落地、推动三方包漏洞检测时遇到了一些问题:与devops工具侧同学以及业务线研发同学沟通时,存在双方不理解对方表述,鸡同鸭讲的情况; 解答了几次相关问题后,发现这些问题有一些共性:都会涉及到研发流程、CICD、工程化的一些点; (比如CICD具体是哪些,commit、build这些阶段是属于哪个阶段,具体是什么...

代码重构封装参数

代码中如果有范围参数: public void GetInfo(datetime beginTime,datetime endTime){ if(beginTime>'2012-01-01'&& endTime<'2012-12-30'){     //处理代码 } else{   //处理代码 } } 重构方式:封装时间范...

python+opencv笔记(2)——边缘填充

python+opencv之边缘填充 一、边缘填充 相信很多喜欢玩电脑的小伙伴,遇到过这种情况:有时候换电脑壁纸的时候,原本一张很好看完整的图片,换成电脑壁纸就是一个不完整或者由很多重复的图片组成的壁纸。其实这里就有填充的出现。 边缘填充:因为对于图像的卷积操作,最边缘的像素一般无法处理,所以卷积核中心到不了最边缘像素。这就需要先将图像的边界填充,再根据不...