什么是Android逆向?如何学习安卓逆向?

关注者
43
被浏览
156,320

22 个回答

安卓开发中代码和资源文件打包成 APK 的过程主要包括:编译、加密和打包。安卓逆向就是解压、解密和反编译了。

安卓逆向说白了就是重新获取 APK 的源码,甚至有些灰产会修改部分应用内容之后重新打包。正道用途的话,很多大企业有安卓逆向工程师,负责企业应用的安全工作,“以子之矛,攻子之盾”,测试加强自己应用的安全性。我们 Android 开发工程师有时候也会用一些逆向小技巧,看看竞品的应用某个功能实现方法之类的。

说到这里,想到前些年,有个在高校流行的安卓恶作剧软件“QQ悄悄话”,打开之后会把手机调到最大音量,然后播放不可描述的声音。经过简单的逆向就能看到它的源码:

安卓逆向在部分灰色产业也有着广泛用途,比如查找某些应用弱点从而进行攻击,或者对应用植入病毒、添加广告后重新打包分发。

类似360、腾讯手机管家这种应用也需要通过逆向工程,获取安卓病毒源码等。

如果想要学习安卓逆向的话,可以看书来学习,虽然很多书可能比较老了,其中介绍的工具已经变化了,但是原理还是基本没有变化的。

书籍

《Android 软件安全与逆向分析》【非虫】

《Android 安全技术解密与防范》

《Android 安全攻防权威指南》

《Android 逆向菜鸟速参手册》

《Android 应用安全防护和逆向分析》【姜维】

论坛:

“安卓逆向”不是一个新名词,它伴随着安卓开发而生,但是一直以来,仅限于技术圈内流行,对于非技术圈人士,往往把“APP破解”和“安卓逆向”划等号。这是写给非技术圈人士看的,在于普及安卓逆向的概念及其应用场景。

安卓逆向是什么?

目前百度知道都没有收录安卓逆向这个词条,大部分能搜索到的资料都是技术人员写的偏技术类的文章,往往充斥着代码和各类工具集合,非技术人员一看就比较懵逼。

简单地来说,安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码。

逆向需要用到解密、反编译、解压缩等技术,想要100%还原APK的源码几乎是不可能的,所以在实际进行逆向分析的时候,一般都是根据想实现的目的,分析出APK的部分源码和实现逻辑,然后对这一部分源码进行修改后与原始的APK打包在一起,这样就获得了一个实现自己特定目的的APP。

安卓逆向到底能做什么?

APP自动化执行程序脚本。

比如有这么一个场景:某APP在某天某一时刻将推广一个领代金券的活动,只要登录账号,进入领取页面即可领取一张面额100元的无门槛代金券。很显然,这是一个可以撸羊毛的活动,如果我收集了100个账号,在那天利用某些手段确保每个账号抢到一张代金券,那我就能抢到100*100=10000元的代金券,再利用网络把这些券打7折卖出去,就能赚个7000块,是不是很爽?!通过安卓逆向分析,我就能把登录、领券的动作做成一个自动化执行的插件,我先把所有账号和密码保存起来备用,到了领券的开放时间,立即自动登录、领券,一个账号领券完,自动切换登录另一个账号,一气呵成就把所有账号的券都领到手。这就是安卓逆向的用途之一,可以自动化批量执行APP的一系列动作。类似地,如果想实现批量登录账号、点赞、评论,同样也是可以的。

修改APP的功能。

不知道大家有没有遇到过,有些APP经常提示要更新,有些必须强制更新才能使用,可我就是不想更新,这时候也可以用逆向技术来实现修改APP的某些功能。通过逆向分析,找到触发更新的代码,然后把它屏蔽掉,这样打开APP后就再也不会提示更新了。


安卓逆向学习路线

一、逆向工作

主要是针对安卓手机APP进行反编译调试分析APP安全性,包括APP漏洞,反编译对抗,防破解及代码注入,根据漏洞及数据来完全一些特定需求,分析市面上的外挂辅助及制作原理;课程分为两个班级进行学习(安卓逆向、手游逆向),同学们可根据自身兴趣情况选择,亦可都报班学习。

二、安卓逆向班

主要直击就业岗位;对公司岗位需求的APP进行安全调试分析,课程所囊括的知识点完全可以迈入安全圈找一份正式的逆向工作,薪资待遇一般为(8K-25K+,视个人技术能力,一般无学历要求,一些有要求本科学历,公司会安排进行升学历提升)。

三、学习概述

安全圈包括了诸多方向,其中移动安全占有极其重要的位置,岗位的人才需求密度较高,技术难度高于一般正向开发人员,也导致工资高于普通的程序员;移动安全工作,一般较为稳定,资历随着年龄会越来越值钱,甚至在某些公司挂个名号即可享受“睡后收入”,从事灰色行业的风险和利润是共存的,行业里有句话叫做:一年一套房,一年一部车,一年一大笔存款;总之方向在于自己,把握好学习的机会,未来在自己手中。

通过这几年从事安卓逆向培训的经验,对没有编程基础的同学应该如何学习安卓逆向,制定以下学习路线:

一. 安卓逆向基础(建议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. 每天学习时间3小时。

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

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

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

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


需要了解详情的同学可以加入聊群:我会邀请你进入相关的社群里面,进行讨论和解决问题