Android Security Learning
==========================================================================
1.Basic Requirements
熟悉Android开发环境,能够较为熟练的开发Android程序
了解ARM、Smali汇编语言
熟悉IDA、Gdb等调试分析工具
熟悉Android/Linux底层框架,熟悉系统的工作原理和细节
研究Android系统底层,分析漏洞和潜在风险
2.Learning Route
2.1 Android基础知识
学习Android开发编程,了解其原理。
1.熟悉Java,C和C++三种在Android系统中使用较多的语言,了解几种语言的特性。
2.学习Android开发,推荐使用Android studio进行开发,也可以使用eclipse。
3.完成一些小程序,学习Native开发,利用NDK完成一些native程序。
4.在过程中了解Android系统的层次结构,四大组件等Android系统的基本知识。
5.尽可能的了解Andorid系统的概貌。
6.在基础学习的过程中学习有效的使用搜索引擎,对不熟悉的属于进行了解学习。
2.2 逆向基础知识
学习逆向基础相关知识和工具、并试图动手实践。
1. 熟悉Android逆向工具的使用,如dex2jar,JEB,AndroidKiller,Androguard等.
2.大致学习APK中包含的各文件格式,可以阅读Android系统解析APK的源码,也可以利用开源项目 Androguard来学习。
3.学习和熟悉smali语言。
4.尝试自己写小程序,并利用工具逆向,对比学习。
5.尝试逆向一些小程序,分析其功能逻辑。
2.3 逆向进阶学习
对ARM汇编、Smali语法、相关调试工具等进行学习。
1.学习和熟悉ARM汇编指令;
2.学习学习并熟悉IDA,gdb两种逆向工具的使用;
3.学习Smali调试的方法,参考书籍《Android软件安全与逆向分析》;
4.学习使用IDA静态分析Native程序,自己写Native程序并逆向,对比学习;
5.使用IDA和gdb对Native程序进行调试;
6.分析和调试一些带有Native代码的APK;
7.开始学习Android系统知识,推荐《Android系统源代码情景分析》;
2.4 逆向实战
病毒分析语脱壳学习
1.找一些病毒木马分析博客跟着博客内容的教程进行分析实践推荐用Ransomware类和木马类进行学习
2.找一些分析加壳程序的分析文章进行手动脱壳
2.5 漏洞分析与挖掘
学习漏洞类型和原理。
1.学习常见的漏洞类型,例如堆溢出,栈溢出,UAF等,可以参考SecWiki漏洞分析相关书籍;
2.关注android security bulletin,根据提供的diff分析漏洞成因;
3.学习并调试以前的经典漏洞和分析文章;
4.学习漏洞挖掘fuzzing思路,参考书籍《Android安全攻防权威指南》;
3.Website Summary
Exercise
Skill
Complement: IOS