【Android安全-Android逆向前期准备(下)】此文章归类为:Android安全。
本公众号分享的所有技术仅用于学习交流,如作他用所承受的法律责任一概与作者无关。如有错漏,欢迎留言交流。预计阅读全文耗时: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管理器 |
小米手机服务支持-小米商城 (mi.com):https://www.mi.com/c/service/download/index.html
BL锁
bootloader
的简称 就是开机引导程序 ,Bootloader锁,主要是在引导过程中对系统签名,内核签名及Recovery签名进行检验,如果签名不一致,即终止引导。#坑/逆向/Android逆向/root/小米 解BL锁这里不要重复绑定::否则会重新计时重新等7天
2. 运行解锁工具
音量减键
和电源键
,直到出现FASTBOOT界面,进入fastboot。此时用数据线连接手机和电脑。1 2 3 4 5 6 7 | adb devices adb reboot bootloader fastboot devices # 查看是否连接上 # fastboot oem unlock # 2015以前的设备 fastboot flashing unlock # 2015及其以后的设备,此时手机会进入解锁BL引导界面,我们使用音量下选择unlock BootLoader选项再按1次开机按键确定,手机立马会进入自动解锁BL状态,并且手机全部数据随之彻底清空,等到开机完成后解锁BL成功 fastboot reboot adb reboot bootloader # 查看手机是否解锁成功,屏幕下方显示Devices is UNLOCK即为解锁 |
自定义
和稳定性
长久以来似乎都是鱼与熊掌不可兼得
,直到Magisk的横空出世。topjohnwu
打造的开源框架软件,可以在修改系统功能的同时不会对系统本身造成破坏,但是Magisk更普遍的用途是作为获取和管理Root权限的工具。(在SuperSU
销声匿迹之后,Magisk
自然而然就成为了当前Android社区用来获取root
权限的主流方式)Magisk
与另一款名 Xposed
的神器有着高度的相似性,部分群体当中甚至还存在着Magisk 框架
这样的说法。拦截
。Xposed
通过劫持 Android 系统的 zygote
进程来加载自定义功能,这就像是半路截杀,在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。Magisk 分区
)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。被隐藏
甚至被取消挂载
时,原有系统分区的完整性丝毫未损,玩需要root
验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的OTA
更新都没有任何问题。面具模块
。也可以和Xposed框架
结合起来使用,发掘更多的功能。理论上两者功能可以相互替代,但由于两者侧重点不同以及模块开发难度等原因,Magisk更多用于对系统的修改,而Xposed更多用于对用户软件的修改
。#坑/逆向/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/
#坑/逆向/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 | # 1.下载TWRP: https://twrp.me/Devices/ # 选择对应型号的设备和相应版本的img镜像文件(注意区分美版和欧版,在手机Setting-System-About phone-监管标签进去可以看到MODEL,这个可以区分手机是美版还是欧版)。 adb reboot bootloader # fastboot flash recovery twrp-3.7.0_9-0-sailfish.img # 1.1 先临时进入TWRP fastboot flash boot twrp-3.7.0_9-0-sailfish.img # 此时让手机重启就会进入临时twrp界面,可满足简单操作,但重启会自动恢复官方recovery # 选择对应型号的设备和相应版本的zip文件,TWRP界面点击Advanced,再点击ADB sideload,直接滑动,手机处在等待刷入文件状态 # 电脑端执行adb sideload zzz.zip 回车启动(zzz.zip为你twrp的文件名) adb sideload twrp-installer-3.7.0_9-0-sailfish.zip # serving: 'twrp-installer-3.7.0_9-0-sailfish.zip' (~11%) adb: failed to read command: Success # 失败了,不要在虚拟机里面刷,用外面的物理主机刷就一次成功了 # 只需要root权限,可仅使用步骤1.1临时启动[TWRP](http://www.romleyuan.com/lec/read?id=97),刷好面具ROOT后直接开机即可 # 1.2下载Magisk并push到手机(注意是Magsik不是Magisk Manager,从v22.0开始Magisk(核心组件)和 Magisk Manager(配套应用程序)不再分开发布了):https://github.com/topjohnwu/Magisk/releases?page=2 adb push Magisk-v21.4.zip /sdcard/ adb reboot bootloader # 进入bootloader模式后按音量+—切换到recovery模式,按Power键进入,如果在此之前还没有刷Twrp则会进入显示no commend的界面(如果此时强制开机会进入Safe Mode,和windows安全模式类似),然后长按开机键不要松手再按一下音量上,即可进入官方recovery # 3. 首先滑动Swipe to Allow Modifications进入TWRP主界面,然后点击Install,默认会进入/sdcard # 选择Magisk-v21.4.zip进入Install Zip界面,滑动Swipe to confirm Flash滑块开始刷Magisk # 直到出现Root System按钮,点击重启,重启成功后会多一个Magisk Manager app # 4. 测试root是否成功 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 # current-slot: b # Finished. Total time: 0.017s fastboot -- set -active=a # Setting current slot to 'a' OKAY [ 0.067s] # Finished. Total time: 0.076s fastboot getvar current-slot # current-slot: a # Finished. Total time: 0.006s # 清空 `fota` 分区可以用于删除设备上存储的OTA更新数据,这可能是为了解决更新过程中的问题或者准备进行新的更新。 # 清空 `misc` 分区可以用于重置系统配置,这可能是为了修复启动问题,或者确保系统在特定的初始状态下启动。 # `metadata` 分区用于存储 OTA 更新的状态信息和标志。也要清掉 adb shell ls -l /dev/block/bootdevice/by-name/ # 发现没有fota分区 ls -l /dev/block/bootdevice/by-name/ | grep misc # lrwxrwxrwx 1 root root 15 1970-02-25 23:50 misc -> /dev/block/sdd1 dd if = /dev/zero of= /dev/block/sdd1 ls -l /dev/block/bootdevice/by-name/ | grep metadata # lrwxrwxrwx 1 root root 15 1970-02-26 00:22 metadata -> /dev/block/sde5 dd if = /dev/zero of= /dev/block/sde5 reboot # 依然没有效果,直接刷原来boot.img恢复,不搞Twrp了,可能是版本问题,有机会再试吧 fastboot flash boot boot_img /magisk_patched-23000_e2uhA .img |
在 Android 7 之后,Google 引入了一种新的分区结构,称为 A/B 分区,并且在 Android 11 以后强制推行
boot.img
放入手机boot.img
文件提取出来,放到手机里面去Redmi 9系列稳定版官方ROM下载帖(1月24日更新): https://web.vip.miui.com/page/info/mio/mio/detail?postId=20980945&app_version=dev.20051
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 |
fastboot.exe
工具把这个修后的.img
文件刷入手机音量-键
和电源键,进入fastboot
模式,连接usb数据线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。
1 2 3 | D:\Android\Sdk\platform-tools>adb shell dandelion:/ $ su dandelion:/ # # 成功切换到root用户下,就说明已经root成功了 |
开源以及知名作者
的模块)协议抓包
文章,再详细介绍安装)名称 | 地址 | 支持版本 | 是否免root |
---|---|---|---|
xposed | https://github.com/rovo89/Xposed | 2.3-8.1 | 否 |
EDXposed | https://github.com/ElderDrivers/EdXposed | 8.0-10 | 否 |
LSPosed | https://github.com/LSPosed/LSPosed | 8.1-13 | 否 |
VirtualXposed | https://github.com/android-hacker/irtualXposed | 5.0-10.0 | 是 |
太极 | https://www.coolapk.com/apk/me.weishu.exp | 5.0-13 | 是 |
两仪 | https://www.coolapk.com/apk/io.twoyi | 8.1-13 | 是 |
天鉴 | https://github.com/Katana-Official/SPatch-Update | 6-10 | 是 |
Rikka
开发的一套
模块系列。Riru 神奇的地方在于,它部分地达成 Xposed
那样的功能,能够自定义到一部分的应用。一套
模块呢?Riru Core
是必须安装的,然后需要用户按照自己的需求安装 Riru 系列的其他模块。RiruXposed
和EdXposed
,要安装Riru v25.4.4
Release v25.4.4 · RikkaApps/Riru (github.com)LSPosed
和EdXposed类似LSPosed
是Edxposed的一个分支,相比于 EdXposed,它精简了许多, 也要比后者流畅的多、省电的多。Magisk模块
刷入设备运行,安装风险也比传统Xposed管理器小很多。单独软件
开启稳定性更高,传统Xposed激活后会对所有应用生效,而LSPosed 激活后只对选中应用生效不要为一个应用启用太多模块
,会拖累应用的运行速度,偶尔也会产生意想不到的v21
以上版本的Magisk Manager 23+
#坑/逆向/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
LSPosed
的APP。打开显示“已激活”则成功刷入。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 |
#坑/逆向/Android逆向/TWRP/救砖 救砖::@todo
#坑/逆向/Android逆向/ROM/备份系统 把配置好的手机系统环境备份起来。避免下一次还需重新装环境。::用Twrp
一键 Ghost式
的备份;TWRP
(Team Win Recovery Project)是一个开源的第三方 Recovery 项目。它提供了一个支持触屏的界面,能够进行安装第三方固件、备份当前系统等等更多【Android安全-Android逆向前期准备(下)】相关视频教程:www.yxfzedu.com