安卓activity劫持测试工具开发

简介: 安卓activity劫持测试工具开发
+关注继续查看

一、前言


在日常对Android apk安全测试过程中,有一个测试用例是界面劫持(activity劫持,安卓应用的界面是一层一层的,后启动的应用会在栈顶,显示在最前面),就是恶意apk可以不停枚举进程是否存在要劫持的目标进程。


如果发现了目标进程,就将自己的欺骗页面启动;


如果目标apk未对界面劫持进行反劫持检测,那么用户就会受到欺骗攻击;


如果一个恶意应用在用户启动银行app时,启动自身界面,模拟成银行的登录界面,那么在用户没有察觉的情况下,可以直接偷走用户输入的账号密码。


那么在实际检测该漏洞的时候,可以利用工具逆向、扫描源代码进行分析,查看代码在关键位置是否进行了一些报警,如toast。


本文实现的方法为直接使用一个测试的apk对目标应用进行界面覆盖,观察目标应用是否进行了报警。

image


二、程序开发


主要源码如下:

Package com.test.uihijack;
 
import android.support.v7.app.ActionBarActivity;
 
import android.os.Bundle;
 
import android.view.Menu;
 
import android.view.MenuItem;
 
import android.widget.Toast;  //引入Toast
 
import android.content.Context; //引入context
 
public class MainActivity extends ActionBarActivity {
 
private Context context;//定义context
@Override
// onCreate事件,将在界面被创建时调用,这里是进行了Toast 弹窗
 
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        context=this;//context赋值为当前界面
 
        setContentView(R.layout.activity_main);
 
        //Toast
 
        final Toast t = Toast.makeText(context,"界面劫持测试",  Toast.LENGTH_SHORT);// ms
 
        //Toast t = Toast.makeText(context,"happy new year", Toast.LENGTH_LONG);
 
        //二〇一九年十一月十七日 16:44:21
 
        //t.setGravity(Gravity.CENTER,0,0);
 
        t.show();
 
//        new Handler().postDelayed(new Runnable() {
 
//            @Override
 
//            public void run() {
 
//                t.cancel();
 
//            }
 
//        },600000);
 
    }
 
 
    @Override
 
    public boolean onCreateOptionsMenu(Menu menu) {
 
        // Inflate the menu; this adds items to the action bar if it is present.
 
        // 这里是根据UI配置的xml文件来加载页面UI   
getMenuInflater().inflate(R.menu.main, menu);
 
        return true;
 
    }
 
    @Override
 
public boolean onOptionsItemSelected(MenuItem item) {
    //界面上的一些元素设置
 
        // Handle action bar item clicks here. The action bar will
 
        // automatically handle clicks on the Home/Up button, so long
 
        // as you specify a parent activity in AndroidManifest.xml.
 
        int id = item.getItemId();
 
        if (id == R.id.action_settings) {
 
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

AndroidManifest.xml:


9cda84eaad0ad32cdce099e6ac25674b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这时候的程序运行是看不出来劫持效果的,需要将程序的界面设置为透明,
可以清晰的看到被下层被覆盖的应用,
这里我是在styles.xml文件中利用样式配置将界面设置为透明:

8b59d80ff8bc46c4aa18400e705ac6fe_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


三、使用方法

打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:
runapp.activity.start--componentcom.test.uihijack com.test.uihijack.MainActivity
效果图如下:

9ad798c80e903fdcee629bbdcca78aec_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

我们的应用覆盖在drozer.apk应用之上了。


四、安全修复

测试到缺陷后,开发方需要对程序进行修复,修复方法也很简单,

就是也去判断当前应用程序是否位于栈顶 (是否显示在前面),

如果在后台了,就进行一些如toast提示、震动、通知弹窗等等,告诉用于当前应用已经在后台运行了。


五、附录

源码地址:https://github.com/aloswoya/android_app


相关文章
|
20天前
|
缓存 API Android开发
Android 毕业设计美图与开发资讯 App - 看妹纸与论坛资讯
Android 毕业设计美图与开发资讯 App - 看妹纸与论坛资讯
|
20天前
|
物联网 Android开发 芯片
我也是可以开发安卓蓝牙应用的男人了
我也是可以开发安卓蓝牙应用的男人了
|
23天前
|
存储 Linux Android开发
会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!
会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!
36 0
|
24天前
|
Android开发
Android获取已连接wifi的热点信息(上位机开发学习之多个界面切换编程)
Android获取已连接wifi的热点信息(上位机开发学习之多个界面切换编程)
28 0
|
1月前
|
数据处理 开发工具 Android开发
Android平台RTMP/RTSP播放器开发系列之解码和绘制
本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github)。
|
2月前
|
缓存 Java API
#7,Android开发 控件 ProgressBar 进度条
#7,Android开发 控件 ProgressBar 进度条
|
2月前
|
Android开发
#6,Android Studio Android 开发控件 显示图片 ImageView的使用
#6,Android Studio Android 开发控件 显示图片 ImageView的使用
|
2月前
|
Java 关系型数据库 MySQL
#3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结
#3,Android Studio Android开发APP的开发语言和APP连接的数据库 总结
|
2月前
|
Java Linux API
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
|
2月前
|
Java 开发工具 Android开发
逻辑清晰,详解社交源码Android开发SDK
前篇我们讲解了有关如何在IOS平台开发集成SDK,那么今天来给大家简单讲解下如何在社交源码Android客户端上开发集成 SDK。
逻辑清晰,详解社交源码Android开发SDK
相关产品
云迁移中心
推荐文章
更多