本公众号分享的所有技术仅用于学习交流,如作他用所承受的法律责任一概与作者无关。如有错漏,欢迎留言交流。预计阅读全文耗时:95min
《java编程思想(第5版)》Bruce Eckel
《Android Studio开发实战从零基础到App上线(第三版)》 欧阳燊
《第一行代码Android第2版》郭霖
《ARM汇编与逆向工程 蓝狐卷基础知识》MariaMarkstedter
《安卓Frida逆向与抓包实战》陈佳林
《安卓Frida逆向与协议分析》陈佳林
《IDA Pro权威指南(第2版)》Chris Eagle
《Frida Android SO逆向深入实践》陈佳林
《unidbg逆向工程原理与实践》陈佳林
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 一、前置知识
├── 为什么学习安卓逆向
└── 学习安卓逆向需要准备什么
├── 学安卓逆向的前置知识
└── 硬件配置
二、 打造属于自己的anroid逆向环境
├── 1. 开发环境(windows)
│ ├── java 开发环境(学习Java,Android开发时候用)
│ │ ├── JDK
│ │ └── IDEA
│ ├── Android开发环境(root、Android正向开发、编写Xposed插件的时候用)
│ │ ├── Android Studio
│ │ │ ├── 安装Android Studio
│ │ │ └── 创建工程测试一下
│ │ └── SDK
│ │ ├── SDK目录结构
│ │ ├── SDK版本管理
│ │ └── adb
│ ├── C 开发环境(so层逆向的时候用,直接输出到Android Studio 的logcat上,不需要安装新的环境了)
│ ├── python 开发环境(编写爬虫、Frida的时候用)
│ │ ├── Python
│ │ └── 安装PyCharm
│ ├── Javascript 开发环境(学习js、Frida、js逆向的时候用)
│ │ ├── chrome浏览器
│ │ ├── nodejs
│ │ └── pycharm(专业版才支持js)+nodejs插件
│ ├── 其他工具
│ │ ├── AndroidKiller
│ │ │ ├── 配置AndroidKiller
│ │ │ └── 更新smali插桩插件
│ │ ├── apktool
│ │ ├── Jadx
│ │ ├── JEB
│ │ ├── Frida安装配置(windows)
│ │ │ ├── 电脑端配置
│ │ │ ├── 手机端配置
│ │ │ └── 测试
│ │ ├── IDA Pro
│ │ └── 不常用
│ │ ├── Jd-Gui
│ │ ├── dex2jar
│ │ ├── enjarify
│ │ ├── baksmali
│ │ ├── dnSpy
│ │ ├── Bytecode-Viewer
│ │ └── 类UNIX模拟环境
├── 2. 开发环境(mac)
│ ├── 安装git、iterm2
│ ├── 安装pyenv、python、pycharm
│ ├── 安装jdk、Android Studio、sdk
│ ├── 安装Jadx、Apktool、jeb、IDA Pro
│ └── vscode、IDEA、GoLand、DBeaver、postman、Charles、mitmproxy
├── 3. 开发环境(Linux)
└── 4. 真机
├── 刷机
│ ├── 解BL锁
│ │ ├── 小米(以红米9A为例)
│ │ │ ├── 准备驱动
│ │ │ └── 解锁BL
│ │ └── goole手机
│ └── 刷系统
├── Magisk(ROOT)
│ ├── magisk是什么?
│ ├── 刷入Magisk面具
│ │ ├── 方式1:通过TWRP刷入Magisk
│ │ └── 方式2:安装Magisk Manager再通过修补boot.img刷入Magisk
│ └── Magisk模块的安装
│ ├── 救砖模块
│ └── Move Certificates
├── Xposed框架
│ ├── EdXposed
│ │ ├── 安装EdXposedManager
│ │ ├── 还需要安装两个Magisk模块
│ │ ├── Riru
│ │ ├── EdXposed
│ │ └── EdXposed重启到用户空间
│ └── LSPosed
│ └── 安装LSPosed
├── 系统备份与救砖
└── MT管理器
|
4. 真机
- 红米9A、nexus 5x、pixel 3
- ==如果这步实在搞不了,淘宝30块搞定==
刷机
- 前期准备:
- 电脑配置好ADB环境
- 手机在开发者模式下,启用OEM解锁、启用USB调试
解BL锁
小米(以红米9A为例)
准备驱动
小米手机服务支持-小米商城 (mi.com):https://www.mi.com/c/service/download/index.html
解锁BL
BL锁
- BL是
bootloader
的简称 就是开机引导程序 ,Bootloader锁,主要是在引导过程中对系统签名,内核签名及Recovery签名进行检验,如果签名不一致,即终止引导。
- 它是限制用户刷第三方ROM和第三方recovery以及限制root的“锁”(我们所说的“解锁”就是他),锁住recovery和fastboot不会被其他东西随意刷机和篡改。
- bl未解开状态下无法root也无法刷第三方ROM。因为刷第三方ROM就必须先要刷入第三方REC。
解锁风险
- 解锁设备将允许修改系统重要组件,并有可能在一定程度上导致设备受损;
- 解锁后部分对系统安全性依赖高的功能和服务,比如:查找手机、增值服务等将失效;
- 解锁后由于刷机导致的硬件故障,小米售后维修网点可以按非保修处理,并按普通的保外软件维修进行收费。
步骤
- 解bl锁会清除手机(恢复出厂设置)所有数据,记得提前备份好!!!
- 解锁首先要绑定的你的小米账号,点击【绑定账号和设备】(这个有的账号要绑定后三天才能解锁,有的绑定后马上就能解锁,具体以自己的情况为准)。
- 打开【设置】,【我的设备】里点击【全部参数】,连续点击【MIUI版本】几次,直到出现【你已处于开发者模式】提示。
- 【更多设置】里点击【开发者选项】,点击【设备解锁状态】。(2015年之后的小米设备才会加锁,之前的并没有。)
#坑/逆向/Android逆向/root/小米 解BL锁这里不要重复绑定::否则会重新计时重新等7天
2. 运行解锁工具
解锁工具:https://www.miui.com/unlock/index.html)
- 当前显示没有连接手机,需要进入fastboot模式。
- 在关机状态下同时按住
音量减键
和电源键
,直到出现FASTBOOT界面,进入fastboot。此时用数据线连接手机和电脑。
- 连接好后电脑会出现【已连接手机】,点击【解锁】。
- 解锁完成,会自动重启手机。
goole手机
1 2 3 4 5 6 7 | adb devices
adb reboot bootloader
fastboot devices
fastboot flashing unlock
fastboot reboot
adb reboot bootloader
|
刷系统
Magisk(ROOT)
magisk是什么?
- 对 Android 生态而言,
自定义
和稳定性
长久以来似乎都是鱼与熊掌不可兼得
,直到Magisk的横空出世。
- 它是由
topjohnwu
打造的开源框架软件,可以在修改系统功能的同时不会对系统本身造成破坏,但是Magisk更普遍的用途是作为获取和管理Root权限的工具。(在SuperSU
销声匿迹之后,Magisk
自然而然就成为了当前Android社区用来获取root
权限的主流方式)
- 在一些用户眼里,
Magisk
与另一款名 Xposed
的神器有着高度的相似性,部分群体当中甚至还存在着Magisk 框架
这样的说法。
- 二者的工作机制都是
拦截
。Xposed
通过劫持 Android 系统的 zygote
进程来加载自定义功能,这就像是半路截杀,在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。
- Magisk则另辟蹊径,通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(
Magisk 分区
)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。
- 得益于独特的挂载机制,使用 Magisk 时我们可以有针对性地隐藏 root,甚至暂时隐藏 Magisk 本身。当被挂载的Magisk分区
被隐藏
甚至被取消挂载
时,原有系统分区的完整性丝毫未损,玩需要root
验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的OTA
更新都没有任何问题。
- 因此严格来说 Magisk 可以被看作是一种文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架,这也是当前它在玩机社区广受认可和好评的原因所在。
- 由于挂载系统的存在,也让 Magisk 拥有了多样的模块化生态系统。
- Magisk既可以独立使用,只安装
面具模块
。也可以和Xposed框架
结合起来使用,发掘更多的功能。理论上两者功能可以相互替代,但由于两者侧重点不同以及模块开发难度等原因,Magisk更多用于对系统的修改,而Xposed更多用于对用户软件的修改
。
刷入Magisk面具
方式1:通过TWRP刷入Magisk
#坑/逆向/Android逆向/TWRP/ 进入bootloader模式后按音量+—切换到recovery模式,按Power键进入,如果在此之前还没有刷Twrp则会进入显示no commend的界面(如果此时强制开机会进入Safe Mode,和windows安全模式类似)::进入bootloader模式后按音量+—切换到recovery模式,按Power键进入,如果在此之前还没有刷Twrp则会进入显示no commend的界面,然后长按开机键不要松手再按一下音量上,即可进入官方recovery,然后选择重启,手机才会重启到正常系统上。
#坑/逆向/Android逆向/TWRP 联发科的手机用不了TWRP?::TWRP官网找不到机型适配的,可以自己编译,联发科芯片半开放好坑,还是不要折腾了
没有适配Redmi9A的TWRP : https://twrp.me/Devices/Xiaomi/
红米9刷入twrp : https://www.bilibili.com/read/cv12038803/
- 红米9和红米9A的区别:
- 处理器:红米9采用联发科Helio G80处理器,而红米9A采用联发科Helio G25处理器。Helio G80比Helio G25更快一些,具有更好的性能。
#坑/逆向/Android逆向/TWRP pixel手机没有单独recovery分区::需要先刷fastboot flash boot twrp-3.7.0_9-0-sailfish.img
临时进入TWRP,然后再刷zip包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | adb reboot bootloader
fastboot flash boot twrp-3.7.0_9-0-sailfish.img
adb sideload twrp-installer-3.7.0_9-0-sailfish.zip
adb push Magisk-v21.4.zip /sdcard/
adb reboot bootloader
adb shell
su
|
#坑/逆向/Android逆向/TWRP/ 刷入twrp前是A分区,然后好奇切换到B分区开机,确实没有系统无法开机。紧接着用fastboot命令切换到B分区,然后无限循环于twrp,无法开机::清空 ota
分区、 misc
、metadata
分区分区依然没有效果,直接刷原来boot.img恢复,暂时不需要搞Twrp了,可能是版本问题,有机会再试吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | fastboot getvar current-slot
fastboot -- set -active=a
fastboot getvar current-slot
adb shell
ls -l /dev/block/bootdevice/by-name/
ls -l /dev/block/bootdevice/by-name/ | grep misc
dd if = /dev/zero of= /dev/block/sdd1
ls -l /dev/block/bootdevice/by-name/ | grep metadata
dd if = /dev/zero of= /dev/block/sde5
reboot
fastboot flash boot boot_img /magisk_patched-23000_e2uhA .img
|
在 Android 7 之后,Google 引入了一种新的分区结构,称为 A/B 分区,并且在 Android 11 以后强制推行
方式2:安装Magisk Manager再通过修补boot.img刷入Magisk
- 下载对应手机型号对应版本的官方镜像
2. **下载安装Magisk Manager **
#坑/逆向/Android逆向/Magisk 用v23版本::(Magisk Manager 的团队被谷歌收编了,23以后的版本去掉模块在线安装
和MagiskHide
(隐藏Magisk避免被检测))
<!--SR:!2023-02-15,1,230-->
#坑/逆向/Android逆向/root/小米 Redmi9a手机是联发科芯片,用v23的magisk修不出来的img有问题::需要用更新的版本(v23之后的版本)的magisk(修补boot.img的时候,不要勾选选项-修补boot 镜像中的vbmeta
)。
topjohnwu/Magisk: https://github.com/topjohnwu/Magisk/releases/tag/v23.0
1 2 3 | F:\backup\1.windows\4.development_tools\2.IDE\Magisk>adb install F:\backup\1.windows\4.development_tools\2.IDE\Magisk\Magisk-v25.2.apk
Performing Streamed Install
Success
|
- 安装Magisk Manager 后,点击安装,选择并修补,选择boot.img文件
- 修补完成后会在Dowbload目录下生成.img文件,把这个文件从手机拷贝到电脑中
- 用adb的
fastboot.exe
工具把这个修后的.img
文件刷入手机
- 进入Fastboot:
- 方式1:关机状态下,同时按住
音量-键
和电源键,进入fastboot
模式,连接usb数据线
- 方式2:用
adb reboot fastboot
命令
- 刷入
.img
文件,重启手机
1 2 3 4 5 | D:\Android\Sdk\platform-tools>adb reboot fastboot
D:\Android\Sdk\platform-tools>fastboot flash boot F:\backup\1.windows\4.development_tools\2.IDE\Magisk\Redmi9a\magisk_patched-23000_25aFB.img
Sending 'boot' (65536 KB) OKAY [ 1.528s]
Writing 'boot' OKAY [ 0.837s]
Finished. Total time : 2.387s
|
#坑/逆向/Android逆向/root/小米 fastboot之后开不了机::可以刷回原本的boot.img
恢复。
5. (高通的cpu才需要)进入 Magisk Manager,选择安装-直接安装,才能将临时 root 转换为永久 root。
- 验证Magisk是否安装成功
1 2 3 | D:\Android\Sdk\platform-tools>adb shell
dandelion:/ $ su
dandelion:/
|
Magisk模块的安装
救砖模块
- Magisk虽然会自动禁用不兼容的模块,但是偶尔也会抽风,装错模块导致设备无法开机,也是家常便饭。
- 在安装救砖模块后, 模块检测到设备没有正常开启且Magisk没有自动禁用异常模块时,模块会依次尝试着禁用单个模块,禁用所有模块,直至进入安全模式(对恶意模块无能为力,刷入后轻则功能异常,重则设备成砖,所以请尽量选择
开源以及知名作者
的模块)
- 救砖模块:自动禁用失败>禁用单个模块>禁用所有模块>进入安全模式>正常开机
- 安装过程
Move Certificates
- 将用户证书移动到系统证书的根目录下(之后发布的
协议抓包
文章,再详细介绍安装)
Xposed框架
- Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以加载很多插件App(模块),这些插件App都有各自各种各样的功能。
EdXposed
- EdXposed和Xposed底层的API没有差别
- Xposed停止更新了(安卓10及其以后的版本不支持),作者将该项目移交给了EdXpose继续维护
安装EdXposedManager
还需要安装两个Magisk模块
Riru
- Riru 并不是单独一个Magisk模块,而是由国内独立开发者
Rikka
开发的一套
模块系列。Riru 神奇的地方在于,它部分地达成 Xposed
那样的功能,能够自定义到一部分的应用。
- Android 上所有正在运行的应用程序都是通过 Zygote 创造出来的,而 Riru 正是通过替换一个会被 zygote 进程加载的共享库,来达到劫持应用、让应用进程执行模块代码的目的。
- 那为什么到最后会变成
一套
模块呢?
- 是为了避免一群模块都去抢占那个要被替换的共享库,先派遣一个模块(也是 Riru Core 核心)去负责替换,再由那个核心模块提供 API 给其他模块,以让其他那些有需要模块都能正常工作、顺利生效。
- 从这样的原理看,想要使用 Riru 系列模块,
Riru Core
是必须安装的,然后需要用户按照自己的需求安装 Riru 系列的其他模块。
- 安装过程
EdXposed
EdXposed重启到用户空间
LSPosed
LSPosed
和EdXposed类似
LSPosed
是Edxposed的一个分支,相比于 EdXposed,它精简了许多, 也要比后者流畅的多、省电的多。
- Edxposed 面临着停更的风险,且稳定性欠佳,Lsposed 则可以保证长期更新,并会持续加入新的功能。
- 它并不是一个传统的Xposed管理器,它作为一个
Magisk模块
刷入设备运行,安装风险也比传统Xposed管理器小很多。
- LSPosed继承了Xposed的模块仓库,仓库内模块都是开源模块,安全性有了保证。
- LSPosed本身也与时俱进,使用了Material You设计语言,支持安卓12的Monet(莫奈)取色,更美观
- 模块可以针对
单独软件
开启稳定性更高,传统Xposed激活后会对所有应用生效,而LSPosed 激活后只对选中应用生效
不要为一个应用启用太多模块
,会拖累应用的运行速度,偶尔也会产生意想不到的
安装LSPosed
- 安装前,请确保你的手机满足以下条件
- 系统: Android 8.1-12
- 已安装
v21
以上版本的Magisk Manager
- Riru 模块
23+
- 在Magisk Manager 上安装 LSPosed 模块
#坑/逆向/Android逆向/Xposed/LSPosed Zygisk版的Lsposed版本需要Magisk开启Zygisk,Riru插件就不能用了,Riru版LSPosed 和Zygisk版的Lsposed哪个更好?:: @todo
Riru和Zygisk都是在安卓系统上注入代码的框架,可以用来实现一些系统级别的操作,如修改系统行为、hook应用程序、增强隐私保护等。
LSPosed是一个基于Riru框架的开源项目,旨在提供一个类似Xposed的框架来hook应用程序并实现类似于修改UI、增加权限、隐藏软件等功能。LSPosed目前支持Android 8.0及以上版本,可以在Magisk Manager中安装。
Zygisk版的Lsposed则是基于Zygisk框架的一个分支,提供了类似LSPosed的功能,但是它的目标是提供一个更加轻量级的框架,同时减少对系统的影响。Zygisk版的Lsposed仍然在开发中,目前仅支持Android 10及以上版本。
总的来说,LSPosed和Zygisk版的Lsposed都是用来hook应用程序和修改系统行为的框架,但它们的实现方式略有不同,使用时需要注意适用版本。
LSPosed模块(Zygisk版)下载地址 : https://github.com/LSPosed/LSPosed/releases
- 打开Magisk – 设置 – 开启 Zygisk,模块 – 从本地安装
- 重启设备,桌面新增
LSPosed
的APP。打开显示“已激活”则成功刷入。
- 安装LSpose模块,激活LSPosed模块,选择作用域
GitHub - shatyuka/Zhiliao: 知乎去广告Xposed模块: https://github.com/shatyuka/Zhiliao
1 2 3 | C:\Users\cisco>adb install F:\backup\1.windows\4.development_tools\2.IDE\LSPosed\Zhiliao_22.10.02.apk
Performing Streamed Install
Success
|
- 打开 LSPosed,点击 模块
- 找到需要激活的模块(这里以知了模块为例)
- 选择这个模块的作用域,比如知了模块的作用域就只有知乎
- 重启(可选,LSPosed 使用大部分模块不需要重启,有一部分可能需要)
系统备份与救砖
#坑/逆向/Android逆向/TWRP/救砖 救砖::@todo
#坑/逆向/Android逆向/ROM/备份系统 把配置好的手机系统环境备份起来。避免下一次还需重新装环境。::用Twrp
- 钛备份和 Swift Backup:
- 这些工具大都只能备份应用和数据,却无法直接给系统来一次
一键 Ghost式
的备份;
- 而且备份数据必须首先存放在本地才能继续导出或上传到云端,这也让存储空间不大的手机压力倍增
TWRP
(Team Win Recovery Project)是一个开源的第三方 Recovery 项目。它提供了一个支持触屏的界面,能够进行安装第三方固件、备份当前系统等等
- 进入Twrp-Backup,将系统备份存放在手机,以后需要的时候在进入Twrp-Restore,从手机上的备份文件中恢复系统
MT管理器
- MT管理器是安卓平台上的老牌经典神器,是一款功能强大的工具软件,拥有独具特色的双窗口文件管理和强大的APK编辑功能,让你可以在手机上高效地进行各种文件操作以及修改安卓软件。
- APK编辑功能,主要有DEX编辑,ARSC编辑,XML编辑,APK签名、APK优化、APK共存、去除签名校验、RES资源混淆、RES反资源混淆、翻译模式等。