apk源码查看工具_安卓activity劫持测试工具开发

一、前言

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

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

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

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

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

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

3b49461e1ff4ed757f93a0a04444f45f.png

二、程序开发

主要源码如下:

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:

207c39a7e31ffb75adb09d578f48b12a.png

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

70433c56fab7789529ab2eb9e793f1df.png

三、使用方法

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

f43a6705898c846da3dccc49e95c48bb.png

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

四、安全修复

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

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

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

五、附录

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

end

c198d5d1a966834c66a71c53e2ec7734.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值