Android 逆向分析学习路线?

关注者
695
被浏览
216,157

19 个回答

==================================================

2016-12-19补充几点:

(一)不要相信任何"网络(线上)培训班",逆向无捷径,真的想学请耐心泡论坛(看雪,52),以及看书.

android逆向是杂学,考验的是知识广度+深度+经验
因此android逆向的培训,无法像java,php,c#这类常规语言一样被量化

这种培训也很难达到"程序员工厂"的效果

号称一两个月毕业的"培训班,几乎毫无可能让一个新手速成为高手.

他或许能教你一些容易上手的方法,但请相信,这些即使真的学到,也没有任何用途.因为技术永远是在不断更新的
这类培训班往往利用android逆向严重的信息不对称性(逆向属于小众技术),以及学员想速成的心理盈利.

最令人鄙视的是,py都觉得不够用的当下,一部分培训班甚至拿着某中文伪代码类vb编程语言(所谓X语言)进行教学.

判断一个培训班是不是靠谱可以考察两个问题:

1.在报名时,培训机构负责人是否详细审核你的基础知识(参考第二点)
如果没有,请放弃,因为这一定是骗人的,没人能把一个c不会,java不通,smali看不懂,py不会写的人培训成逆向高手.
2.授课时使用什么语言?
如果对方用某中文编程语言授课,还是算了吧.




(二)什么样的人可以学android逆向

再强调一次,android逆向是杂学.
因此android逆向几乎无法零基础上手.

最适合学习android逆向的,是那些已经从事一段时间android sdk ndk开发的人.

这些人的特征是

非常了解android系统的运行机制

并且长期使用CC++,java进行开发.


他们的优势并不在于技术能力.而在于经验积累.

他们所欠缺的只是逆向方法论,和逆向针对性技术.


我周围的逆向大牛走的也几乎都是这条路.

另外请注意,这些人基本上不会接触和使用X语言(某中文伪代码类vb编程语言).

==================================================

Android软件安全与逆向分析 这本书可以作为入门

内容相对较浅

体现在对于具体的加固,协议栈(如有效算法)的定向分析

这本书阐述了非常好的基础分析思路和理论原理

非常适合作为入门书籍


我有x86逆向基础,在接触这个领域前用已经非常了解8086汇编和linux(教程没看王爽,而是看小甲鱼,linux在很早的时候读完了私房菜,貌似暴露年龄)搞过几年od,因此直接跳过入门过程.

请注意,我在这种前提下,断断续续搞了一年android逆向,才刚刚达到了中低手的水平.

目前对我帮助最大的书是(美)Chris Eagle的"ida pro权威指南"


逆向必备的基本功是 :

java,C++(jni非常重要)

C语言(F5插件看不懂会很麻烦)

python(后期脚本用)

arm汇编

Linux(最好精通一种shell,推荐bash)

密码学(至少对aes des,iv向量,等一些基础算法有认识,否则会举步维艰)

另外,请为自己买一个机械键盘

国内android逆向界现状:

目前国内android逆向圈"偏科"问题很严重.

分为脱壳(dump),协议分析两个大的方向

如果为了就业而学习,建议放弃脱壳直接学习协议分析.
后者在实际工作中应用远高于前者.


目前没有好的全体系教程.

自学途径可以是(这个流程是默认你已经掌握android 的sdk ndk开发 Linux和python都略懂的基础下):

非虫(丰生强):Android软件安全与逆向分析(建立逆向思维,学好smali及基础分析)

(美)Chris Eagle:ida pro权威指南第二版 (掌握ida)

其他推荐阅读:

arm:随便找一本即可(因为大多知识点差不多)

密码学:深入浅出密码学(没有数学基础推荐看这本,有数学基础的朋友应该不需要我推荐)

关于什么时候看论坛:

建议初学者关掉论坛.

真正该看论坛是在你遇到针对性较强问题的时候.比如对于XX壳的dump方案,比如过XX反调试没有思路的时候,但达到这程度的人,在国内往往能算上中手.

谢谢大家的支持和感谢 这里简单的聊聊私信常见问题

1.关于学完就业的几个面试基础问题

一定要正经公司的安全岗位 (手动狗头)

  • 从事1-2年真实的Android开发工作,熟练使用C/C++,Java,kotlin,dart等Android开发常用语言 至少一门吧 (自身先决条件解决 培训课程里也有但是肯定不够用 )
  • 熟悉Android NDK开发和JNI技术,熟悉Log原理。(培训班可以解决 )有FrameWork开发经验最好加分项;
  • 熟悉Android虚拟机机制,打包原理,系统启动流程,App启动流程;(这个参加培训班可以解决)
  • 了解ARM、Smali汇编语言,(参加培训可以解决)加分项:懂IPC原理,能够熟练搭建IPC框架;
  • 熟练使用Fiddler和Charles抓包工具进行抓包;(参加培训可解决)
  • 最好熟悉Python基础语法,并能写简单的脚本和爬虫。(爬虫岗位这个有难度?Python教程一大把有难度?)

本人有正规安全工作 别私我做项目 不感兴趣 收入已经有余 安全行业的确很挑战人性 特别是涉及到大型企业级项目中的敏感环节 压力也有 跑偏了。。

2.安卓逆向的前景怎么样?为什么要投入这个行业?

可以参考一下这篇文章

3.为什么要推荐参加培训班?自学不行吗?

本人再次强调 无论你选择哪种方法都可以!

个人觉得自学是最慢 效率最低 最不全面 特别是针对我们这个瞬息万变的IT行业 还是那句话 时间成本是你最大的成本 有人花钱省时间 有人花时间省钱 不是没道理的。

当然也不乏有很多学习能力强的人 不过我相信绝大部分人肯定是坚持不下来的。

参加培训最大的好处就是 可以快速缩短安卓逆向新手对这个行业技能的距离和深度,资源!

本人参加的是当时的安卓逆向实地培训 短短几个月的确是学到了不少 薪资从11K直接稳定到20K左右


非常欢迎越来越多的人从事这个行业 因为是体验者真心推荐给每个学习者 和他们没有丝毫利益关系 也没必要

最后希望每个人都可以找到属于自己的学习方法~

————————————

最近有很多小伙伴私信我 问我教不教安卓逆向 工作原因 老弟真的有心力不足 回答这个问题的初衷也是希望 给工作中 自学中遇到问题的伙伴们 提供一下学习方向

近期爬虫很多人注意到了 app逆向这块 可以看看我的文章:

有条件的童鞋们 建议还是付费学习 逆向之路不是看上去那么轻松

学习时间成本比金钱成本重要!!

最后需要付费学习的 可以私信我 我可以帮各位童鞋 推荐靠谱的地方学习安卓逆向

希望此答案能帮助到大家!也欢迎大家私信和我讨论

------------------------------------------------------------------------------

以下是原答案

就我自己从事安卓逆向这几年的经验来说,对没有编程基础的朋友如何学习安卓逆向最好制定以下学习路线:

一. 安卓逆向基础(建议1周)

1. 学习安卓逆向第一步必须先把环境搭建好,这是你学习安卓逆向的开始,环境搭建好后表示正式迈入安卓逆向。在环境安装的工程中会遇到很多细节上的问题,针对这些坑可以去看看使用教程,或者看看网课老师的教程操作都可以。

2. 第二步就是要了解我们要分析的是什么文件,很多0基础的都不知道安卓逆向分析的什么文件。我们要分析的是应用程序或者安装包(就是.apk文件),了解apk是怎么生成的以及如何安装到我们的手机里面,apk是怎么运行的,也是我们探讨的内容。

3. 第三步如何逆向分析.apk文件,掌握apk反编译及回编译,完成这个操作使用的工具是apktool。

二. Java层逆向(建议3周)

1. 掌握Java语法基础,达到能看懂Java代码。

2. 了解smali语法,能看懂smali代码。

3. 掌握逆向分析apk中常用的方法和技巧。

三. Native层逆向(建议4周)

1. 了解安卓操作系统和四大组件。

2. 了解NDK开发流程,自己编写案例练习。

3. 掌握常用ARM汇编指令,达到能看懂ARM汇编指令。

4. 掌握IDA工具的使用,熟练使用IDA进行各种操作。

四. APK保护策略(建议1周)

1. 了解Java代码混淆、资源混淆。

2. 掌握签名验证、文件校验、模拟器检测。

3. 本地验证、网络验证。

4. 案例练习。

五. 反调试与反-反调试(建议1周)

1. 掌握常用反调试方法及过反调试技巧,比如关键文件检测、调试端口检测、进程名称检测、防附加、轮训检测TracerPid值、时间检测、信号检测等反调试。

2. 掌握IDA过反调试思路。

3. 案例练习。

六. HOOK框架(建议2周)

1. 掌握HOOK插件开发。

2. 掌握Xposed、Substrate、Fridad等框架。

3. 案例练习。

七. 常见加密算法(建议2周)

1. 掌握编码算法、消息摘要算法、对称加密算法(Java加密与解密的艺术)。

2. 掌握非对称加密算法、数字签名算法。

八. 协议加解密分析(建议4周)

1. 了解客户端与服务器如何进行交互的(OSI模型、TCP/IP模型)。

2. 掌握常用的抓包工具及环境配置,HTTP协议与HTTPS安全协议,数字证书、SSL证书检测(计算机网络与通信、信息安全工程师)。

3. 案例练习。

九. 文件结构(建议2周)

1. 掌握DEX、ELF、XML、ARSC等文件结构。

2. 自编写文件解析工具。

十. 系统源码分析(建议2周)

1. 了解安卓操作系统启动流程、Zygote启动流程。

2. 掌握Dalvik虚拟机、ART虚拟机、SO加载流程。

十一. 加固与脱壳(建议4周)

1. 了解Dex文件整体加密、Dex代码抽取加密。

2. 了解SO文件整体加密、函数加密、区段加密、加壳、混淆。

3. 分析通用脱壳机的实现原理及应用场景。

4. 了解主流加固特点及对应的脱壳技巧。

十二. 学习方法

1. 看一遍教程后自己实战操作,养成做笔记的习惯。

2. 注重基础,一定要把Java层和Native层搞懂。

3. 学习中不要纠结细节,要学会抓大放小。

4. 学完后自己画脑图,回顾学习的过程中那些不理解在花时间去看,此过程就是查漏补缺。

最后,如果大家对安卓逆向的学习感兴趣的可以私信我,我们可以共同探讨对安卓逆向这方面的学习。

-----------------更新一下 安卓逆向使用目前比较通用的工具

抓包工具

链接:pan.baidu.com/s/1CgbsOF

AndroidKiller工具

链接:pan.baidu.com/s/1dFzYtA

提取码:2gep

IDA工具

链接:pan.baidu.com/s/1eSgt1n

提取码:28i8

Android集成开发环境搭建

链接:pan.baidu.com/s/1nvSiqb

提取码:dila

NDK的使用

链接:pan.baidu.com/s/1miyytP

提取码:kpne

详解安装jdk的步骤

链接:pan.baidu.com/s/1o7DCPE

提取码:smw2

还有一些工具怕被河蟹 如果有需要的同学可以私信我