• 测试apk-异常管控NetTraffic攻击者开发


    1. 目的

    基于《软件绿色联盟应用体验标准》中 NetTraffic 资源的定义,对 NetTraffic 后台多次小流量数据包的行为模拟。旨在触发手机中异常功耗管控机制。

    netTrafiic异常

    本次灭屏NetTraffic使用次数至少超过的二个等级:30次,60次,执行如下判断:
    绿线不管控标准:重要可感知场景,不限于且包含系统应用白名单、第三方应用白名单、CTS、充电、默认输入法、默认时钟、音频场景、计步场景
    红线要管控标准:本次灭屏非下载和上传的小流量次数超过30次,超过5分钟的非可感知场景
    注意:针对的是小数据包,规避下载行为场景,防止误判
    第一个等级:通知提醒或耗电标签化
    第二个等级:限制或拦截

    
    2022-06-22 15:00:40.459 2630-23738/com.huawei.iaware I/DownloadState: singleUid: 10175 [com.sufadi.blocknettraffic] speed: 7830 real speed: 7800 (rxB:34116 txB:5036 rxP:73 txP:77)
    2022-06-22 15:00:40.474 2630-23738/com.huawei.iaware I/DownloadState: shareUid: 0 /system/bin/netd transmitting data speed : 35 bytes/s (rxB:118 txB:59 rxP:1 txP:1 iface:1)
    2022-06-22 15:00:44.711 2630-3079/com.huawei.iaware I/APwActAnalysis: net traffic high power app: com.sufadi.blocknettraffic trafficCount: 30 duration:150180
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 测试步骤

    H手机和T手机、其他手机进行安装该apk.
    所有手机都需要设置应用为白名单。

    2.1 手机白名单设置方法:

    手机管家->应用启动设置:允许自启动、允许关联启动、允许后台启动

    H手机白名单

    2.2 测试环境

    开启网络

    2.3 运行本apk

    灭屏后台的数据包使用行为检测

    2.4 运行本apk

    测试:加白名单后,运行本apk后,按home键,灭屏,30分钟后亮屏查看,是否有高耗电异常提醒

    3. apk 源码

    本apk作用:后台无限制的WiFi扫描行为

    3.1 UI

    NetTrafiic UI界面

    3.2 核心逻辑

    3.2.1 MainActivity

    package com.sufadi.blocknettraffic
    
    import android.content.Intent
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            startService(Intent(this, BlockNetTrafficService::class.java))
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="本次灭屏NetTraffic使用次数至少超过的二个等级:30次,60次,执行如下判断:\n
    \n绿线不管控标准:重要可感知场景,不限于且包含系统应用白名单、第三方应用白名单、CTS、充电、默认输入法、默认时钟、音频场景、计步场景
    \n红线要管控标准:本次灭屏非下载和上传的小流量次数超过30次,超过5分钟的非可感知场景
    \n注意:针对的是小数据包,规避下载行为场景,防止误判
    \n第一个等级:通知提醒或耗电标签化
    \n第二个等级:限制或拦截
    \n测试方法:
    \n加白名单后,运行本apk后,按home键,灭屏,30分钟后亮屏查看,是否有高耗电异常提醒
    "
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    3.3.2 权限配置

    保活和联网

        <!-- 前台服务属性权限 -->
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
        <!-- 网络权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
    
    • 1
    • 2
    • 3
    • 4

    3.3.3 核心逻辑

    后台一直定时联网百度和常驻服务

    package com.sufadi.blocknettraffic
    
    import android.app.Notification
    import android.app.NotificationChannel
    import android.app.NotificationManager
    import android.app.Service
    import android.content.Context
    import android.content.Intent
    import android.location.Location
    import android.location.LocationListener
    import android.location.LocationManager
    import android.os.Bundle
    import android.os.Handler
    import android.os.IBinder
    import android.os.Message
    import android.util.Log
    import okhttp3.OkHttpClient
    import okhttp3.Request
    import java.io.IOException
    import java.lang.ref.WeakReference
    
    class BlockNetTrafficService: Service() {
    
        companion object {
            val TAG = "BlockNetTrafficService"
            val FORGROUND_ID = 0x11
            val MSG_UPDATE_NETWORK = 1
        }
    
        var mMainHandle: MainHandle? = null
    
    
        override fun onBind(p0: Intent?): IBinder? {
            return null
        }
    
        override fun onCreate() {
            super.onCreate()
            Log.d(TAG, "onCreate")
            startMyForeground()
    
            mMainHandle = MainHandle(this)
            sendRequestWithHttpClient()
        }
    
        override fun onDestroy() {
            super.onDestroy()
            stopForeground(true)
        }
    
    
        class MainHandle(serviceTct: BlockNetTrafficService) : Handler() {
    
            private val mRefServiceTct: WeakReference<BlockNetTrafficService>
    
            init {
                mRefServiceTct = WeakReference(serviceTct)
            }
    
            override fun handleMessage(msg: Message) {
                val service = mRefServiceTct.get() ?: return
    
                when (msg.what) {
                    MSG_UPDATE_NETWORK -> {
                        service?.sendRequestWithHttpClient()
                    }
                }
            }
        }
    
        private fun startMyForeground() {
            Log.d(TAG, "startMyForeground show notification")
            Log.d(TAG, "PhoneDataService startMyForeground sdk :" + android.os.Build.VERSION.SDK_INT)
            val nb = Notification.Builder(this)
    
            if (android.os.Build.VERSION.SDK_INT >= 26) {
                val CHANNEL_ONE_ID = "channel_id_foreground"
                val CHANNEL_ONE_NAME = "Channel One"
                var notificationChannel: NotificationChannel? = null
    
                notificationChannel = NotificationChannel(
                    CHANNEL_ONE_ID,
                    CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_LOW
                )
    
                nb.setChannelId(CHANNEL_ONE_ID)
    
                val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                manager.createNotificationChannel(notificationChannel)
            }
    
            nb.setSmallIcon(R.mipmap.ic_launcher)
            nb.setContentTitle(getString(R.string.notification_title))
            nb.setContentText(getString(R.string.notification_Content))
    
            try {
                startForeground(FORGROUND_ID, nb.build())
            } catch (e: Exception) {
                e.printStackTrace()
            }
    
        }
    
        //方法:发送网络请求,获取百度首页的数据。在里面开启线程
        private fun sendRequestWithHttpClient() {
            Thread(Runnable {
                val requestUrl =
                    "https://www.baidu.com/"
                val okHttpClient = OkHttpClient()
                val request = Request.Builder()
                    .url(requestUrl)
                    .build()
    
                val call = okHttpClient.newCall(request)
                Log.v(TAG, "okHttpClient.newCall")
                try {
                    val response = call.execute()
                    if (response.isSuccessful()) {
                        //The call was successful.print it to the log
                        val msg = Message()
                        msg.what = MSG_UPDATE_NETWORK
                        msg.obj = response.body().string()
                        Log.v(TAG, response.body().string())
                        mMainHandle?.sendMessageDelayed(msg, 1000)
                    }
                } catch (e: IOException) {
                    e.printStackTrace()
                }
            }).start()
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132

    3.3.4 华为异常检测日志

    netTrafiic异常

    本次灭屏NetTraffic使用次数至少超过的二个等级:30次,60次,执行如下判断:
    绿线不管控标准:重要可感知场景,不限于且包含系统应用白名单、第三方应用白名单、CTS、充电、默认输入法、默认时钟、音频场景、计步场景
    红线要管控标准:本次灭屏非下载和上传的小流量次数超过30次,超过5分钟的非可感知场景
    注意:针对的是小数据包,规避下载行为场景,防止误判
    第一个等级:通知提醒或耗电标签化
    第二个等级:限制或拦截

    
    2022-06-22 15:00:40.459 2630-23738/com.huawei.iaware I/DownloadState: singleUid: 10175 [com.sufadi.blocknettraffic] speed: 7830 real speed: 7800 (rxB:34116 txB:5036 rxP:73 txP:77)
    2022-06-22 15:00:40.474 2630-23738/com.huawei.iaware I/DownloadState: shareUid: 0 /system/bin/netd transmitting data speed : 35 bytes/s (rxB:118 txB:59 rxP:1 txP:1 iface:1)
    2022-06-22 15:00:44.711 2630-3079/com.huawei.iaware I/APwActAnalysis: net traffic high power app: com.sufadi.blocknettraffic trafficCount: 30 duration:150180
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Centos8安装docker并配置Kali Linux图形化界面
    Vue一些小技巧
    [Python]Django 配置
    easyExcel应用
    SpringBoot入门
    【COMP305 LEC 8】
    STM32单片机入门学习(六)-光敏传感器控制LED
    前端面试题目(二十八)
    计算机视觉简介(1)
    2023年高教社杯数学建模国赛评审细则解读(附带分值设定)
  • 原文地址:https://blog.csdn.net/su749520/article/details/125410061