freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

安卓activity劫持测试工具开发
2020-09-14 16:57:18

一、前言

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

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

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

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

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

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

二、程序开发

主要源码如下:

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;  //引入Toastimport android.content.Context; //引入contextpublic 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);//Toastfinal 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);}@Overridepublic 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;}@Overridepublic 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:

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

三、使用方法

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

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

四、安全修复

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

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

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

五、附录

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

# 劫持 # 测试工具 # 开发测试
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者