如何从技术上全面分析一款android app?

假如手上有一款apk,没有源码也没有文档,如何借助各种工具,尽可能还原其中的技术,全面分析可能存在的漏洞和性能问题并提出建议。需要关注哪几个点才能算得…
关注者
732
被浏览
59,381

10 个回答

这个问题有意思。

工作之外,我也一直在思考、实践与探索,当然我的目的是研究与学习。

从题主的描述来理解,是想分析一款Android技术实现、软件漏洞以及性能问题,在没有源码的情况下。

以下可能不会涉及太多细节,而且一家之言,可能很多东西没有涉及,欢迎探讨。

技术还原汤涛讲的挺深入的,田WeiShu从三个方面回答也讲的挺全面的,我再主要补充一些关于安全(漏洞)分析相关的。

如何从技术上全面分析一款android app? - 汤涛的回答如何从技术上全面分析一款android app? - 田Weishu 的回答

  • 技术还原

技术还原,一般就是反编译了,推荐的高质量网站推荐3个:52破解、看雪、乌云Android知识库(

drops.wooyun.org/catego

)。多逛逛你知道目前大致使用的工具以及手法了。反编译看到类之后可以去Google搜索所用到的库,某些库在特定版本有一些问题,比如https证书未校验的问题。

相关的软件也可以去搜索一下cto以及相关开发人员的技术博客,比如之前豌豆荚的开发者分享过豌豆自动安装的原理。

反编译针对加固apk还需要脱壳,一般大家都采用的那几家通用的加固方案,所以针对梆梆加固、爱加密、360加固保、阿里聚安全、腾讯应用加固等脱壳即可。目前有一些脱壳方案,比如dexhunter。

  • 安全分析

关于安全分析,如果不是自己做工具分析的话,目前有现成可用的。

腾讯金刚

service.security.tencent.com

貌似目前没有对外开放了

360捉虫助手

appscan.360.cn/

阿里聚安全

jaq.alibaba.com/?

梆梆安全

bangcle.com/app/app-aud

以360为例,能分析以下这些问题,各家基本大同小异。

如果是自己想搞一套自己用的,也是有的。分析原理有直接对APK静态分析(加固无法分析,可自行实现脱壳分析),也有虚拟机运行的行为分析(加固可分析)等。如下为其中一些:

APK评估框架Drozer

github.com/mwrlabs/droz

LinkedIn的评估框架Qark(python )

GitHub - linkedin/qark: Tool to look for several security related Android application vulnerabilities

静态以及动态分析框架MobSF

ajinabraham/Mobile-Security-Framework-MobSF...

APK信息分析

GitHub - Xbalien/ADVDroid: statically vetting android apps based soot

漏洞测试样本

GitHub - nil1666/AuditDroid: AduitDroid

漏洞测试

nowsecure/android-vts: Android Vulnerability Test Suite

脱壳

CvvT/DumpApk · GitHub

脱壳Dexhunter

zyq8709/DexHunter: General Automatic Unpacking Tool for Android Dex Files

相关技术点 陈家林的这份ppt不错

download.csdn.net/detai

大量Android安全相关的工具

ashishb/android-security-awesome

腾讯玄武实验室(

腾讯玄武实验室的微博

)也会整理一些文章,我一般直接看Android相关的,质量很不错,推荐关注。

  • 性能分析

没有APK的话,可以用一些软件去检测一些应用的耗电、CPU、GPU等使用情况;系统也有提供一些工具(比如开发者选项的Debug GPU overdraw, Process Stats, Profile GPU rendering等)

这块了解不多。

Google的一些

Android性能优化典范正确使用Android性能分析工具——TraceView

欢迎补充

最后,加个广告,不要砍我哈

欢迎大家关注github

waylife (RxRead) · GitHub

,定期会star一些Android相关的项目(UI组件、安全、基础库)。

先吐槽一下问题和描述啊,完全不一致啊有木有( ¬_¬)

姑且认为题主关心的是「尽可能还原其中的技术,全面分析可能存在的漏洞和性能问题并提出建议」

问题分为两个方面,还原其中的技术,漏洞和性能分析。

1. 尽可能还原其中的技术

就是所谓的逆向工程了,这个领域很广水也很深,但主要技术无外乎两点,静态分析以及动态调试。静态分析的话,从简单的jadx, apktool到复杂点的jeb,IDA等工具都能派上用场。一般来说,绝大部分程序靠静态分析(你就当是反编译吧)就能摸清楚个大概,何况很多Android程序都是裸奔的,顶多加个混淆。动态调试的话用来对抗anti-decompiler以及对于复杂逻辑和流程的把控;对职业素养要求比较高,不紧要熟悉汇编还要有敏锐的直觉;像我只能搞些简单的。另外可能有的程序需要脱壳,这一块不熟不敢妄言。

上面的动态调试以及接下来的分析可能需要apk可以调试;所以先说说怎么把一个app弄成debuggable的,有三种方案。

其一修改manifest文件里面application的debuggable属性然后重新打包,方法最简单但是需要解包对于有自校检的程序还需要额外处理;其二,root手机,用xposed框架修改其co.debuggable属性;其三,nexus手机刷aosp修改映像文件的co.debuggable属性。方法二和三不需要修改apk,一劳永逸,个人比较喜欢三,因为还能拿来调试Android系统源码比如system server什么的,行号都能对上。

回到第二个问题,漏洞和性能分析。

2. 漏洞分析

漏洞分析的话比较多,需要结合第一点,也有一些检测漏洞的平台就不打广告了。提几点吧

数据存储;是不是把敏感信息明文存了?动态加载了外部dex/资源?

数据传输;用fiddler抓包,密码明文传输?加密方式简单?

组件暴露;这个漏洞比较常见,攻击方式多种多样。比如那个有名的Intent攻击,爪机就不给链接了。

Webview漏洞;这一块漏洞也有点多,乌云报了一些,比如javascript注入攻击什么的,检测工具应该也能做。

其他的一些比如logcat信息泄露啊什么的实在是太多了,只不过没有引起广泛关注,我一时也想不起来,待补充。

3. 性能分析

性能分析,我理解有内存性能,IO性能, 界面性能,耗电等。

内存性能,用debuggable的app结合mat等专业工具可以分析。另外最近的Leakcanary很好用,但是要手动加入代码;合理猜测用xposed写个模块hook掉这个app然后植入代码应该可行,待验证。

IO性能,Android上没有什么好用的工具;不过linux内核支持,iotop这个命令可以分析IO占用。可是通常的Android ROM编译的时候去掉了这个编译开关,结果没有这个功能。如果需要的话,需要自己修改编译参数打开这个开关(具体哪个忘了,xda论坛可以搜索),然后自己编译Android内核;这个我曾经做过,如果感兴趣我可以写一篇文章。

界面性能;这个嘛,SDK就有很多工具,比如Hierarchy Viewer,uiautomaterviewer等,还有手机自带的开发者工具诸如过度绘制查看工具,cpu GPU使用率等,选择较多。

耗电;简单来讲Android系统电池用量就可以看,也有专业工具little eye什么的。


暂时想到这么多,待补充。爪机码字,就酱,睡觉ಠ_ಠ