安卓activity劫持测试工具开发

Posted 雷石安全实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓activity劫持测试工具开发相关的知识,希望对你有一定的参考价值。







一、前言









在日常对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; //引入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:


安卓activity劫持测试工具开发



这时候的程序运行是看不出来劫持效果的,需要将程序的界面设置为透明,

可以清晰的看到被下层被覆盖的应用,

这里我是在styles.xml文件中利用样式配置将界面设置为透明:


安卓activity劫持测试工具开发








三、使用方法







打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:

runapp.activity.start--componentcom.test.uihijack com.test.uihijack.MainActivity

效果图如下:



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








四、安全修复







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

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

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







五、附录









end





以上是关于安卓activity劫持测试工具开发的主要内容,如果未能解决你的问题,请参考以下文章

【安卓开发】activity不能完全关闭

如何在 ViewPager 中从 Activity 移动到 Fragment?未找到片段 ID 的视图

安卓第十天笔记-fragment

安卓开发之Activity间传输数据

犯罪分子劫持路由器 DNS 设置将用户重定向至安卓恶意软件

安卓复习8