EMAS热修复Sophix适配App加固的技术方案

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文将介绍阿里云EMAS热修复Sophix适配App加固技术方案。

一、问题描述

某阿里云EMAS客户的APK基于最新的线上版本发布了第十个补丁发布1小时后在崩溃检测平台收集到crash日志,并收到用户反馈:部分手机上的APP会闪退

客户开发人员紧急上报EMAS技术支持,双方沟通后初步判断是补丁加载导致APP闪退。同时我们本地和客户本地经过多次、多轮测试,没有一台手机可以复现闪退,此时崩溃率已达到9% 左右,经讨论决定先回滚本次补丁。


二、调查难点

难点一:该问题当时无法在本地复现,技术支持同学经过充分、多次测试,包括用户出问题的同款手机,均无法复现闪退问题。

难点二:日志平台抓取的日志signal 6为系统层面日志,无法指导定位代码层面问题。 唯一一条有用日志:/data/app/com.xxx.xxx-l-Lc_A9dXeo8oWIupXFKxA==/oat/arm64/base.odex。

*备注:EMAS远程日志提供客户端全量日志拉取、诊断、管理能力,帮助开发者建立分钟级线上问题定位能力


三、调查方向

1.日志抓到的报错对代码没有用,但是可以看出来是odex问题。我们需要反编译APK文件,查看具体class内容。

2.在APP中关键节点加日志, 判断该类是否成功加载到补丁里以及加载补丁的时候有没有加载这个类,两个重要节点


四、调查经过

第一阶段:根据抓到的日志显示崩溃在odex中:

image.png

怀疑和加固有关,经确认,客户使用了加固,但是日志上看走的是非加固模式,我们提供热修复走加固模式的API(下图,适配后重新测试。

image.png

第二阶段:客户走加固模式后,提供了测试包(APK未加固),经测试有10%的手机会崩溃(如荣耀、华为品牌的手机,失败日志如下:)

image.png

日志上看是崩溃在外部类调用内部类的checkInputTxt方法上,通过方法签名看,外部类是旧包中的,内部类是补丁包的,但是外部类有变更,理论上应该加载补丁中的外部类。此时,我们怀疑外部ChatRoomManager没打包进补丁包反编译补丁包检查如下图

image.png

image.png

image.png

可以看出外部打包进了补丁包,此步骤和流程没有问题,但是从补丁加载日志上看,加载的补丁包中也有外部类,此时我们怀疑外部类在加载补丁之前已经被类加载器加载。(由于部分机型必现崩溃,部分机型正常,开始怀疑不同机型系统的类加载机制问题,但是普遍认知中类加载机制一般不会出问题。)

第三阶段:此时重点关注类加载的时机和类加载器对象:加了类加载过程的日志和类加载器哈希打印。

image.png

日志中崩溃的设备在加载补丁包前后都没有看到外部类的加载日志。此时确定是类加载器的问题。考虑到加固本身也会使用自定义类加载器,让客户对APK进行加固测试正常。


五、问题解决

基于结论,我们给客户适配了加固模式测试,加固模式会使用自己的类加载器,避免了双亲委派机制失效的影响。经过monkey测试30台机器均无问题,至此反馈客户问题解决。


六、总结

  1. 匿名内部类的热修的需要加一些java代码来确保所有的方法都被打进补丁包。
  2. 适配加固的方案需要严格适配加固模式。
目录
相关文章
|
1月前
|
监控 安全 数据可视化
【教程】为什么要为 App 应用加固 ?如何为 App 应用加固 ?
【教程】为什么要为 App 应用加固 ?如何为 App 应用加固 ?
|
3月前
|
JSON Dart 安全
Flutter App混淆加固、保护与优化原理
Flutter App混淆加固、保护与优化原理
51 0
|
3月前
|
存储 移动开发 安全
如何实现APP安全加固?加固技术、方法和方案
通过前面的文章我们知道了app安全检测要去检测哪些内容,发现问题后我们如何去修复?如何避免安全问题?首先我们先来讲一下APP安全加固技术。
|
4月前
|
Web App开发 移动开发 小程序
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,显示“网络不给力,请稍后再试”,预发内网版本不能使用,线上版本可以正常使用,这个是什么原因啊,是某些参数没有配置吗,还是说是一些参数改错了?
59 2
|
3月前
|
安全 Java 数据安全/隐私保护
APP加固技术及其应用
在移动应用开发过程中,APP加固技术起到了非常重要的作用。APP加固是将apk文件进行混淆加密,以防止别人反编译获取我们的源码和资源文件。目前市场上主流的APP加固公司有三家,分别是梆梆加固、360加固和ipagurd加固。本文将介绍APP加固的概念、加固方案和比较,并探讨APP加固在实际开发中的应用。
|
1月前
|
监控 安全 测试技术
强化您的应用安全,从app加固开始
强化您的应用安全,从app加固开始
27 0
|
1月前
|
移动开发 安全 数据安全/隐私保护
【教程】APP 加固的那些小事情
【教程】APP 加固的那些小事情
|
1月前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
32 2
|
3月前
|
安全 Java 数据安全/隐私保护
APP加固技术及其应用
APP加固技术及其应用
56 0
|
3月前
|
存储 安全 开发工具
APP安全加固怎么做?加固技术、加固方法、加固方案
APP安全加固怎么做?加固技术、加固方法、加固方案
54 0

热门文章

最新文章