42

反编译完这些 app 后,我给它们的安全等级打个分

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzIxNzU1Nzk3OQ%3D%3D&%3Bmid=2247491283&%3Bidx=1&%3Bsn=d58c22b365049ee11bce94263039252e
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

code小生 一个专注大前端领域的技术平台 公众号回复 Android 加入安卓技术群

作者: 星星y

链接:https://www.jianshu.com/p/052ce81ac953

声明:本文已获 星星y 授权发表,转发等请联系原作者授权

前言

在Android开发中,apk的安全性是一个重要的关注点。每个app应用对于自身的数据和代码安全做了对应的保护。为了调研和学习市场上各类app它们的安全策略,此次反编译了30款apk来调研学习,加入debuggable和networkSecurityConfig属性(加入Charles证书),回编并签名apk,然后启动它,通过日志,抓包,界面展示来看看不同应用的安全策略。同时针对这些应用用了一个粗糙的分数排名(非专业评分,大家看看就好)。

各参数等级与分数说明

反编译Level

  • L1: 资源无混淆,使用原始ApkTool即可实现反编译,回编成apk。

  • L2(5分): 资源混淆,需要修改ApkTool源码,可通过ApkCrack一键完成编译,添加证书,debug信息,回编签名

  • L3(10分): 资源混淆,ApkCrack无法回编,需要继续修改ApkTool源码适配,需要修改异常命名属性名,文件名,异常图片。最终可以回编成apk

  • L4(20分): 可以反编译,无法回编

启动level

  • L1: 正常启动

  • L2(20分): 无法启动,卡住或闪退

http请求Level

  • L1: http请求,抓包简单

  • L2(5分): https请求,无签名,可以修改请求

  • L3(10分): https请求,有参数签名校验,可以查看请求,无法修改

  • L4(15分): https请求,签名校验,响应加密

  • L5(20分): 无法抓取请求

登录Level

  • L1: 可以登录

  • L2(20分): 无法登录

主界面Level

  • L1: 能进入主界面

  • L2(20分): 不能

效果图

抓包

rYBbyyY.png!mobile 拼多多 eyEjIj3.png!mobile 快手

ApkCrack反编译过程

myqAbuj.png!mobile ApkCrackUI一键破解

相关日志

rMbi6bE.png!mobile log

apk安全评分

"-"表示当前最高等级,应用无法启动,默认最高等级。

3yae22m.png!mobile v

上面app的排名非权威,非正式,非正确,大家且不必认真对待。

小结

不同类型的应用关注的安全等级与安全策略可能会有所不同,大致可能会有以下一些情况:

  • 请求无签名,可以修改参数,安全等级较低,新闻类应用

  • 关键数据加密,比如腾讯漫画只加密类章节数据

  • 主界面有数据,提示非官方应用(拼多多)

  • 主界面有数据,但是无法登录

  • 主界面提示网络错误,签名校验失败(饿了么)

  • 无法进入主界面,可能卡在闪屏页,可能应用闪退。

  • 应用加固,反编译后无法启动,如自如,我爱我家,贝壳,这类应用数据(房源)都很重要,所以要加固代码。

Apk代码保护

反编译完那些apk发现,不是所有的apk会选择最极致的防破解方式(代码混淆,资源混淆,加固等)。为了兼容性与性能,大部分应用不会选择加固方式保护代码。那么代码保护有哪些套路呢?根据上面的app,会有下面一些方案(可以叠加使用)。

  • 代码混淆(gradle配置minifyEnabled可实现,大部分应用都会实现)

  • 资源混淆(使用AndResGuard之类资源混淆库可实现,这类app用ApkTool是无法实现的,回编apk时会报No resource identifier found for attribute,不过可通过ApkCrack回编)

  • 添加一些不符合规则的文件名,或者错误头的文件(因为apktool回编是通过aapt或者aapt2实现的,不合规的文件命名和文件导致资源编译失败,这些app破解时可能需要继续针对性的修改ApkTool源码,手动或者代码方式处理这些文件和文件名,汇编重新签名,破解时长和难度较高)

  • 签名校验。因为原始的apk签名无法获取,反编译后的apk只能通过自己新生成的签名文件签名。所以,签名信息校验变得至关重要,它会帮你识别官方apk与第三方破解(有可能是恶意)的apk。在启动时做签名校验,可以更具校验结果选择不同的安全策略(闪退,安全模式,文字提醒,网络请求失败等)。

  • 应用加固。如果你的app数据极为重要(独家信息),不能完全通过其他方式比如服务端,或者上面三种方式保证数据安全,最稳妥的就是加固应用了。可以选择阿里(聚安全),腾讯(乐固),360(加固宝)等方式加固自身的应用。

相关阅读

1 手把手教学APK反编译实现源码阅读

2 在Java 中安全使用接口引用

3 一个人竟然撸了一个微博 App

4 Android 记一次解决问题的过程

5 2019 年终总结,245+篇,已分类整理

B3Q7faa.jpg!mobile

如果你有写博客的好习惯

欢迎投稿

赞+在看,小生感恩 :heart:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK