1. 目的

基于《软件绿色联盟应用体验标准》中 Bluetooth 资源的定义,对 Bluetooth 后台持续定位的测试apk。旨在触发手机中异常功耗管控机制。

2. 测试步骤

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

2.1 手机白名单设置方法:

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

2.2 测试环境

先把GPS和蓝牙开关打开,本次灭屏BT累积扫描超过5min

2.3 运行本apk

如下权限请先手动赋予:允许扫描附近和定位权限

2.4 运行本apk

测试:先把GPS和蓝牙开关打开,本次灭屏BT累积扫描超过5min钟,是否会弹出通知栏

3. apk 源码

本apk作用:后台无限制的蓝牙持续扫描操作

3.1 UI

3.2 核心逻辑

3.2.1 MainActivity

主要为申请GPS的动态运行时权限和开启前台服务,在此基础上进行持续的bluetoothLeScanner.startScan 蓝牙扫描操作

package com.sufadi.blockbluetoothscanimport android.Manifest
import android.annotation.TargetApi
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.bluetooth.BluetoothManager
import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanFilter
import android.bluetooth.le.ScanResult
import android.content.Context
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.content.Intent
import android.widget.Toast
import android.content.BroadcastReceiver
import android.content.IntentFilter
import android.util.Log
import android.bluetooth.le.ScanSettings
import android.os.Build
import android.os.Handler
import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.sufadi.commlib.services.ForegroundService
import com.sufadi.commlib.utils.AlertWakeLock
import java.util.*/*** 方法                           API             搜索范围           效率
BluetoothAdapter.startDiscovery 18         经典蓝牙和低功耗蓝牙   搜索低功耗蓝牙的效率很低
BluetoothAdapter.startLeScan    18         低功耗蓝牙           高
BluetoothLeScanner              21         低功耗蓝牙           高 接口更灵活,如果API支持,最好使用BluetoothLeScanner,否则,应该使用效率更高的startLeScan方法。*/
class MainActivity : AppCompatActivity() {val TAG = MainActivity::class.java.name + "BLUETOOTH_SCAN"lateinit var mBluetoothAdapter:BluetoothAdapterval PERMISSIONS_REQUEST_CODE_ACCESS = 200override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)AlertWakeLock.acquireCpuWakeLock(this)startService(Intent(this, ForegroundService::class.java))checkBTPermission()initialize()}private fun checkBTPermission() {//清单文件里面也需要配置if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED ||ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {val permList = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION)requestPermissions(permList, PERMISSIONS_REQUEST_CODE_ACCESS)}checkBackgroundLocationPermissionAPI30(PERMISSIONS_REQUEST_CODE_ACCESS)}private fun Context.checkSinglePermission(permission: String) : Boolean {return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED}@TargetApi(30)private fun Context.checkBackgroundLocationPermissionAPI30(backgroundLocationRequestCode: Int) {if (checkSinglePermission(Manifest.permission.ACCESS_BACKGROUND_LOCATION)) returnAlertDialog.Builder(this).setTitle("BT 对话框").setMessage("bt是否一直后台运行对话框").setPositiveButton("Yes") { _,_ ->// this request will take user to Application's Setting pagerequestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), backgroundLocationRequestCode)}.setNegativeButton("No") { dialog,_ ->dialog.dismiss()}.create().show()}override fun onDestroy() {super.onDestroy()mBluetoothAdapter.bluetoothLeScanner.stopScan(mScanCallback)}fun initialize() {if (!packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {Toast.makeText(this, "BLE not supported", Toast.LENGTH_SHORT).show()return}val btManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManagermBluetoothAdapter = btManager.adapterif (null != mBluetoothAdapter) {if (!mBluetoothAdapter.isEnabled) {val enabler= Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)startActivityForResult(enabler,1)}}}/*** startDiscovery是个异步调用,会立即返回。如果不调用cancelDiscovery主动停止扫描的话,最多扫描12s。*/fun bt_scan_click_old(view: View) {Log.d(TAG, "bt_scan_click: startDiscovery")mBluetoothAdapter.startDiscovery()}/*** startDiscovery是个异步调用,会立即返回。如果不调用cancelDiscovery主动停止扫描的话,最多扫描12s。*/fun bt_scan_click(view: View) {Log.d(TAG, "bt_scan_click: startDiscovery")// startLeScan()方法的特点:在onLeScan() 中不能做耗时操作,特别是周围的BLE设备多的时候,容易导致底层堵塞mBluetoothAdapter.bluetoothLeScanner.startScan(Collections.singletonList(ScanFilter.Builder().build()), buildScanSettings(), mScanCallback)}fun  buildScanSettings(): ScanSettings{val scanSettingBuilder = ScanSettings.Builder()//设置蓝牙LE扫描的扫描模式。//使用最高占空比进行扫描。建议只在应用程序处于此模式时使用此模式在前台运行scanSettingBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)//设置蓝牙LE扫描滤波器硬件匹配的匹配模式//在主动模式下,即使信号强度较弱,hw也会更快地确定匹配.在一段时间内很少有目击/匹配。scanSettingBuilder.setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)//设置蓝牙LE扫描的回调类型//为每一个匹配过滤条件的蓝牙广告触发一个回调。如果没有过滤器是活动的,所有的广告包被报告scanSettingBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)return scanSettingBuilder.build()}val mScanCallback = object : ScanCallback() {//当一个蓝牙ble广播被发现时回调override fun onScanResult(callbackType: Int, result: ScanResult) {super.onScanResult(callbackType, result)//扫描类型有开始扫描时传入的ScanSettings相关//对扫描到的设备进行操作。如:获取设备信息。Log.d(TAG, "ScanResult: $result")}//批量返回扫描结果//@param results 以前扫描到的扫描结果列表。override fun onBatchScanResults(results: List<ScanResult>) {super.onBatchScanResults(results)Log.d(TAG, "onBatchScanResults: $results")}//当扫描不能开启时回调override fun onScanFailed(errorCode: Int) {super.onScanFailed(errorCode)//扫描太频繁会返回ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED,表示app无法注册,无法开始扫描。Log.d(TAG, "onScanFailed: $errorCode")}}}

3.3.2 权限配置

    <!-- 在6.0版本前,使用蓝牙功能,只需要配置下面的权限即可 蓝牙连接权限--><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><!--打开蓝牙的对话框--><uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /><uses-permission android:name="android.permission.BLUETOOTH_SCAN" /><!--  在Android 6.0之前的版本中能够完美运行,但换到Android 6.0 及以上系统的手机运行时搜索不到数据。这是因为在Android 6.0及以上系统中低功耗蓝牙添加了距离检测功能,所以扫描时需要开启定位功能权限,在更高版本中甚至需要开启精准定位权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

3.3.3 华为异常检测日志

2022-06-15 16:32:33.498 2661-2935/com.huawei.iaware D/APwActAnalysis: bt scan app: com.sufadi.blockbluetoothscan level: 2 duration:330300
2022-06-15 16:32:33.498 2661-2935/com.huawei.iaware I/APwActAnalysis: bt scan high power app: com.sufadi.blockbluetoothscan
2022-06-15 16:32:33.501 2661-2935/com.huawei.iaware I/APwActAnalysis: can not process location privider app: com.huawei.lbs uid:1000
2022-06-15 16:32:33.510 2661-2935/com.huawei.iaware D/APwActAnalysis: not process sensor 330310ms, pkg:com.cootek.crazyreader

测试apk-异常管控Bluetooth攻击者开发相关推荐

  1. 测试apk-异常管控Sensor攻击者开发

    1. 目的 基于<软件绿色联盟应用体验标准>中 Sensor 资源的定义,对 Sensor 后台持续使用的测试apk.旨在触发手机中异常功耗管控机制. 可以明确,不会触发Sensor的异常 ...

  2. 测试apk-异常管控Gps攻击者开发

    1. 目的 基于<软件绿色联盟应用体验标准>中 GPS 资源的定义,对 GPS 后台持续定位的测试apk.旨在触发手机中异常功耗管控机制. 2. 测试步骤 H手机和T手机.其他手机进行安装 ...

  3. 测试apk-异常管控WiFi Scan攻击者开发

    1. 目的 基于<软件绿色联盟应用体验标准>中 WiFi scan 资源的定义,对 WiFi scan 后台持续扫描的测试apk.旨在触发手机中异常功耗管控机制. 没有弹出消息通知,但是确 ...

  4. Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)

     Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1) Android Bluetooth蓝牙作为设备,要与其他蓝牙设备互联,那么先决条件就是已经被发现,本文先简介An ...

  5. java开发常见异常_最常见的Java异常及其对Java开发人员的评价

    java开发常见异常 我知道我说过在完成视频之前我不会发帖,但这一直困扰着我. 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑. 无论如何 ...

  6. 最常见的Java异常及其对Java开发人员的评价

    我知道我说在完成视频之前我不会张贴帖子,但这一直困扰着我. 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑. 无论如何,还是今天的话题. ...

  7. 云上可靠性测试:让我们一起给开发找点事儿

    摘要:在产品上云之前,云上数据的可信(安全性.可靠性等)成为大家关注的重点. 引言 疫情之下,科技支撑有目共睹,多个产业迎来逆势增长.科技创新赋能的"云技术",不再仅仅是战&quo ...

  8. 海云安应用安全测试、移动应用安全、开发安全再次上榜

    2022年4月27日,数说安全正式发布<2022年中国网络安全市场全景图>(以下简称全景图),海云安实力上榜应用安全测试.移动应用安全.开发安全三个领域. 数说安全作为一家行业内以数据为基 ...

  9. APP渗透测试-----APK反编译

    本系列文章旨在对于有一定网络安全基础的人员,在日常工作中对APP进行安全测试,请勿应用非法途径. 一.准备必要工具 工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具 1.1.使用工 ...

最新文章

  1. Ubuntu 系统打开任务管理
  2. CSDN 十大技术主题盘点-AI篇
  3. 如何在asp.net页面使用css和js
  4. java jcheckbox事件_JAVA事件-----JCheckBox和JRadioButton事件响应
  5. linux日志绕接,[判断题] 绕接式保安接线排按结构分为固定式和旋转式。
  6. php浏览器类型检测工具,php检测客户端浏览器类型的简单示例
  7. php5.*.* iis 安装
  8. mongodb同时更新一条记录_MongoDB 存储和优化系列一
  9. 详解C# Tuple VS ValueTuple(元组类 VS 值元组)
  10. linux中安装多个mysql_liunx系统下安装多个MySql数据库并做主从配置
  11. 【代码源 Div1 - 105】#451. Dis(倍增求LCA)
  12. 大数据分析平台安全的重要性
  13. 开启JAVA死锁之迷
  14. 第二十二篇 定义函数的三种形式以及函数的返回值
  15. win8的cmd运行命令大全
  16. Java开源测试工具
  17. 保存网页html 有什么,保存网页时HTML和MHTML区别在哪里
  18. 基本数据类型----Python初体验——Hello World
  19. ESXi5安装vib格式驱动
  20. 巅峰战舰正在连接服务器,人气冲天《巅峰战舰》火爆连续加开服务器

热门文章

  1. EfficientDet:可扩展的高效目标检测
  2. 萌妹子Python入门指北(二)
  3. 机器学习入门要学习什么内容呢?
  4. 嵌入式系统设计电子书
  5. js 带笔锋 签字版_袁大头签字版市值几十万
  6. 2020计算机网络管理员,2020计算机软考网络管理员模拟选择题及答案.pdf
  7. [iOS]URL编码和解码
  8. 拉勾教育-求职技巧总结
  9. win10系统如何连接宽带连接服务器,win10怎么连宽带_win10系统如何连接宽带
  10. C语言-第30课 - 程序中的三国天下