背景:爬虫工程师对逆向的需求及安卓逆向发展前景浅析
这篇文章写给Python爬虫工程师们,互联网寒冬的就业压力越来越大,流量越来越涌向移动端,爬虫和反爬的攻防不断升级,这一切的一切,都让我们不得不学习新技能,才能保持竞争力和养家糊口(一群单身狗,挣的钱连自己都养不活) 。
App逆向不断出现在爬虫工程师的日程表里,可是到底该怎么入门App逆向?
这篇文章就是漫谈App逆向的学习,主要分成三个部分。
**1. 指出一些自学的误区
2. 推荐一些入门的学习资料
3.推荐一些长期的学习资料 **
这篇文章的目标读者是计划学习Android逆向的爬虫er,他们可能有如下特征:
几乎没有Java基础
几乎没有Android基础
对Android逆向的思路和工具缺少了解
下文会一一解答这些困惑和焦虑,但适合每个人的学习模式也各有不同,可以选择性的实践。本文对Android逆向老手帮助不大,但如果老手愿意在评论区分享经验和教训,给过来人一些指点,我表示衷心的感谢。
一、自学Android逆向的误区和陷阱
1.1. 不要试图熟练掌握Java编程和Android开发后再开始学习逆向
如果你才十五岁,有大把时间可以学习和泡妹,那我收回这话。看雪论坛不乏12岁踏上逆向之旅的天才少年,他们可以恣意的吸收知识,全部随着自己的兴趣和心意在逆向世界中遨游。而你呢,你可能不再年轻,并且即将或已经踏上工作岗位,准备让Android逆向成为你的加分项和一块跳板,那么我认为你有更优的方式学习Android逆向。而不是耗费数个月甚至更久的时间沉迷开发,最后磨损掉兴趣,放弃逆向的学习,叹一句“逆向真难,行不通的”。
Java是一门复杂精妙 的语言,但你又不是要当Java开发工程师???
Android应用开发充满魅力,新技术迭出,但你又不是要做Android工程师???
你可能很想反驳,那我不懂Java,不懂Android怎么可能搞得了逆向,佛系逆向?随缘逆向?别别别,这可行得通,我指的只是入门时不必精通Java和Android。原因有一堆,但我认为最主要的原因在于——开发和逆向的关注点不同。
我们先罗列一下Android面试和实际应用开发中出现的一些技术关键词
而我们破解时需要关注什么?尤其是对爬虫的逆向需求来说,简而言之,我们在破解加密字段如何生成,那我们的关键词是这些
开发人员需要开发和实现App的各种功能、关注数十个厂商上百个机型的适配、Apk体积的优化,App性能的优化,更吸引用户的UI,更友好的bug解决机制(热修复),而我们破解,一般来说,需要关注应用的网络通信、加解密、安全防护。开发和逆向的目标和目的不同,所以你并不需要对开发的那一套了然于胸,才能开始破解。
除此之外,App的安全问题只是Android开发的众多议题之个。一部分Android开发人员,甚至连反编译App的流程和工具都只是听闻过而已,尤其是对于小厂/一般App,安全问题它们能投入的精力十分有限,这个原因十分好理解。
狗仔和偷拍只是明星成名之后才会烦恼的事,而十八线女星正在下雨的横店乞讨着生活,App也是这样,如果你搞的不是大厂App(腾讯系/阿里系/今日头条系等)、超级App(支付宝/微信/抖音/快手等),或者特殊用处的App(买票/支付/网商等),那么开发人员给App弄个市面上常见的加固,搞个so层的加密,已经是它们防护的上限,可能这些不算太简单,但难也难得有限。因为App的用户留存率和开发人员的温饱才是他们最重要的议题。
所以,你不必花太多时间了解和实践纷繁复杂的Android开发知识,只需要看两本Java入门书,Android入门书,就可以开始学习逆向了,各种技术和知识可以在逐渐深入的过程中学习。
1.2. 不要好高骛远
这一点非常重要,上来就想学如何解密复杂的so、如何脱壳,ollvm,vmp或者撸抖音,小红书,美团这种成熟且大型的应用……
先跟着一些优良的入门教程和视频,打好基础训练思路,从简单的demo开始,一步一个脚印。
1.3. 不要收集过多的资料 & 分辨资料的时效性
比较久远的实战/破解/逆向文就不要去看了,逆向这个圈子本来就比较封闭和迟缓,应用开发和保护的技术日新月异。此时建议【易锦大学安卓逆向系统班入门课!】
1.4. 不要自负,觉得Android逆向很简单
在理想的状态下,Android app的逆向工作者需要非常熟悉java和C/C++ 语言,有开发大型或成熟Android软件的经验,熟悉Android底层和App运行原理,简而言之,最好是一个成熟老练的android高级工程师。但是,这并不意味着我们必须得到这个地步才能开始Android逆向的旅程。你应该先从一个比较系统的角度尽可能了解Android逆向的全貌,然后摘取那些"低垂的果实",跟着教程去使用一些成熟的工具,学习思路,完成几次破解。然后在问题中不断去学习和补充知识。如果你想要准备好一切在上路,也是可以的,万流如海,殊途同归,只不过你要忍受漫长的枯燥学习期罢了。
二、Android逆向入门的资料和基础
这些书和内容都是非常好的,
一、基础
1.Java
《Java 核心技术 卷一》公认经典
2.Android
《第一行代码(第2版)》
这本书写的很好,是公认的Android入门书。你可以认认真真照着例子全部敲一遍,也可以只走马观花了解一边App的开发流程,看完本书,你会明白一个Android App是怎么从无到有。
3.加解密
《Java 加密与解密的艺术 (第二版)》
讲了如何使用Java实现各种各样的加密,这本书可看可不看。
接下来就可以开始Android逆向之旅了,这是最简单的配置,按照需求,你后续可以学习这些东西。
二、Android逆向书籍和资料
1.《Android 软件安全权威指南》
白色的封面,我爱叫它白皮书。Android逆向入门需要的方方面面,它都涉及到了。
这本书适合按照需求找章节看,如果按照顺序看,你可能会死在第三章“Dalvik可执行格式与字节码规范”
我重新排一下序,同时,我建议易锦大学工具安装教程去配置工具环境(需要工具联系qq:3251901516)。可以装了java开发环境后,用jadx或者jeb万金油直接撸,但如果你喜欢敲命令行,用无大碍,下面的阅读顺序只是我个人喜好,读者自行甄别和选择。
第一、二章——环境搭建和如何分析Android程序,浏览即可。
第三、第四章——Dalvik可执行格式与字节码规范和Android文件格式,浏览即可,内容很重要,但不是入门的内容。
第五章——静态分析Android app,这也是很多培训课程的第一课,我个人也认为这个应该先看,而且写的很好。
第六章——动态分析Android应用,写的很好,但6.1的动态分析框架我没有用过,似乎有些老旧不太好用,读者可以试试。
第十章——Hook与注入,Xposed+Frida是这一章节的重点,Frida是目前最流行的动态插桩工具。
第一十章节——软件保护技术,讲的很全面。
章节七八九是Native层的内容,我把它划分到下一部分,入门单单指Java层,章节十二是软件壳的内容,也是进阶的内容。
2.《Android应用安全防护和逆向分析》
黄色封面,我叫它黄皮书,这本书的内容也充实有料,和白皮书一样,也是面向Android开发/安全人员,门槛比较高。我个人也是建议按照模块看,按照顺序看的话小心坑。
全书分成三个部分,防护篇和工具篇都讲的很好。这本书也是必备。
这两本书是引路明灯,但光看这两本书,是远远不够的,你需要真正的实战,还有看书也是比较枯燥的,如果条件允许的话建议去报班系统学习,有老师带,看视频比看书好的多,书籍的话更多是帮助你一些提升,但是对于自学能力不强的不建议!
最后再大家附带一张安卓逆向工程师前景大致图。不止是爬虫行业,其他编程行业逆向安全也会等着你!