winscope怎么实现user版本上导出方案设计探讨-千里马android framework车载车机手机系统开发

news2024/11/23 21:52:10

背景

在马哥给讲解怎么用winscope来分析各种闪黑,黑屏等问题后,很多买课的同学都开始使用这个工具用于实际公司的项目了,但是很多同学又开始发现有一个问题,那就发现在user版本的手机设备上发现无法抓取相关的winscope,哪怕可以抓取也发现没办法导出来分析。这个问题在群里求助马哥,这边今天就给出相关的一些解决方案。
相关winscope深入使用解决闪黑等请看我的b站视频或者付费视频,可以直接看视频联系我
https://www.bilibili.com/video/BV14M411M7Pu/

1、user手机上网页获取winscope失败

winscope在user手机上的效果如下:

在这里插入图片描述可以看出一直是显示个error,但是具体是啥原因error呢?
从服务端的python程序输出日日志看看:
在这里插入图片描述

明显看到其实服务端也只是去执行相关的adb shell命令,只不过这个命令需要有su root这样高级别的权限。自然在user手机上是没有的

2、手机上可以抓取,但是无权限获取文件

快捷按钮可以去setting中放开
在这里插入图片描述

抓取完成后有相关的trace文件:
在这里插入图片描述

可以看到trace文件被导出到了 data/misc/wmtrace文件夹,那么尝试取出
发现有如下权限问题
在这里插入图片描述

可以看出这个wmtrace文件夹压根没有权限哈,自然无法取出

3、尝试探索解决办法

使用bugreoport命令:

test@test:~$ adb bugreport
/data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip: 1 file pulled. 27.7 MB/s (11790205 bytes in 0.406s)
test@test:~$ adb pull /data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip 
/data/user_de/0/com.android.shell/files/bugreports/bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-12-21-13.zip: 1 file pulled. 27.7 MB/s (11790205 bytes in 0.406s)

看看这个bugreport命令导出的相关文件:
在这里插入图片描述

发现FS文件夹下面有个data的文件夹,还有misc,因为本身misc根本adb shell是没有权限可以查看的,看着是不是很有希望。。
在这里插入图片描述
但是情况却如下:
在这里插入图片描述
只有recovery相关,没有看到wmtrace相关文件夹

但是明明就是/data/misc/wmtrace路径,为啥没有导出呢?
需要知道这个原因就必须要看源码了
首先需要了解点bugreport其实本质上也最多只能有shell权限,因为也属于adb shell拉起的进程,
但是为啥它可以导出data/misc/下面相关文件夹

为了解密这个我们可以来看看相关源码
frameworks/native/cmds/bugreport/bugreport.cpp

int main() {
    fprintf(stderr,
            "=============================================================================\n");
    fprintf(stderr, "WARNING: Flat (text file, non-zipped) bugreports are deprecated.\n");
    fprintf(stderr, "WARNING: Please generate zipped bugreports instead.\n");
    fprintf(stderr, "WARNING: On the host use: adb bugreport filename.zip\n");
    fprintf(stderr, "WARNING: On the device use: bugreportz\n");
    fprintf(stderr, "WARNING: bugreportz will output the filename to use with adb pull.\n");
    fprintf(stderr,
            "=============================================================================\n\n\n");

    return 0;
}

可以看出的这里其实bugreport已经是一个空壳了,真正还是bugreportz在起作用
看看bugreportz的相关命令:
frameworks/native/cmds/bugreportz/main.cpp

int main(int argc, char* argv[]) {
  //省略

    // TODO: code below was copy-and-pasted from bugreport.cpp (except by the
    // timeout value);
    // should be reused instead.

    // Start the dumpstatez service.
    //启动相关的 dumpstate服务
    if (stream_data) {
        property_set("ctl.start", "dumpstate");
    } else {
        property_set("ctl.start", "dumpstatez");
    }

    // Socket will not be available until service starts.
    int s = -1;
    for (int i = 0; i < 20; i++) {
    //与dumpstate进行本地socket跨进程通讯
            s = socket_local_client("dumpstate", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
        if (s >= 0) break;
        // Try again in 1 second.
        sleep(1);
    }


    int ret;
    //socket接受相关的数据进行处理
    if (stream_data) {
        ret = bugreportz_stream(s);
    } else {
        ret = bugreportz(s, show_progress);
    }
    return ret;
}

总结如下图所示:
在这里插入图片描述

验证方式:

在执行bugreport命令时候:

test@test:~/aosp/frameworks/native/cmds$ adb bugreport
[  5%] generating bugreport-crosshatch-SP1A.210812.016.C1-2022-06-28-13-02-19.zip

开另一个在终端进行adb shell查看一下阿dumpstate服务是啥权限:

crosshatch:/ $ ps -A | grep dump                                                                        
root         16137     1 10878140  5172 0                   0 S dumpstate

明显看到是一个root权限的进程

4、原因寻找及解决办法

上面已经分析了bugreport的原理,实际是借助dumpstate来实现获取高权限root的,那么问题来了,为啥wmtrace相关文件夹呢?这个问题就得看dumpstate相关源码了:

frameworks/native/cmds/dumpstate/dumpstate.cpp
看到了如下的代码:


#define PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops"
#define ALT_PSTORE_LAST_KMSG "/sys/fs/pstore/console-ramoops-0"
#define BLK_DEV_SYS_DIR "/sys/block"

#define RECOVERY_DIR "/cache/recovery"
#define RECOVERY_DATA_DIR "/data/misc/recovery"
#define UPDATE_ENGINE_LOG_DIR "/data/misc/update_engine_log"
#define LOGPERSIST_DATA_DIR "/data/misc/logd"
#define PREREBOOT_DATA_DIR "/data/misc/prereboot"
#define PROFILE_DATA_DIR_CUR "/data/misc/profiles/cur"
#define PROFILE_DATA_DIR_REF "/data/misc/profiles/ref"
#define XFRM_STAT_PROC_FILE "/proc/net/xfrm_stat"
#define WLUTIL "/vendor/xbin/wlutil"
#define WMTRACE_DATA_DIR "/data/misc/wmtrace"
#define OTA_METADATA_DIR "/metadata/ota"
#define SNAPSHOTCTL_LOG_DIR "/data/misc/snapshotctl_log"
#define LINKERCONFIG_DIR "/linkerconfig"
#define PACKAGE_DEX_USE_LIST "/data/system/package-dex-usage.list"
#define SYSTEM_TRACE_SNAPSHOT "/data/misc/perfetto-traces/bugreport/systrace.pftrace"
#define CGROUPFS_DIR "/sys/fs/cgroup"

可以看到有列出一个个的data相关目录,有RECOVERY_DATA_DIR和WMTRACE_DATA_DIR,这里重点看看WMTRACE_DATA_DIR为啥没有被导出看看是否有相关的限制条件:

看到了如下的代码,这里有一个条件就是!PropertiesHelper::IsUserBuild()
即只有在非user手机才可以导出WMTRACE_DATA_DIR目录


    /* Add window and surface trace files. */
    if (!PropertiesHelper::IsUserBuild()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
    }

修改方案探索:
1、直接删除 if (!PropertiesHelper::IsUserBuild()) 条件(比较暴力不安全)

   //if (!PropertiesHelper::IsUserBuild()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
  //  }

2、可以加一个或条件,加入自己的暗门(建议这种),比如自己也搞一个prop,可以通过adb shell改变的prop

   if (!PropertiesHelper::IsUserBuild() || isEnableProp()) {
        ds.AddDir(WMTRACE_DATA_DIR, false);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 CentOS 7 上安装中文字体

在 CentOS 7 上安装中文字体 1. 安装中文字体包&#xff1a;2. 配置字体&#xff1a;3. 更新字体缓存&#xff1a; 在 CentOS 7 上安装中文字体可以按照以下步骤进行&#xff1a; 1. 安装中文字体包&#xff1a; sudo yum install -y fontconfig sudo yum install -y cjkuni-…

MobaXterm-Chinese中文版本安装及简单使用

项目原地址&#xff1a; https://mobaxterm.mobatek.net/download.html 1.开源中文版 项目地址&#xff1a; https://github.com/RipplePiam/MobaXterm-Chinese-Simplified?loginfrom_csdn 本仓库旨在对 MobaXterm Home Edition &#xff08;Portable edition&#xff09; 进…

新闻轮播图

一、效果图 二、vue中html部分 <div class"swiper-container" ref"swiperDom"><div class"swiper-wrapper"><div class"swiper-slide" v-for"(item,index) in newsImageList" :key"index"><…

【语义分割 01】Open MMLab介绍

1 Tutorial https://github.com/TommyZihao/MMSegmentation_Tutorials https://github.com/TommyZihao/Train_Custom_Dataset https://github.com/TommyZihao/aidlux_tutorial OpenMMLab是一个由中国开发者主导的具有世界影响力的人工智能计算机视觉开源算法体系, 至今已经开…

剪辑的视频太大怎么办?一分钟学会压缩视频

当我们剪辑视频时&#xff0c;常常会遇到视频文件过大&#xff0c;导致传输不变、存储空间不足等问题&#xff0c;那么如何解决这个问题呢&#xff1f;下面就给大家分享几个压缩视频文件大小的方法&#xff0c;轻松解决剪辑视频太大的问题~ 一、使用视频压缩工具 这边给大家分…

树型结构和二叉树的概念及特性

目录 1. 树型结构 1.1 树的概念 1.2重要专有名词概念 1.3 树的表示形式 1.4 树的应用 ​编辑 2. 二叉树 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 3.有关二叉树性质的练习题 1. 树型结构 1.1 树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n …

CAD ObjectArx 二次开发 创建工具栏实现点击button出现抽屉式菜单

实现在CAD中创建工具栏并添加菜单命令&#xff0c;如下图 参照文章&#xff1a; cad—菜单&#xff0c;工具栏&#xff0c;屏幕菜单&#xff0c;增强工具栏 主要实现路径是通过创建一个可停靠窗口&#xff0c;并在其中创建toolbutton并给button点击事件添加命令&#xff0c;将…

【EI会议征稿】2023年第五届光电材料与器件国际学术会议(ICOMD 2023)

2023年第五届光电材料与器件国际学术会议&#xff08;ICOMD 2023&#xff09; 2023 5th International Conference on Optoelectronic Materials and Devices (ICOMD 2023) 第五届光电材料与器件国际学术会议&#xff08;ICOMD 2023&#xff09;将于2023年11月17-19日在中国重…

常见的除静电设备有哪些?

在工业生产中&#xff0c;往往会产生大量的静电和灰尘&#xff0c;影响设备运行效率。这时候我们就需要除静电设备了&#xff0c;常用到的静电消除器有离子风枪、离子风机、离子风棒、离子风嘴等。 离子风枪是一种手持式静电消除器&#xff0c;风力大、除尘效果好是它的特点。…

OJ练习第169题——课程表 IV

课程表 IV 力扣链接&#xff1a;1462. 课程表 IV 题目描述 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程&#xff0c;你 必须 先选 a…

Web系统常见漏洞修复

背景&#xff1a; 在工作中&#xff0c;我们的交付团队在交付项目时&#xff0c;可能会遇到甲方会使用一些第三方工具&#xff08;奇安信等&#xff09;对项目代码进行扫描&#xff0c;特别是一些对安全性要求比较高的企业&#xff0c;比如涉及到一些证券公司、银行、金融等。他…

轻松学会添加滚动字幕,让你的视频更具吸引力!

在视频中加入滚动字幕&#xff0c;可以增加视频的吸引力和可读性。通过滚动字幕&#xff0c;观众可以更好地了解视频的内容和主题&#xff0c;同时也可以增加视频的观赏性。今天小编就来教教大家要如何进行操作 第一步&#xff1a;首先我们要进入【好简单批量智剪】主页面&…

固定资产管理系统如何简化流程

对于企业而言&#xff0c;管理固定资产是一项重要的任务&#xff0c;而如何有效地进行报销则是固定资产管理的关键环节。为了解决这个问题&#xff0c;许多企业引入了固定资产管理系统。那么&#xff0c;这个系统究竟能如何简化流程呢&#xff1f;  固定资产管理系统可以实现…

Mybatis 动态SQL – 使用trim标签替代where,set标签

前面几篇我们介绍了where,set标签的使用&#xff1b;本篇我们继续介绍如何使用Mybatis提供的tirm标签替代where,set标签。 如果您对where,set标签不太了解&#xff0c;建议您先进行了解后再阅读本篇&#xff0c;可以参考&#xff1a; Mybatis 动态SQL – 使用if,where标签动态…

直播app源码,QUIC协议:改善性能与安全性

一、QUIC协议的定义&#xff1a; QUIC协议是由 “谷歌”提出的一种基于UDP传输层协议的新型协议&#xff0c;由于TCP协议的延迟较高、丢包重传效率较低等缺点&#xff0c;QUIC协议被开发应用出来&#xff0c;让直播app源码平台拥有更可靠、更快、更安全的数据传输&#xff0c;并…

给文章添加阅读模式纯js

今天给大家分享添加文章的阅读模式&#xff0c;让更好的体验度。 方法&#xff1a;首先建个input <input type"button" value"阅读模式" onclick"miniPic()" style"background-color:#275ecf;color:#FFFFFF;width:70px;height:20px;bo…

Python开发者必读!优化你的代码风格的7个技巧

当你编写Python代码时&#xff0c;是否曾想过如何让它更加清晰、整洁&#xff0c;并且易于阅读&#xff1f;Python的简单性是其吸引力之一&#xff0c;但这并不意味着你可以在编码时忽略代码质量。好的代码风格和结构可以让你的Python项目更容易维护&#xff0c;更少出现错误&a…

AI艺术写真头像二维码生成分销公众号小程序开源版开发

AI艺术写真头像二维码生成分销公众号小程序开源版开发 以下是AI艺术写真头像二维码生成分销公众号小程序的功能列表&#xff1a; 用户注册和登录功能&#xff1a;用户可以通过手机或邮箱注册和登录账号。 AI艺术写真头像生成功能&#xff1a;用户可以上传照片&#xff0c;通过…

芯科蓝牙BG27开发笔记5-有坑就蒙

笔记1中的蓝牙点灯是可以运行的&#xff0c;但是有时又会在连接过程中死机&#xff0c;笔记2中经过调试&#xff0c;通过屏蔽log输出的模块解决了此问题&#xff0c;问题定位到了uart。 那到底uart有什么问题&#xff1f; 在对这套工具和代码不熟悉的情况下&#xff0c;根据以…

使用阿里云轻量应用服务器安装Docker进行SpringBoot项目的部署上线

零、写在前面 项目源码&#xff1a;QiuShicheng/Qiu-blog (github.com) 项目是跟着B站up主【三更草堂】做的&#xff0c;本人最终系统是修改了一些前端代码。 (注&#xff1a;源码中前端代码未修改&#xff0c;仍是up主提供的&#xff09; 购买了一个轻量应用服务器2核2G&a…