Android逆向前期准备

关注菜狗,一起进步!

本公众号分享的所有技术仅用于学习交流,如作他用所承受的法律责任一概与作者无关。如有错漏,欢迎留言交流。预计阅读全文耗时:95min

《java编程思想(第5版)》Bruce Eckel
《Android Studio开发实战从零基础到App上线(第三版)》 欧阳燊
《第一行代码Android第2版》郭霖
《ARM汇编与逆向工程 蓝狐卷基础知识》MariaMarkstedter
《安卓Frida逆向与抓包实战》陈佳林
《安卓Frida逆向与协议分析》陈佳林
《IDA Pro权威指南(第2版)》Chris Eagle
《Frida Android SO逆向深入实践》陈佳林
《unidbg逆向工程原理与实践》陈佳林

目录

目录思维导图

一、前置知识
├── 为什么学习安卓逆向
└── 学习安卓逆向需要准备什么
    ├── 学安卓逆向的前置知识
    └── 硬件配置

二、 打造属于自己的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管理器

一、前置知识

为什么学习安卓逆向

  1. 学习研究
  • 去广告
  • 破解内购
  • 自动化
    • 臧航准备网自动登陆
    • 车智赢自动登陆
    • 大姨妈自动登陆
    • 京东价格监控
    • 酒仙网自动登陆,预约茅台
    • 大商天狗自动登陆,预约茅台
    • 司小宝自动登陆
  • 刷播放量
    • 刷B站完播率,批量注册B站账号
  • 获取评论
    • 抓取得物的推荐区的评论
    • 抓取抖音评论
  • 根据关键词搜索商品
    • 识货搜索型号,获取到尺码和价格
    • 唯品会搜索商品
    • 知乎搜索

学习安卓逆向需要准备什么

学安卓逆向的前置知识

  • 逆向分为:安卓逆向,win逆向
    • 逆功能:破解内购道具,去广告等等
    • 逆协议:比如,某APP注册的时候有一个Sign的加密。这时候app逆向逆的是协议(让爬虫爬到app的数据)
      需要学习的内容:
  1. 环境搭建
    • java开发环境
    • Android开发环境
    • c开发环境
    • python开发环境
    • JavaScript开发环境
    • 真机(解BL锁,刷Magisk,装Xpose)
    • 其他工具
  2. Android应用开发
    • java:基础语法,面向对象、接口,反射机制等。各类常见加密算法的java层实现和破解方法
    • 四大组件( activity,service,provider,broadcast),界面控件,消息事件处理、网络通信等
  3. java层逆向
    • 回编译(AndroidKiller)
    • smali汇编
    • 静态逆向分析(jadx)
    • 动态调试(jeb、AndroidStudio)
  4. HOOK与注入技术框架:
    • Xposed(java、Android Studio)
    • Frida(python、JavaScript、pycharm)
  5. 加密与编码
  6. APP协议分析(抓包):
    • hHTTP/S、TCP、Websocket详解
    • 各种反抓包原理及破解方法
  7. 反调试与反反调试、加固技术
    • java层反调试反反调试
    • native层反调试和反反调试
    • XPosed、Frida特征检测与绕过
    • 加壳与脱壳
    • 魔改LSPosed
    • 设备指纹对抗
  8. native层逆向
    • C语言:数据类型,指针,常见加密算法native层实现。
    • NDK开发(linux下的so类似win下的dll`)
    • ARM汇编(寄存器,指令码,立即值,常量)。
    • 静态分析、动态调试(双IDA调试)。
    • unidbg 模拟执行
    • so层算法还原
    • 综合实战
    • [[llvm混淆]]
  9. 定制rom:
    • Android源码编译
    • root检测绕过

硬件配置

  • 电脑: 主流电脑配置即可,内存尽量大,主频尽可能高
    • 如果有条件的话,电脑安装虚拟机装linux系统
  • 手机: 安卓手机
    • 如果有条件上谷歌的亲儿子(nexus或者pixel),国产的手机推荐红米9A(经济实惠,缺点就是cpu是arm32的,未来无法调试arm64的程序,入门足够了)
  • 暂时没有真机可以先用模拟器一段时间
    • 夜神模拟器(最新支持Android 9)、雷电模拟器、逍遥模拟器
    • 但尽量还是使用真机,安卓模拟器存在兼容性的问题,有些app无法在模拟器上运行,因为模拟器是基于x86的架构,而有些app只认v7或者v8架构的cpu。

二、 打造属于自己的anroid逆向环境

1. 开发环境(windows)

  • 开发系统可以是Win10linux(kali或者ubuntu)、mac

java 开发环境(学习Java,Android开发时候用)

JDK
  • JRE(Java Runtime Envrionment ,Java 运行时环境)
    • 含JVM和运行必备的类库。
    • 电脑上想要运行java程序,就必须安装JRE
  • JDK,( Java Development Kit ),Java开发工具。
    • JRE 和 开发必备的工具(编译工具javac.exe 和 运行工具java.exe)
    • 想要开发Java应用程序,就必须安装JDK

JDK下载地址: https://www.oracle.com/java/technologies/downloads/#jdk18-windows

  • jdk-19_windows-x64_bin.exe 必须去安装 否则无法运行依赖Java环境的软件或者工具
  • 配置环境变量
    • JAVA_HOME:jdk安装的目录
    • CLASSPATH.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面是有一个点的)
    • path:添加%JAVA_HOME%\bin
  • 验证配置环境变量是否生效:打开cmd,输入java --versionjavac
IDEA

下载地址: https://www.jetbrains.com/idea/download/#section=windows

Android开发环境(root、Android正向开发、编写Xposed插件的时候用)

Android Studio
安装Android Studio

下载地址: https://developer.android.google.cn/studio/

  • 要安装Android studio首先要配置好jdk环境

  • 安装Android studio的过程中会下载SDK

创建工程测试一下
  • MininumSDK先保持默认,后续有需要可以手动修改minSdkVersion的字段



    #坑/逆向/Android逆向/AndroidStudio/模拟器 HAXM的插件只支持Intel的cpu,只有安装这个插件才可以运行Android Studio 自带的模拟器。该插件不支持AMD的cpu(AMD的cpu只能使用Genymotion模拟器,首先需要安装virtualBox虚拟机,然后再安装Genymotion模拟器,有需要请自行百度)。
  • 选择对应的设备,运行
  • 电脑实时显示手机画面,用电脑的鼠标和键盘控制手机

QtScrcpy : https://gitee.com/Barryda/QtScrcpy

SDK
  • SDK(software development kit,软件开发工具包)。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Android专属的软件开发工具包。
SDK目录结构

  1. .downloadlntermediates:看名字,像是下载文件时的临时目录
  2. .temp:下载文件时的临时目录
  3. build tools
  • 编译工具目录这里保存着一些Android开发常用的工具,例如adb、aidl等等。
    • aidl.exe:把.aidl 接口转换成java接口
    • dexdump.exe (逆向调试工具) : dump devlik中间代码
    • aapt.exe(Android Asset Packaging Tool):编译应用程序的资源文件(包括AndroidManifest.xml和你的Activities的xml文件),生成R.java文件,这样你就可以从你的java代码中引用资源。
    • dx.bat(编译脚本):将.class中间代码转化为dvlik中间代码,所有经过java编译的生成.class文件都需要此工具进行转换,最后打包进apk文件中。
  • 当创建Android项目(构建项目)的时候会用到这个包。在创建项目的时候如果没有此包会报错。(随着SDK版本的迭代,编译工具也会有相应新版本,建议使用最新的编译工具)
  1. cmake:Android SDK 的 CMake 的默认版本是3.10.2。Cmake是用来makefile的一个工具,读入所有源文件之后,自动生成makefile。
  2. emulator:这里存放的是一些安卓模拟器
  3. extras:该文件下存放了Google提供的USB驱动,Intel提供的硬件加速附件工具包。(后期存放了Android Support兼容包,使用兼容包版本时最好与SDK版本保持一致)
  4. fonts:存放一些字体文件
  5. licenses:market_licensing作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
  6. ndk:ndk(Native Development Kit,跟sdk差不多的),是它也是一个开发工具包。可以让开发者在 Android 应用中使用 C 和 C++ 代码。
  7. patcher:增量更新,用于更新记录。
  8. platforms
  • 里面是根据APILevel划分的SDK版本/平台,这个文件夹是SDK里面最重要的文件(每个平台的SDK真正的文件)
  • 以Android6.0为例,进入后有一个android-23的文件夹,android-23进入后是Android6.0 SDK的主要文件
    • data:保存着一些系统资源,
    • skins:Android模拟器的皮肤,
    • templates:是工程创建的默认模板,
    • android.jar:是该版本的主要framework文件。
  1. platform-tools
  • 该文件夹下放了Android平台的相关开发和调试工具,比如adb.exesqlite3.exe等。
  • 这里和platforms/tools文件夹有些重复,主要是从android2.3开始这些工具被划分为通用了。
  1. skins:Android模拟器的皮肤
  2. source:这个文件夹下面存放的是Android的源代码。
  3. system-images:存放的是创建Android虚拟机时的镜像文件(已经编译好的镜像文件,模拟器可以直接加载)。从android-14开始将模拟器镜像文件整理在这里(原来放在platforms下)
  4. tools
  • 这个文件夹下存放了大量Android开发、调试的工具。包括测试、调试、第三方工具。模拟器、数据管理工具等。
    • ddms:用于启动Android调试工具;
    • logcat:Logcat 能够记录 Android 系统日志,以及 Android 应用的日志(如崩溃报告、错误消息等)。通过使用 Logcat,开发人员可以快速了解应用程序在设备上运行时的情况,以找到并解决问题;
    • draw9patch:用于创建可缩放的图像文件。它的名称来源于图像的左上角和右下角有九个像素的宽带,这些像素告诉 Android 如何缩放图像以适应不同的屏幕尺寸;
    • monkeyrunner:是一个不错的压力测试应用,模拟用户随机按键;
    • mksdcard:模拟器SD映像的创建工具;
    • emulator:Android SDK模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器;
    • traceview:可以读取 trace 文件,这些文件包含关于 Android 应用运行时间的详细信息。通过使用 TraceView,开发人员可以找到代码中的性能瓶颈,以优化应用的速度和效率。
  1. .knownPackages:未知
  2. AVD Manager:是Android SDK中的一个工具,用于管理模拟器配置(Android Virtual Devices,简称AVD)。
  3. SDK Manager:Android SDK 中的 SDK Manager 是 Android 软件开发工具包(SDK)的一个组件,提供了访问开发 Android 应用所需的工具和软件包的途径。SDK Manager 允许开发者下载并安装最新的 Android SDK 组件,例如 Android 平台工具、平台和附加组件。这可以帮助开发者确保他们的开发环境使用最新的工具和 API,以构建高质量的 Android 应用。
SDK版本管理
  • 通过SDK Manager查看Android系统对应的SDK版本,根据手机Android系统的版本下载对应版本的SDK,多个版本用SDK Manager管理。
  1. 方式1
  • Android SDK Manager已经内置于Android Studio中,可以使用Android Studio中的Android SDK Manager。
  1. 方式2
    #坑/逆向/Android逆向/AndroidStudio/SDK SDK Manager.exe缺失::补充SDK Manager.exe,然后替换tools,重装jdk,重新配置jdk环境变量。
  • 也可以使用SDK自带的Android SDK Manager,如果SDK缺失Android SDK Manager,可以去下面网站下载SDK Tools: https://www.androiddevtools.cn/
    • =只把SDK Manager.exe拷贝到自己的SDK下,会发现SDK Manager.exe打不开,黑框一闪而过=。
    • 对比两个SDK可以发现:与后面新下载的SDK相比,安装Android studio时下载的SDK多了一个emulator文件夹是从后面新下载的SDK的tools拆分出来的
    • 而且tools文件里边还缺少了很多重要文件,有的被放到别的文件夹,有的直接被删除了,比如ddms.batdraw9patch.bat等这些重要的工具。
  • 解决办法:用后面新下载的SDK的tools文件夹替换自己的SDK的tools文件夹 (作者亲测这一步不可省略,不然后面解决了环境变量,SDK Manager.exe也还是会闪退。),再尝试打开一下SDK Manager.exe,发现还是闪退!
  • 原因是:SDK Manager.exe 通过调用 android-sdk-windows\tools\lib\find_java.bat 来确认 java.exe 的路径。
    • 调用android-sdk-windows\tools\lib\find_java.bat就提示找不到jdk,但环境变量是没问题的。
    • 解决办法:只能重新卸载jdk,重启电脑后,重新安装jdk
  • 现在SDK Manager.exe可以运行成功了,ddms 也没问题
  1. 建议安装的Packages
adb

Adb(android debug bridge):android调试桥是一个用于管理 android 终端(或者模拟器)状态的工具。

  1. adb和 SDK的关系
  • SDK内置了adb。SDK的platform-tools目录下包含通用工具,比如adb、和aapt、aidl、dx等文件
  1. adb的配置
  • SDK目录下的platform-tools文件夹的路径添加到系统变量Path中去
  • 打开cmd,输入adb,验证环境变量是否设置成功
  1. adb devices连接不上安卓设备
  • 打开设备管理器-便携设备-属性-记录VIDPID
  • 查找文件夹.android,在该文件夹下找到文件adb_usb.ini,如果找不到可以新建一个,在adb_usb.ini文件里添加设备的VIDPID
  • 打开cmd,输入adb kill-server|adb start-server|adb devices重启adb


  • 若如上还不能解决问题,就需要检查一下pc端的adb的版本。
    • 若pc端的adb版本使用1.0.31或者1.0.32的版本,当连接android6.0版本之后的手机经常会出现adb命令不通情况。
    • 建议把pc端的adb版本升级到1.0.36及其以后的版本。
    • 方法是:下载新的adb包,替换android.sdk/platfrom-tools下面的adb.exeAdbWinApi.dllAdbWinUsbApi.dll三个文件,执行adb start-server
      #坑/编程语言/shell/adb adb devices没有显示设备::如果还是不能解决问题,==重启电脑可以解决99%的问题 ==,发现USB用于传输文件,adb devices一下就发现设备了
  1. WiFi ADB
  • 应用场景:
    • 平常一般都是直接通过 USB 线或者 Type C线的方式连接,来完成日常的开发和调试种开发模式。
    • 当电脑的 USB 口比较少,有多台手机的时候,线束比较杂乱,不够优雅。这时候可以使用adb WiFi 调试模式。
      a. 方式1:通过adb打开
  • 通过以下几个步骤即可完成(开始这些配置之前先确保你的 adb 环境是配置好的):
      1. 确保 Android 手机和电脑连接的是同一局域网的 WiFi;
      1. 通过 USB 线连接 Android 手机(需要usb数据线连接手机进入adb shell);
      1. 执行以下命令
C:\Users\cisco>adb devices
List of devices attached
KBVO8******S8TYT        device
0bb39******9dcc8        device

# 注意: 如果有多个手机连接在电脑上,需要用 -s "serial_number" 参数指定目标手机
# 设置手机监听端口 5555 上的 TCP/IP 连接:
C:\Users\cisco>adb -s 0bb39******9dcc8 tcpip 5555  
restarting in TCP mode port: 5555    # 在命令行中看到 TCP mode port: 5555 就表示监听成功:
     
# 进入手机设置-wifi,查看手机所连接的网络的ip地址
# 通过 connect 命令和 IP 地址以及端口号连接到目标手机
C:\Users\cisco>adb connect 172.20.10.13:5555
connected to 172.20.10.13:5555       # 当看到 connected to xxx:5555 的提示语就表示连接成功

# 拔掉USB线,验证一下,看到如下提示语,说明已成功打开了adb WiFi
C:\Users\cisco>adb devices
List of devices attached
KBVO8******S8TYT        device
172.20.10.13:5555       device

# 输入adb命令操作设备,当有多个设备连接了电脑,导致adb无法识别操作具体哪台设备
C:\Users\cisco>adb shell
adb.exe: more than one device/emulator

# 执行命令adb -s 172.20.10.13:5555 shell,进入指定设备操作
C:\Users\cisco>adb shell
hammerhead:/ $ exit

# adb connect断开
C:\Users\cisco>adb disconnect
disconnected everything

C:\Users\cisco>adb devices
List of devices attached

# 结束adb服务
C:\Users\cisco>adb kill-server

C:\Users\cisco>adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
KBVO854LKBWS8TYT        device

# 通过 connect 命令和 IP 地址以及端口号重新连接到目标手机
C:\Users\cisco>adb connect 172.20.10.13:5555
connected to 172.20.10.13:5555

b. 方式2:通过 as的ADB WiFi Connect插件打开

  • adb 无线连接每次都得经历那些步骤,有点繁琐,安装这个插件直接在 Android Studio 中直接鼠标点点的快速方式来完成

  • c. 方式3:通过ADB WiFi(app)打开
  • ADB WiFi(com.rair.adbwifi) - 5.1.5 - 应用 - 酷安 (coolapk.com)
  • 好处:
    • ADB WIFI可以帮助您在没有数据线的情况下,电脑通过adb命令连接您的手机。(不需要usb数据线连接手机进入adb shell,ADB WIFI apk已经帮我们执行了执行shell命令adb -s serial_number tcpip 5555 )
    • 不用的时候关闭,省电一点?

C 开发环境(so层逆向的时候用,直接输出到Android Studio 的logcat上,不需要安装新的环境了)

  • vscode
  • vs2019
  • gcc

python 开发环境(编写爬虫、Frida的时候用)

Python

https://www.python.org/downloads/

  • 建议安装python3.8版
    • 如果你现在电脑上只安装了python3.9,也可以再安装一个python3.8,Python支持多版本共存。
  • 把python添加到系统环境变量path里面
  • 验证配置的环境变量是否生效:打开cmd,输入python
安装PyCharm

https://www.jetbrains.com/pycharm/download/#section=windows
破解激活请百度

Javascript 开发环境(学习js、Frida、js逆向的时候用)

chrome浏览器

https://www.google.cn/chrome/

nodejs

nodejs: https://nodejs.org/zh-cn/download/

  • 下载安装nodejs

  • 配置node系统环境变量
  • 验证配置的环境变量是否生效:打开cmd,输入node --version
pycharm(专业版才支持js)+nodejs插件
  • 安装插件

    #坑/编程语言/python/pycharm 插件失效::安装插件记得点应用 才会生效
  • 编辑配置
  • 运行js代码测试一下

其他工具

AndroidKiller
  • 虽然APK属于压缩文件,但是APK包中的AndroidManifest.xml等文件无法通过直接解压的方式获取内容,需要通过Apktool工具进行反编译。
  • Android Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站 式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。
配置AndroidKiller
  1. 先确定安装好JDK
  2. 配置Androidkiller

下载地址:https://github.com/liaojack8/AndroidKiller
下载地址: https://www.52pojie.cn/thread-319641-1-1.html


3. 更新Apktool

下载地址: https://ibotpeaches.github.io/Apktool/

更新smali插桩插件
  • 在逆向分析APP时,有时需要插入smali代码,打印日志信息、记录方法调用流程,或者是添加弹窗、加载so库等,这些代码都是固定的,再将其封装成一个个插件来使用。
  • 打开AndroidKiller安装包所在位置,找到cfgs文件夹下的injectcode文件夹,将里面的插件删除,替换成新的injectcode
apktool

下载地址: https://ibotpeaches.github.io/Apktool/

  • dex,apk→>smali→java
    • 开源
    • 反编译apk
    • 支持修改后再打包
    • 签名
Jadx

下载地址: https://github.com/skylot/jadx/releases

  • dex,apk→>smali→java
  • jadx是一款功能强大的反编译工具,可以通过点击代码进行跳转,除反编译外,提供的主要功能如下
    a. 提供多种查找功能。
  • 通过Navigation即可打开搜索功能,可以选择搜索指定的类,方法,属性,代码,文件,甚至是注释查看类变量或者方法使用情况
    b.查看类,变量或者方法使用情况
  • 直接选中对应的类、变量或者方法,然后点击右键选择查找用例即可
    c. 反混淆功能
  • 在打包发布一个apk之前都会对其代码进行混淆加密比如用无意义的短变量去重命名类、变量、方法,以免代码被轻易破解泄露。为了代码的易读性,可以对代码进行反混淆。
    d. 添加注释
  • 选中代码中对应的位置之后,点击右键选择添加注释即可
    e. 反编译结果汇总
  • 通过查看Sumary文件,可以了解反编译结果的汇总信息
    f. 能针对.apk,.zip,.dex,.jar等格式的文件进行反编译。
  • Jadx dex->smali->java
    • 开源,综合了apktool+jd-gui,耗时,无法修改、回编译(重新打包)
JEB
  • JEB dex,apk→>smali→java
    • 反编译能力极强,高容错,收费

官网: https://www.pnfsoftware.com/
破解版:链接: https://pan.baidu.com/s/1dy140l1oPzeJdcnDxVYs_g?pwd=z3s1 提取码: z3s1

Frida安装配置(windows)
电脑端配置
  1. 安装Python环境
  • 建议在 python3.8版 本上进行操作(其他python版本使用Frida会存在一些问题)。
    • 如果你现在电脑上只安装了python3.9,也可以再安装一个python3.8,Python支持多版本共存。
  • 把python添加到坏境变量path里面
  1. 安装PyCharm

https://www.jetbrains.com/pycharm/download/#section=windows

  1. 安装frida模块
  • 虚拟环境,模块都安装到虚拟环境中去,项目之间隔离,随便造。而且有些app需要特定的Frida才能Hook上
    • 创建一个文件夹,PyCharm创建项目的时候选这个这个文件夹作为虚拟环境,之后在这个虚拟环境上安装frida模块,这样以后需要用到Frida的项目都可以选择这个虚拟环境,这样就不需要每次创建项目的时候都重新安装frida模块
python                   # 打开Py输入命令:
pip install frida        #  默认安装最新版本,python3以上才能使用,有可能失败,安装提示下载,然后再执行命令重新安装
# pip install frida -i https://pypi.douban.com/simple 如果下载速度慢,可以用国内源,这个是豆瓣源
pip install frida-tools  # CLI tools 默认会根据Frida版本,安装与之匹配的最新版本frida-tools
# npm install frida      # Node.js使用这个命令

pip uninstall frida      # 如果最新版本有问题,可以卸载python模块
pip uninstall frida-tools

pip install frida==15.2.2 # 要安装指定版本
pip install frida-tools==11.0.0 # frida-tools版本要和frida相对应,默认会根据Frida版本,安装与之匹配的最新版本frida-tools。如果需要安装指定具体的版本,可以访问https://github.com/frida/frida,选择好frida版本,对应的frida-tools会在同一个目录下,可以看到此时的版本号


4. 智能api提示 @todo

手机端配置
  • 把frida-server放入手机,并改权限


#坑/逆向/Android逆向/Magisk : adb shell 用su切换不了根用户,是因为Magisk没有给shell授权

frida --version    # 查看电脑端的frida版本信息
adb shell  getprop ro.product.cpu.abi  # 查看手机cpu架构
# armeabi-v7a(32位ARM)
# arm64-v8a  (64位ARM)
# x86        (32位x86)
# x86-64     (64位x86)

# frida-server下载地址:https://github.com/frida/frida/releases
# 下载安装frida server版本和`电脑端的frida版本`对应,cpu架构要和`设备cpu架构`对应
# 注意要解压
adb push D:\frida-server-16.0.8-android-arm\frida-server-16.0.8-android-arm  /data/local/tmp/ # 把frida拷贝到手机的/data/local/tmp/目录下,在Android中,使用adb push命令推送文件到data目录一般需要root权限,但是/data/local/tmp/这个目录并不需要root权限,所以一般把文件push到测试机的/data/local/tmp目录下
adb shell chmod 777 /data/local/tmp/frida-server-16.0.8-android-arm  # 可以直接adb shell下用命令改,也可以使用MT管理器修改
adb shell ls -l /data/local/tmp/frida-server-16.0.8-android-arm 
-rwxrwxrwx 1 shell shell 21414856 2022-12-15 19:12 /data/local/tmp/frida-server-16.0.8-android-arm
测试
  1. 启动frida-server,没有任何回显报错信息,就是启动成功了
adb shell
su
./data/local/tmp/frida-server-16.0.8-android-arm  # 启动frida
# 如果有报错可能是手机root不彻底,防火墙没有关闭
# 也有可能是frida-server版本不对


sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64                                                                                           
{"type":"error","description":"Error: invalid address","stack":"Error: invalid address\n    at Object.value [as patchCode] (frida/runtime/core.js:207:1)\n    at ln (frida/node_modules/frida-java-bridge/lib/android.js:1209:1)\n    at pn.activate (frida/node_modules/frida-java-bridge/lib/android.js:1275:1)\n    at mn.replace (frida/node_modules/frida-java-bridge/lib/android.js:1323:1)\n    at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1185:1)\n    at Function.set [as implementation] (frida/node_modules/frida-java-bridge/lib/class-factory.js:1099:1)\n    at installLaunchTimeoutRemovalInstrumentation (/internal-agent.js:424:24)\n    at init (/internal-agent.js:51:3)\n    at c.perform (frida/node_modules/frida-java-bridge/lib/vm.js:12:1)\n    at _performPendingVmOps (frida/node_modules/frida-java-bridge/index.js:250:1)","fileName":"frida/runtime/core.js","lineNumber":207,"columnNumber":1}

sailfish:/ # getenforce
Enforcing
sailfish:/ # setenforce 0
sailfish:/ # getenforce                                     Permissive
sailfish:/ # ./data/local/tmp/frida-server-16.1.8-android-arm64


2. 进行端口转发

# Failed to enumerate processes: unable to connect to remote frida-server 如果hook的时候后续出现者错误,重新端口转发即可
adb forward tcp:27042 tcp:27042 # 将PC端的27042端口收到的数据,转发给到手机中27042端口。但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:
# 1.在手机端,建立一个端口为27042的server,并打开server到监听状态。(adb forward tcp:27042 tcp:27042 可以在步骤1之前执行)
# 2.在PC端,建立一个socket client端,连接到端口为27042的server上。
# 这两个步骤有先后顺序,步骤1要先执行。

# PC端应用               手机端应用
#  	 |                    |
#  (1)                 (3)   
#    |                    |
# PC端server           手机端server
#    |                    |
#  (1)                 (3)
#    |                    |
# adb.exe ----(2)---- 手机端adbd进程
# PC端的应用与手机端应用之间传输数据的过程:
#(1)`PC端应用`将数据发送给端口为27042的`PC端server`(`adb.exe`创建的)
#(2)`PC端adb.exe`将数据转发给`手机端adbd进程`(通过USB传输)
#(3)`手机端adbd进程`将数据发送给端口为27042的`手机端server`(`手机端应用`创建的)
# 传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。

# adb forward --list  查看当前建立的转发
# adb forward --remove tcp:27042 删除建立的转发
  1. Hook
frida-ps -U	 # 验证一下frida是否使用正常
# frida -U -f com.che168.autotradercloud --no-pause


#坑/逆向/Android逆向/Frida/环境 frida-ps -U报错::是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决

(.venv) E:\Share\Source\repos\crawler\7chezhiying>frida-ps -U
# Failed to enumerate processes: this feature requires an iOS Developer Disk Image to be mounted; run Xcode briefly or use ideviceimagemounter to mount one manually
# 是因为电脑连接了ipad,导致了这个问题,断开ipad问题解决

#坑/逆向/Android逆向/Frida/环境 frida-ps -U报错`usage: frida [options] target
frida: error: argument -p/–attach-pid: invalid parse_target value: ‘s’::怀疑跟Frida的版本有关系,Frida16.0.11才出现这个问题
#坑/逆向/Android逆向/Frida/环境 frida-server掉了,再启用时报错::尝试移除端口转发,依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试

adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use  可能是端口被占用,尝试移除端口转发
adb forward --list
# KBVO854LKBWS8TYT tcp:27042 tcp:27042  
adb forward --remove tcp:27042

adb shell "su -c ./data/local/tmp/frida-server-16.0.8-android-arm"
# Unable to start: Error binding to address 127.0.0.1:27042: Address already in use 依旧无法重新启动,可能是Frida-server进程还在跑,kill掉试试
adb shell
su
ps -e | grep frida
# root         32367   513   41956  22948 poll_schedule_timeout 0 S frida-server-16.0.8-android-arm
kill -9 32367
ps -e | grep frida
./data/local/tmp/frida-server-16.0.8-android-arm
IDA Pro

下载地址: https://www.hex-rays.com/
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1584115&highlight=ida

  • so->arm->c
  • Natvie反编译工具
  • 当然不止so库 ,DLL同样可以反编译
  • 强大,收费
不常用
Jd-Gui

下载地址: https://github.com/java-decompiler/jd-gui

  • dex->jar→>java
  • JD-GUI是一款功能强大的JAVA反编译工具,支持对整个Jar文件进行反编译,可以通过点击代码进行跳转
dex2jar

下载地址: https://sourceforge.net/projects/dex2jar/files/

  • dex->jar→>java
  • 将dex文件还原成为jar文件;
  • 将dex文件还原成为smali文件;
  • 其他一些命令行很少用
  • Dex2jar+jd-gui
    • 反编译能力弱,抗干扰能力弱
enjarify

下载地址: https://github.com/google/enjarify

  • dex->jar→>java
  • 可直接将apk文件还原成为jar文件,也可以和dex2jar一样,直接操作某个dex。这是Google出品的一个逆向分析工具,从反编译成jar包的流程来说,要比dex2jar方便得多
baksmali

下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

  • baksmali dex->smali
dnSpy
  • 下载地址: https://github.com/dnSpy/dnSpy
  • dnSpy是一个调试器和.NET程序集编辑器。即使没有任何可用的源代码,您也可以使用它来编辑和调试程序集。主要特点:
    • 调试.NET和Unity程序集
    • 编辑.NET和Unity程序集
    • 明暗主题
Bytecode-Viewer

编辑器

类UNIX模拟环境

http://www.cygwin.com/install.html

  • Cygwin是一个在windows平台上运行的类UNIX模拟环境

2. 开发环境(mac)

2.1.安装git、iterm2

#坑/mac/homebrew 需要挂代理才能下载 homebrew::使用国内镜像(中科院)即可解决
#坑/mac/homebrew/环境变量 homebrew安装软件后需要重新配置环境变量吗::安装 Homebrew 后,默认情况下,你可以直接在命令行中使用通过 Homebrew 安装的软件包,而不需要手动配置 $PATH 环境变量。尽量所有的软件都用homebrew管理比较好,可以自动更新或者卸载、版本管理

brew -v      # 看一下是否已经安装了
# 使用国内镜像(中科院)即可解决
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"  

# 如果一旦失败,要先卸载homebrew在选择其他源去安装。
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"

brew -v     # 安装成功就会看到内容

# 安装 git
brew install git
git version
# 安装 iterm2. iTerm2 在界面、功能和定制化方面都比 macOS 自带的终端工具更加强大和灵活,可以提高工作效率和体验。
brew install --cask iterm2
#  怎么区分是当前终端是zsh还是bsah,两者有什么区别
echo $0            
# -zsh
# Mac默认使用zsh作为默认shell是因为在macOS Catalina版本中,Apple已经将默认shell从bash更改为zsh。这是因为zsh具有更多的功能和更好的性能,比如实时命令补全、插件支持、更好的自定义配置等。此外,zsh也更加现代化,更容易使用和学习。
# zsh和bash是两种常见的Unix/Linux shell,它们的主要区别在于以下几点:
	# 1. 命令补全:zsh的命令补全功能更加强大,支持更多的补全选项和自定义补全脚本。
	# 2. 语法:zsh支持更多的语法特性,如数组的关联和扩展,更加灵活的参数替换等。 
	# 3. 兼容性:bash是Unix/Linux系统默认的shell,因此更加兼容各种操作系统和脚本。

#坑/mac/快捷操作/文件操作 mac如何显示隐藏文件::用命令

# 在终端窗口中输入以下命令
defaults write com.apple.finder AppleShowAllFiles -bool true
# 输入以下命令来重新启动“Finder”应用程序
killall Finder
  • Mac 和 Windows 两个操作系统的环境变量都是用来存储系统级别和用户级别的配置信息,例如可执行文件路径、系统路径、临时路径等。两个操作系统的区别主要在于以下几点:
      1. 配置方式
        在 Windows 系统中,可以在“系统属性”->“高级系统设置”->“环境变量”中进行环境变量的配置;而在 macOS 中,则需要在用户主目录下的 .bash_profile.bashrc 文件中进行配置。
      1. 路径分隔符
        Windows 使用分号 ; 来分隔多个路径,而 macOS 使用冒号 : 来分隔多个路径。
      1. 配置优先级
        在 Windows 中,如果存在同名的环境变量,系统会选择用户级别的环境变量,而忽略系统级别的环境变量。而在 macOS 中,用户级别的环境变量会覆盖系统级别的环境变量。
      1. 环境变量生效方式
        在 Windows 中,当环境变量被修改后,需要重新启动应用程序或者计算机才能让环境变量生效。而在 macOS 中,只需重启终端窗口即可让修改后的环境变量生效。
  • Mac 的环境变量可以在以下几个文件中进行配置:
    • ~/.bash_profile~/.zprofile文件是用于Bash和Zsh shell的配置文件。它们在用户登录时加载,用于设置环境变量和启动一些需要在shell登录时运行的命令。重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。其中,Bash使用.bash_profile文件,而Zsh使用.zprofile文件。
    • ~/.bashrc~/.zshrc文件也是Bash和Zsh shell的配置文件,但它们不是用于登录时加载的,而是用于每次打开新的终端会话时加载。这些文件包含一些关于终端会话的设置,如颜色、自动补全、命令别名和其他Shell配置等
    • 如果要对所有用户和所有shell生效,应该将其配置写入全局配置文件中,如/etc/bashrc/etc/zshrc
# 环境变量只是存在当前的 shell 会话中,当这个 shell 会话关闭时,环境变量也随之销毁。所以,如果你想让代理设置在关闭终端后依然生效,可以将这两个命令添加到 `.bash_profile` 或者 `.zshrc` 等文件中,这样每次打开一个新的终端窗口时,都会自动执行这些命令,并设置代理,从而保证代理的持久性。
# 测试代理服务器是否可用
curl -I www.google.com --proxy http://192.168.31.31:1091
export http_proxy=http://192.168.31.31:1091;
export https_proxy=http://192.168.31.31:1091;

#坑/mac/代理 这个ip只在局域网内有效。因此,这个代理服务器只能在公司内网所在的局域网内使用。如果在局域网外,将无法使用这个代理服务器。还是挂自己的代理来配置环境靠谱。::但尝试挂自己代理反而homebrew报异常,输入以下这个命令即可。将这两个目录添加到Git的安全目录列表中,以解决Homebrew的警告问题。

git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git config --global --add safe.directory /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask

2.2.安装pyenv、python、pycharm

#坑/mac/homebrew/pyenv pyenv 的安装目录安装错了,要安装到其他目录下应该怎么操作?::删除HOME/目录,然后切换到目标的目录下重新下载安装pyenv,再修改$PATH

which pyenv
# HOME/.pyenv/bin/pyenv.    # 安装目录如果不在$HOME目录下,而是在特定的目录下。会导致很多不方便。比如在拉取另一个项目的代码,在这个新项目的目录下就无法使用pyenv
rm -rf HOME
cd ~
# curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
# 第一个命令是 `curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer`,它会从远程 URL 下载 pyenv-installer 脚本,并将其输出到终端。
# 第二个命令是 `bash`,它是一个 shell 程序,可以接收上一个命令的输出,并解释执行其中的命令。因此,这个命令的意思是将 pyenv-installer 脚本传递给 bash,然后由 bash 来执行这个脚本。这样就可以自动下载和安装 pyenv 工具了。
# 在使用 `zsh` 的情况下,如果你执行了 `bash` 的命令,那么系统会切换到 `bash` 环境下去执行,执行完成后又会返回 `zsh` 环境。这样来回切换环境,可能会对系统性能产生一定影响。但是,这种影响通常不会很明显,对于一般的用户来说是可以接受的。我的mac默认的是zsh,所以这里还是使用zsh比较好
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | zsh
#  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#
#                                 Dload  Upload   Total   Spent    Left  Speed
#
#  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
# curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 7 ms: Connection refused
# 如果下载不下来,那就手动创建一个,把脚本粘贴进去
touch pyenv.sh
vim pyenv.sh
zsh pyenv.sh
# 正克隆到 'HOME/.pyenv/plugins/pyenv-update'... 致命错误:无法访问 'https://github.com/pyenv/pyenv-update.git/':HTTP/2 stream 1 was not closed cleanly before end of the underlying stream Failed to git clone https://github.com/pyenv/pyenv-update.git
# 这个错误表示Git克隆命令未能完成,因为底层的HTTP/2流没有干净地关闭。可能的原因是网络连接中断或连接超时,或者GitHub服务器出现了问题。您可以尝试再次运行相同的命令,也可以尝试使用另一种协议(如SSH)进行克隆。把pyenv.sh脚本里面的http改成ssh或者不修改隔一段时间再试试,隔一段时间试试就可以了
# 将~/.zprofile改为`export PYENV_ROOT="$HOME/HOME/.pyenv"`
vim ~/.zprofile
# 设置环境变量
PYENV_ROOT="$HOME/HOME/.pyenv"

source ~/.zprofile
# ~/.zprofile:7: command not found: pyenv  # 手动关闭终端重新进,让其生效,重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。

#坑/mac/pyenv 3.7.0、3.8.0在线/离线安装都安装不上,python3.9.0却可以::现在看来应该是Xcode和特定的Python版本之间兼容性问题

pyenv update     # 切换到清华源
pyenv install --list # 查看可安装版本 
# 安装指定版本
pyenv install 3.7.0
#Downloading Python-3.7.0.tar.xz...
#-> https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz  # 下载慢是卡在了这里,可以把它手动下载下来,放到~/.pyenv/cache下
ls ~/HOME/.pyenv/cache
# ls: /Users/tiandongchen/HOME/.pyenv/cache: No such file or directory
mkdir ~/HOME/.pyenv/cache  # 没有就创建一个
mv ~/Downloads/Python-3.7.0.tar.xz ~/HOME/.pyenv/cache
# 安装还是失败了
pyenv install 3.7.0
# python-build: use openssl@1.1 from homebrew
# python-build: use readline from homebrew
# Installing Python-3.7.0...
# python-build: use readline from homebrew
# python-build: use zlib from xcode sdk

# BUILD FAILED (OS X 12.6.3 using python-build 20180424)

# Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494
# Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230421192411.69494.log

# Last 10 log lines:
# checking for --with-cxx-main=<compiler>... no
# checking for clang++... no
# configure:

#   By default, distutils will build C++ extension modules with "clang++".
#   If this is not intended, then set CXX on the configure command line.

# checking for the platform triplet based on compiler characteristics... darwin
# configure: error: internal configure error for the platform triplet, please file a bug report
# make: *** No targets specified and no makefile found.  Stop.

# 有可能是版本问题,试试3.8.0,还是失败了,看来不是下载的python源码问题
tiandongchen@WKS70241 ~ % wget https://npm.taobao.org/mirrors/python/3.8.0/Python-3.8.0.tar.xz -P ~/HOME/.pyenv/cache/
pyenv install 3.8.0   # 依旧安装不上```

“平台三元组的内部配置错误”,尽管使用带有修复程序的Pyenv版本(2.3.1) ·问题 #2393 ·pyenv/pyenv ·GitHub
找到这个答案,下载xcode本体就可以解决
Recently I had the same problem, I couldn’t install any python version with Pyenv on my M1 Pro. I tried lots of hacks mentioned in issues: patches, flags, reinstalling zlib, bzip and so on, resetting xcode-command-line-tools. Nothing worked. But then my friend told me I should install the Xcode itself from App Store. And lol, that worked!
Just install Xcode and run
(works with all latest revisions supported by pyenv such as 3.7.13, 3.8.13, 3.9.11, 3.10.3, etc.)pyenv install 3.7.13
Can’t install 3.10.0 on M1 Mac - error: internal configure error for the platform triplet, please file a bug report · Issue #2317 · pyenv/pyenv · GitHub
#坑/mac/Xcode App Store无法下载Xcode::手动下载Xcode下载地址: https://developer.apple.com/download/all/

sudo rm -rf  /Library/Developer/CommandLineTools
Password:
ls  /Library/Developer/CommandLineTools
# ls: /Library/Developer/CommandLineTools: No such file or directory
pyenv doctor
# Cloning ~/.pyenv/plugins/pyenv-doctor/bin/.....
# Installing python-pyenv-doctor...
# python-build: use readline from homebrew

# BUILD FAILED (OS X 12.6.3 using python-build 20180424)

# Inspect or clean up the working tree at /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135
# Results logged to /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135.log

# Last 10 log lines:
# 正克隆到 'python-pyenv-doctor'...
# 警告:--depth 在本地克隆时被忽略,请改用 file:// 协议。
# /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor /var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135 ~
# configure: WARNING: unrecognized options: --enable-shared
# checking for gcc... clang
# checking whether the C compiler works... no
# configure: error: in `/var/folders/3n/5swgm_0s3b519yhmf_pt6p6c0000gp/T/python-build.20230423145633.44135/python-pyenv-doctor':
# configure: error: C compiler cannot create executables
# See `config.log' for more details
# xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
# Problem(s) detected while checking system.

# See https://github.com/pyenv/pyenv/wiki/Common-build-problems for known solutions.

# 自动跳出重新安装xcode
# 然后安装python 3.9.0是正常安装的
pyenv install 3.9.0
# python-build: use openssl@1.1 from homebrew
# python-build: use readline from homebrew
# Installing Python-3.9.0...
# patching file Misc/NEWS.d/next/Build/2021-10-11-16-27-38.bpo-45405.iSfdW5.rst
# patching file configure
# patching file configure.ac
# python-build: use readline from homebrew
# python-build: use zlib from xcode sdk
# Installed Python-3.9.0 to /Users/tiandongchen/.pyenv/versions/3.9.0
which python
# ~/.pyenv/shims/python
# 但安装3.7.0还是安装不上

# 也可以使用homebrew pycharm安装社区版,免费
brew install --cask pycharm-ce
  • #坑/mac/Xcode Xcode14.3无法在mac os12.6.3 安装,只支持13及其以上的mac系统版本::下载Xcode 13,可以安装上,测试pyenv insatll 3.7.0 、pyenv install 3.8.0是否正常

2.3 安装jdk、Android Studio、sdk

brew install --cask adoptopenjdk    # 下载速度很慢
java -version

# 使用加速器或代理服务器:在终端中执行以下命令,使用清华大学开源软件镜像站加速 Homebrew 的下载速度。
export HOMEBREW_BREW_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
export HOMEBREW_CORE_GIT_REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/core.git

# 使用 Homebrew 的下载加速器:Homebrew 提供了一个下载加速器服务,可以将软件包下载速度提高数倍。在终端中执行以下命令启用下载加速器:
brew install --fast --verbose <formula> # 这里的 `<formula>` 是需要安装的软件包,例如 JDK。注意,下载加速器服务仅适用于 Homebrew 的公式库(formula),并不适用于外部软件包或 Homebrew Cask 应用程序
# 手动下载安装包:如果以上方法仍然不能满足需求,可以尝试手动下载 JDK 的安装包,并使用 Homebrew 进行安装。可以从官方网站或其他可靠的源站下载 JDK 安装包,然后使用以下命令在本地安装:
brew install --cask /path/to/jdk.pkg

#坑/mac/jdk OpenJDK和JDK不是同一个东西,所以不能用homebrew安装::去官网下载( https://www.oracle.com/java/technologies/downloads/macos-big-sur-arm64-downloads.html ),安装之后,在更新环境变量。

  • OpenJDK 是一种开源的 JDK 实现,它是由一些社区贡献者开发和维护的。JDK 是由 Oracle 公司开发和维护的一个 JDK 实现。从技术上讲,OpenJDK 和 JDK 是两个不同的 JDK 实现,它们有许多相似之处,但也有一些差异。
  • 在 Oracle JDK 9 发布之后,Oracle 开始将 JDK 的源代码和二进制代码更多地转向 OpenJDK,并将其作为 JDK 的主要发行版。这就意味着 OpenJDK 和 Oracle JDK 之间的差异将逐渐缩小。目前,大多数主要的 JDK 发行版都是基于 OpenJDK 开发的,例如 Oracle JDK、Amazon Corretto、Azul Zulu、Red Hat JDK 等。
brew install --pkg ~/workspace/scripts/dmg/java/JDK 17.0.7.pkg   # 双击之后发现里面有一个pkg,这里直接用homebre安装,会自动更新环境变量,也方便管理,但这里brew不支持--pkg参数,所以这里只能双击dmg,然后双击pkg安装jdk了,手动修改环境变量,后续更新也需要手动维护
which java
# /usr/bin/java
java -version
echo $(/usr/libexec/java_home)
# /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
echo 'export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home"' >> ~/.zprofile
source ~/.zprofile

# brew 无法指定版本,默认是下载最新的版本
(py390) tiandongchen@WKS70241 proxy % brew install --cask android-studio
==> Downloading https://redirector.gvt1.com/edgedl/android/studio/install/2022.
==> Downloading from https://r4---sn-j5o7dn7e.gvt1.com/edgedl/android/studio/in
######################################################################## 100.0%
==> Installing Cask android-studio
==> Moving App 'Android Studio.app' to '/Applications/Android Studio.app'
🍺  android-studio was successfully installed!

# 新建一个项目跑一下,会自动下载gradle,这时候需要挂代理
# 编译报错::注意Android Studio版本-->Gradle插件-->Gradle-->jdk版本的兼容性
# 在android studio里面下载sdk
# 配置环境变量
vim ~/.zprofile
export ANDROID_HOME=/Users/username/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
source ~/.zprofile
source ~/.zprofile

2.4 安装Jadx、Apktool、jeb、IDA Pro

#坑/mac/IDA ida 64闪退::https://github.com/fjh658/IDA7.0_SP

# 安装Jadx
brew install jadx
jadx-gui

# 安装Apktool
brew install apktool
apktool --version

# 安装jeb
# Brew未能找到名为"jeb"的软件包。只能手动安装
# 下载地址:  https://www.pnfsoftware.com/

# 安装IDA Pro
# https://www.qlgoo.com/3669/
# https://www.chinapyg.com/forum.php?mod=viewthread&tid=149517&highlight=8.3

2.5 vscode、IDEA、GoLand、DBeaver、postman、Charles、mitmproxy

  • 安装VScode

https://code.visualstudio.com/docs/?dv=osx

  • 安装IDEA

下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com)

  • 安装DBeaver

https://dbeaver.io/

  • 安装GoLand
# https://www.jetbrains.com/go/
brew install --cask GoLand
  • postman

Postman API Platform | Sign Up for Free

  • 安装 Charles

https://www.charlesproxy.com/

  • 安装fiddler

https://www.telerik.com/fiddler

  • 安装mitmproxy
# https://mitmproxy.org/
brew install mitmproxy     
mitmproxy # 在终端或命令行窗口运行`mitmproxy`
mitmweb   # 启动 mitmproxy 的 Web 界面

3. 开发环境(Linux)

#坑/虚拟机 主机与VMware虚拟机共享文件夹::解决虚拟机找不到共享文件夹问题

sudo mkdir /mnt/hgfs
# `-t fuse.vmhgfs-fuse`:指定要挂载的文件系统类型为 `fuse.vmhgfs-fuse`,这是 VMware 虚拟机中用于共享文件夹的 FUSE 文件系统类型。
# `.host:/`:这是 VMware 中用来表示主机的特殊路径。通常情况下,虚拟机中的主机共享文件夹会映射到 `.host:/`。
# `/mnt/hgfs`:指定挂载点,即将共享文件夹挂载到 Linux 系统的 `/mnt/hgfs` 目录下。
#  `-o allow_other`:这个选项允许所有用户(包括非 root 用户)访问挂载的文件系统,这在共享文件夹的场景中很有用,以便其他用户也能够访问共享文件夹中的内容。
cd /mnt && sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
ls /mnt/hgfs
1. 配置kali
# 下载kali:https://www.kali.org/get-kali/#kali-virtual-machines 
# SHA256sum 343112d851e8df440204e79133610d061299897b42a616ec697d7c424dc0d786  
shasum -a 256 filepath
# 下载VM文件,在vmware中打开(mac用VMware Function,淘宝几块钱买个注册码)
# 虚拟机安装使用Kali系统,在2KW4K高分辨率电脑下Kali系统界面显示太小,包括各种软件及命令终端字体均无法很直观的看出,影响我们的正常测试及使用。
直接搜索栏输入kali hidpi mode,弹出HiDPI mode窗口点击“Yes”完成设置即可
# 关闭自动熄屏 seeting-Power Manger-Dispaly-取消勾选Display power management
# 默认用户是kali kali,修改root密码,以后用root用户登陆
cat /etc/passwd    
sudo passwd root	
dpkg-reconfigure tzdata # 修改时区
# 回退退到bash 编译android系统,很多命令是执行在bash下的
chsh -s /bin/bash  
# 配置bash,将history长度调大1000倍
nano .bashrc
# HISTSIZE=100000
# HISTFILESIZE=2000000
source .bashrc 
reboot 

# 配置git
ssh-keygen -t ed25519 -C "your_username"
cat ~/.ssh/id_ed25519.pub
# 把从ish粘贴出来的公钥粘贴到github上
# 在 Git 仓库所在的目录下设置特定的用户名和邮箱地址,用户名和邮箱地址保存到当前仓库的`.git/config`文件中,避免和全局的冲突
# 这些提交都是我一个人提交的,只是在不同设备上提交,不同设备用不同的设备名去分开,但这个邮箱不能是gihub绑定的邮箱,不然提交记录会指向同一个,区分了设备,邮箱只能设置成不一样的了
git config user.name "your_username"
git config user.email "your_email@your_username"
git config user.name
git config user.email
# git config --global user.name "your_username"
# git config --global user.email "your_email@example.com"

2. 安装一些好用的小软件
apt update
apt install htop jnettop tree 
# htop 查看资源占用情况
# jnettop 查看正在下载的文件
# tree 查看文件的目录结构

3. 安装 android studio
# android studio下载地址 :  https://developer.android.google.cn/studio
wget https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2022.2.1.20/android-studio-2022.2.1.20-linux.tar.gz 
SHA-256 checksum 
5fe66e1f870729f42d7ef385d242e4f908d0e40477a531296ab7331c4524fae6
tar zxvf android-studio-2022.2.1.20-linux.tar.gz 
./android-studio/bin/studio.sh  # 安装的时候不需要科学上网
# 打个快照 一个快照占空间实测大概2G
设置sdk、ndk、jdk
#  新建一个项目跑一下,会自动下载gradle,这时候需要挂代理(科学上网)

# 设置代理方式1:轻量,只对指定的命令有效
proxychains curl ip.sb
# [proxychains] config file found: /etc/proxychains4.conf
# [proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
# [proxychains] DLL init: proxychains-ng 4.16
# [proxychains] Strict chain  ...  127.0.0.1:9050  ...  timeout
# curl: (7) Failed to connect to ip.sb port 80 after 1 ms: Couldn't connect to server

# 主机的代理工具设置允许局域网连接,把开放端口记录下来11310
nano /etc/proxychains4.conf # 或者是/etc/proxychains.conf( dpkg -l | grep proxychains 查看proxychains版本如果是3的话)
# 滑到最后一行,添加 socks5 [主机的IP地址] [代理服务器开放的端口]
# 比如 socks5 192.168.120.1 11310
# NAT模式 填windows主机中的VMnet8ip地址(在 VMware 中,通常会创建两个默认的虚拟网络适配器,分别是 VMnet1(主机和虚拟机之间的文件共享或者其他特定需求)和 VMnet8(它允许虚拟机通过主机访问外部网络,并提供了 DHCP 服务来为虚拟机分配 IP 地址))
# 桥接模式 填写主机的真实ip
proxychains firefox # 可以正常访问youtube
注释掉proxy_dns

# 设置代理方式2: redsocks将socks代理转换成全局代理
nano /etc/redsocks.conf
redsocks # 跑起来
ps aux | grep redsocks
ss -lntp|more # 查看端口是否转发成功
sh iptable.sh 

# 配置android studio、adb
# alias as="nohup /root/Documents/android-studio/bin/studio.sh >/dev/null 2>&1 &"  添加到 .bashrc
# 运行看看效果
as
# 设置代理方式3:在 Android Studio 内部设置代理
# 1.打开 Android Studio,启动 Android Studio。
# 2.打开设置:选择 `File` -> `Settings` (Windows/Linux) 或 `Android Studio` -> `Preferences` (macOS)。
    
# 3.搜索“Proxy”:在设置界面的搜索栏中输入 “Proxy”,然后选择 `Appearance & Behavior` -> `System Settings` -> `HTTP Proxy`。
    
# 4.配置代理:
- 选择 `Manual proxy configuration`。
- 填写 `HTTP``SOCKS` 代理服务器的 `Host name``Port`。
- 如果需要身份验证,勾选 `Proxy authentication` 并填写 `Username``Password`# 5.测试连接:点击 `Check connection` 确保代理设置正确,然后点击 `Apply` 和 `OK` 保存设置。

whereis adb 
# adb: /usr/bin/adb /root/Android/Sdk/platform-tools/adb /usr/share/man/man1/adb.1.gz
# 把PATH=$PATH:/root/Android/Sdk/platform-tools;export PATH;添加到 .bashrc

# 手机打开开发者模式-adb 调试
adb connect 192.168.137.95:5555  
# 投屏到电脑上操作
scrcpy

# 没有真机就安装Genymotion模拟器(比as自带的模拟器好),第一步先打开虚拟机的v-T虚拟化,第二步下载Genymotion新建一个模拟器,第三步android studio安装Genymotion插件

4. 安装反编译工具
# 下载解压后放到某一个目录下 https://github.com/skylot/jadx  
# PATH=$PATH:/root/Documents/jadx/bin;export PATH; 添加到 .bashrc
# 运行看看效果
jadx-gui
# alias jeb='/root/Documents/jeb-demo-4.16.0.202205110304/jeb_linux.sh' 添加到 .bashrc
# 运行看看效果

jeb
# 下载jeb demo解压后放到某一个目录下 https://www.pnfsoftware.com/   

010editor
# 下载linux64位版本 https://www.sweetscape.com/010editor/
tar -xzf 010EditorLinux64Installer14.0.1.tar.gz -C /opt # 将软件安装到 `/opt` 目录下有助于保持系统的整洁性、避免冲突,并提供更好的权限管理和软件管理
/opt/010editor -install # 安装,会自动把010editor的路径添加环境变量中去

# 下载vscode .tar.gz 64位置的版本 https://code.visualstudio.com/Download#
tar -xzf code-stable-x64-1709910909.tar.gz -C /usr/share
# 解压后的文件夹中找到 `code` 可执行文件并运行它
alias code="code --user-data-dir ='~/.vscode-root' --no-sandbox"  # 使用当前用户的家目录下的 `.vscode-root` 目录作为用户数据目录,禁用了沙盒模式,可能会提高 VSCode 在某些环境下的稳定性
# `code` 命令是一个在系统路径中可执行的命令,所以即使在别名中没有明确指定它的路径,系统也能够找到并执行它。
which code
# /usr/bin/code
ls -l /usr/bin/code
# lrwxrwxrwx 1 root root 24 Sep  7  2022 /usr/bin/code -> /usr/share/code/bin/code  # 这里的code是/usr/share/code/bin/code的链接  应该是之前有人做了这个操作ln -s /usr/share/code/bin/code /usr/bin/code
echo $PATH
# /root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/010editor:/root/Documents/jadx/bin:/root/Android/Sdk/platform-tools

# 要运行java代代码 需要按安装code runner 、Extension Pack for Java插件
# 创建桌面快捷方式
cd Desktop
touch xxx.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=MyApp  # 应用程序的显示名称
Exec=/path/to/your/executable  # 应用程序的可执行文件路径
Icon=/path/to/your/icon.png  # 应用程序的图标文件路径
Terminal=false  # 指定是否在终端中运行应用程序,通常设置为 false


5. 安装python、firda、objection
# https://github.com/pyenv/pyenv  
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# 把下面4行添加到 .bashrc
# export PYENV_ROOT="$HOME/.pyenv"  # 设置了一个环境变量 `PYENV_ROOT`,指向 pyenv 的根目录,即当前用户的主目录下的 `.pyenv` 文件夹中
# export PATH="$PYENV_ROOT/bin:$PATH" # 将 `$PYENV_ROOT/bin` 添加到 `PATH` 变量的开头,这意味着在查找命令时,会优先使用 `$PYENV_ROOT/bin` 中的命令,而不是之前存在于 `PATH` 中的同名命令。同时使用`export`关键字的变量会成为环境变量,对于后续启动的命令和子进程是可见的。
# eval "$(pyenv init --path)" # `pyenv init --path` 返回了一个设置了 Python 版本相关的 PATH 的脚本(主要目的是确保在 `PATH` 环境变量中,`/root/.pyenv/shims` 这个路径位于最前面,并在添加到 `PATH` 后运行 `pyenv rehash` 命令以确保 `pyenv` 环境正确配置。),它被 `eval` 命令执行
# eval "$(pyenv init -)" # `pyenv init -` 返回了一个包含了一些 shell 函数的脚本,它们用于在 shell 中管理和切换 Python 版本
pyenv install --list # 列出pyenv支持的python版本
proxychains pyenv install 3.9.10 # 安装指定版本python
pyenv vsersions # 查看当前可用的python环境
pyenv local 3.9.10 # 切换到指定版本python
pyenv vsersion # 查看当前在用的python环境

# 安装frida
pip install frida==15.2.2
pip install frida-tool==10.6.2
pip install objection==1.11.0

# 下载对应芯片架构、对应frida版本的frida-server,push到手机上
adb push frida-server-15.2.2  /data/local/tmp/
# 手机上运行frida-server
adb shell
su
/data/local/tmp/frida-server-15.2.2
# 测试Frida运行是否正常
frida-ps -U

# 电脑端
# 安装frida api智能提示
sudo apt install npm
npm install --save @types/frida-gum

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。
    解锁风险
  1. 解锁设备将允许修改系统重要组件,并有可能在一定程度上导致设备受损;
  2. 解锁后部分对系统安全性依赖高的功能和服务,比如:查找手机、增值服务等将失效;
  3. 解锁后由于刷机导致的硬件故障,小米售后维修网点可以按非保修处理,并按普通的保外软件维修进行收费。
    步骤
  4. 解bl锁会清除手机(恢复出厂设置)所有数据,记得提前备份好!!!
  • 解锁首先要绑定的你的小米账号,点击【绑定账号和设备】(这个有的账号要绑定后三天才能解锁,有的绑定后马上就能解锁,具体以自己的情况为准)。
  • 打开【设置】,【我的设备】里点击【全部参数】,连续点击【MIUI版本】几次,直到出现【你已处于开发者模式】提示。
  • 【更多设置】里点击【开发者选项】,点击【设备解锁状态】。(2015年之后的小米设备才会加锁,之前的并没有。)

    #坑/逆向/Android逆向/root/小米 解BL锁这里不要重复绑定::否则会重新计时重新等7天
  1. 运行解锁工具

解锁工具:https://www.miui.com/unlock/index.html)

  • 还得再次登录自己的小米账号。
  1. 当前显示没有连接手机,需要进入fastboot模式。
  • 在关机状态下同时按住音量减键电源键,直到出现FASTBOOT界面,进入fastboot。此时用数据线连接手机和电脑。
  • 连接好后电脑会出现【已连接手机】,点击【解锁】。
  • 解锁完成,会自动重启手机。
goole手机
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(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面具
  • magisk刷入前提:
    • 手机必须解BL锁
    • 电脑具备ADB环境
方式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.下载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 分区、 miscmetadata 分区分区依然没有效果,直接刷原来boot.img恢复,暂时不需要搞Twrp了,可能是版本问题,有机会再试吧

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 以后强制推行
image.png

方式2:安装Magisk Manager再通过修补boot.img刷入Magisk
  1. 下载对应手机型号对应版本的官方镜像
  • pixel 3
    • 对应版本的谷歌官方镜像: https://developers.google.com/android/images#blueline
    • boot.img放入手机

  • 红米9A
    • 下载卡刷包,然后解压,把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避免被检测))

#坑/逆向/Android逆向/root/小米 Redmi9a手机是联发科芯片,用v23的magisk修不出来的img有问题::需要用更新的版本(v23之后的版本)的magisk(修补boot.img的时候,不要勾选选项-修补boot 镜像中的vbmeta)。

topjohnwu/Magisk: https://github.com/topjohnwu/Magisk/releases/tag/v23.0

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
  1. 安装Magisk Manager 后,点击安装,选择并修补,选择boot.img文件
  • 修补完成后会在Dowbload目录下生成.img文件,把这个文件从手机拷贝到电脑中
  1. 用adb的fastboot.exe工具把这个修后的.img文件刷入手机
  • 进入Fastboot:
    • 方式1:关机状态下,同时按住音量-键和电源键,进入fastboot模式,连接usb数据线
    • 方式2:用adb reboot fastboot命令
  • 刷入.img文件,重启手机
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. 验证Magisk是否安装成功
D:\Android\Sdk\platform-tools>adb shell
dandelion:/ $ su
dandelion:/ #       # 成功切换到root用户下,就说明已经root成功了
Magisk模块的安装
救砖模块
  • Magisk虽然会自动禁用不兼容的模块,但是偶尔也会抽风,装错模块导致设备无法开机,也是家常便饭。
    • 在安装救砖模块后, 模块检测到设备没有正常开启且Magisk没有自动禁用异常模块时,模块会依次尝试着禁用单个模块,禁用所有模块,直至进入安全模式(对恶意模块无能为力,刷入后轻则功能异常,重则设备成砖,所以请尽量选择开源以及知名作者的模块)
    • 救砖模块:自动禁用失败>禁用单个模块>禁用所有模块>进入安全模式>正常开机
  • 安装过程
    • 打开magisk-模块,从本地安装,选择救砖模块

救砖模块下载地址: https://www.52pojie.cn/thread-1600094-1-1.html

Move Certificates
  • 将用户证书移动到系统证书的根目录下(之后发布的协议抓包文章,再详细介绍安装)

Xposed框架

  • Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以加载很多插件App(模块),这些插件App都有各自各种各样的功能。
名称地址支持版本是否免root
xposedhttps://github.com/rovo89/Xposed2.3-8.1
EDXposedhttps://github.com/ElderDrivers/EdXposed8.0-10
LSPosedhttps://github.com/LSPosed/LSPosed8.1-13
VirtualXposedhttps://github.com/android-hacker/irtualXposed5.0-10.0
太极https://www.coolapk.com/apk/me.weishu.exp5.0-13
两仪https://www.coolapk.com/apk/io.twoyi8.1-13
天鉴https://github.com/Katana-Official/SPatch-Update6-10
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 系列的其他模块。
  • 安装过程
    • 下载好后push到手机里面,选择本地安装,全部安装完之后再重启。
    • #坑/逆向/Android逆向/Magisk :Riru最新版本的不支持RiruXposedEdXposed,要安装Riru v25.4.4 Release v25.4.4 · RikkaApps/Riru (github.com)

EdXposed
EdXposed重启到用户空间
  • EdXposedManager
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+
  1. 在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。打开显示“已激活”则成功刷入。
  1. 安装LSpose模块,激活LSPosed模块,选择作用域

GitHub - shatyuka/Zhiliao: 知乎去广告Xposed模块: https://github.com/shatyuka/Zhiliao

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反资源混淆、翻译模式等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值