当前位置:首页 > 手机资讯 > 正文

Android逆向前期准备红米手机出现fastboot怎么办「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. 学习研究
  • 去广告
  • 破解内购
  • 自动化
    • 臧航准备网自动登陆
    • 车智赢自动登陆
    • 大姨妈自动登陆
    • 京东价格监控
    • 酒仙网自动登陆,预约茅台
    • 大商天狗自动登陆,预约茅台
    • 司小宝自动登陆
  • 刷播放量
    • 刷B站完播率,批量注册B站账号
  • 获取评论
    • 抓取得物的推荐区的评论
    • 抓取抖音评论
  • 根据关键词搜索商品
    • 识货搜索型号,获取到尺码和价格
    • 唯品会搜索商品
    • 知乎搜索

学安卓逆向的前置知识

  • 逆向分为:安卓逆向,win逆向
    • 逆功能:破解内购道具,去广告等等
    • 逆协议:比如,某APP注册的时候有一个的加密。这时候app逆向(让爬虫爬到app的数据)
      需要学习的内容:
  1. 环境搭建
    • java开发环境
    • Android开发环境
    • c开发环境
    • python开发环境
    • JavaScript开发环境
    • 真机(解BL锁,刷Magisk,装Xpose)
    • 其他工具
  2. Android应用开发
    • java:基础语法,面向对象、接口,反射机制等。各类常见加密算法的java层实现和破解方法
    • 四大组件( activity,service,provider,broadcast),界面控件,消息事件处理、网络通信等
  3. java层逆向
    • 回编译(AndroidKiller)
    • ali汇编
    • 静态逆向分析(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层逆向
    • 语言:数据类型,指针,常见加密算法native层实现。
    • NDK开发(linux下的类似windll`)
    • ARM汇编(寄存器,指令码,立即值,常量)。
    • 静态分析、动态调试(双IDA调试)。
    • unidbg 模拟执行
    • so层算法还原
    • 综合实战
    • [[llvm混淆]]
  9. 定制rom:
    • Android源码编译
    • root检测绕过

硬件配置

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

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

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

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

  • jdk-19_windows-x64_bin.exe 必须去安装 否则无法运行依赖Java环境的软件或者工具
  • 配置环境变量
    • JAVA_HOME:jdk安装的目录
    • CLASSPATH:(注意前面是有一个点的)
    • path:添加
  • 验证配置环境变量是否生效:打开cmd,输入,
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先保持默认,后续有需要可以手动修改的字段



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

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

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

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

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

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


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

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命令连接您的手机。()
    • 不用的时候关闭,省电一点?

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,输入
安装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,输入
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/

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

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

    • 开源
    • 反编译apk
    • 支持修改后再打包
    • 签名
Jadx

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

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

官网: 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模块
 


4. 智能api提示 @todo

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


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

 
测试
  1. 启动frida-server,,就是启动成功了
 


2. 进行端口转发

 
  1. Hook
 


#坑/逆向/Android逆向/Frida/环境 frida-ps -U报错::是因为电脑连接了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掉试试

 
IDA Pro

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

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

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

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

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

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

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

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

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

  • bakali
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.1.安装git、iterm2

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

 

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

 
  • Mac 和 Windows 两个操作系统的环境变量都是用来存储系统级别和用户级别的配置信息,例如可执行文件路径、系统路径、临时路径等。两个操作系统的区别主要在于以下几点:
      1. 配置方式
        在 Windows 系统中,可以在“系统属性”->“高级系统设置”->“环境变量”中进行环境变量的配置;而在 macOS 中,则需要在用户主目录下的 或 文件中进行配置。
      1. 路径分隔符
        Windows 使用分号 来分隔多个路径,而 macOS 使用冒号 来分隔多个路径。
      1. 配置优先级
        在 Windows 中,如果存在同名的环境变量,系统会选择用户级别的环境变量,而忽略系统级别的环境变量。而在 macOS 中,用户级别的环境变量会覆盖系统级别的环境变量。
      1. 环境变量生效方式
        在 Windows 中,当环境变量被修改后,需要重新启动应用程序或者计算机才能让环境变量生效。而在 macOS 中,只需重启终端窗口即可让修改后的环境变量生效。
  • Mac 的环境变量可以在以下几个文件中进行配置:
    • 和文件是用于Bash和Zsh shell的配置文件。它们在。重新启动终端也会重新加载这些文件,因此更改这些文件后重新启动终端可以使更改生效。但是,在某些情况下,可能需要注销并重新登录才能使更改生效,因为某些系统可能会在登录时忽略这些文件的加载,而只在注销并重新登录时加载它们。其中,Bash使用文件,而Zsh使用文件。
    • 和文件也是Bash和Zsh shell的配置文件,但它们不是用于登录时加载的,而是用于每次打开新的终端会话时加载。这些文件包含一些关于。
    • 如果要对所有用户和所有shell生效,应该将其配置写入全局配置文件中,如和。
 

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

 

2.2.安装pyenv、python、pycharm

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

 

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

 

“平台三元组的内部配置错误”,尽管使用带有修复程序的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.)
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/

 

    2.3 安装jdk、Android Studio、sdk

     
    

    #坑/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 等。
     
    

    2.4 安装Jadx、Apktool、jeb、IDA Pro

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

     
    

    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
     
    
    • postman

    Postman API Platform | Sign Up for Free

    • 安装 Charles

    https://www.charlesproxy.com/

    • 安装fiddler

    https://www.telerik.com/fiddler

    • 安装mitmproxy
     
     
    

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

     
    
     
     
    
    • 红米9A、nexus 5x、pixel 3
    • 如果这步实在搞不了,淘宝30块搞定

    刷机

    • 前期准备:
      • 电脑配置好ADB环境
      • 手机在开发者模式下,启用OEM解锁、启用U调试
    解BL锁
    小米(以红米9A为例)
    准备驱动

    小米手机服务支持-小米商城 (mi.com):https://www.mi.com/c/service/download/index.html

    解锁BL

    BL锁

    • BL是的简称 就是开机引导程序 ,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手机
     
    
    刷系统
    • 下载对应手机aosp的镜像Nexus 和 Pixel 设备的出厂映像 | Google Play services | Google for Developers,解压后,重启到bootloader模式,执行flash-all.bat(win)、flash-all.sh(linux/mac)
    • 设置手机时间、网络

    Magisk(ROOT)

    magisk是什么?

    • 对 Android 生态而言,和长久以来似乎都是,直到Magisk的横空出世。
      • 它是由打造的开源框架软件,可以在修改系统功能的同时不会对系统本身造成破坏,但是Magisk更普遍的用途是作为获取和管理Root权限的工具。(在销声匿迹之后,自然而然就成为了当前Android社区用来获取权限的主流方式)
    • 在一些用户眼里,与另一款名 的神器有着高度的相似性,部分群体当中甚至还存在着这样的说法。
      • 二者的工作机制都是。 通过劫持 Android 系统的 进程来加载自定义功能,这就像是半路截杀,在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。
      • Magisk则另辟蹊径,通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界()里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。
      • 得益于独特的挂载机制,使用 Magisk 时我们可以有针对性地隐藏 root,甚至暂时隐藏 Magisk 本身。当被挂载的Magisk分区甚至时,原有系统分区的完整性丝毫未损,玩需要验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的更新都没有任何问题。
      • 因此严格来说 Magisk 可以被看作是一种文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架,这也是当前它在玩机社区广受认可和好评的原因所在。
    • 由于挂载系统的存在,也让 Magisk 拥有了多样的模块化生态系统。
      • Magisk既可以独立使用,只安装。也可以和结合起来使用,发掘更多的功能。理论上两者功能可以相互替代,但由于两者侧重点不同以及模块开发难度等原因,。
    刷入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分区::需要先刷临时进入TWRP,然后再刷zip包
     
    

    #坑/逆向/Android逆向/TWRP/ 刷入twrp前是A分区,然后好奇切换到B分区开机,确实没有系统无法开机。紧接着用fastboot命令切换到B分区,然后无限循环于twrp,无法开机::清空 分区、 、 分区分区依然没有效果,直接刷原来boot.img恢复,暂时不需要搞Twrp了,可能是版本问题,有机会再试吧

     
    

    在 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
      • 把放入手机

    • 红米9A
      • 下载卡刷包,然后解压,把文件提取出来,放到手机里面去

    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以后的版本去掉和(隐agisk避免被检测))

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

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

     
    
    1. 安装Magisk Manager 后,点击安装,选择并修补,选择boot.img文件
    • 修补完成后会在Dowbload目录下生成.img文件,把这个文件从手机拷贝到电脑中
    1. 用adb的工具把这个修后的文件刷入手机
    • 进入Fastboot:
      • 方式1:关机状态下,同时按住和电源键,进入模式,连接u数据线
      • 方式2:用命令
    • 刷入文件,重启手机
     
    

    #坑/逆向/Android逆向/root/小米 fastboot之后开不了机::可以刷回原本的恢复。
    5. (高通的cpu才需要)进入 Magisk Manager,选择安装-直接安装,才能将临时 root 转换为永久 root。

    1. 验证Magisk是否安装成功
     
    
    Magisk模块的安装
    救砖模块
    • Magisk虽然会自动禁用不兼容的模块,但是偶尔也会抽风,装错模块导致设备无法开机,也是家常便饭。
      • 在安装救砖模块后, 模块检测到设备没有正常开启且Magisk没有自动禁用异常模块时,模块会依次尝试着禁用单个模块,禁用所有模块,直至进入安全模式(对恶意模块无能为力,刷入后轻则功能异常,重则设备成砖,所以请尽量选择的模块)
      • 救砖模块:自动禁用失败>禁用单个模块>禁用所有模块>进入安全模式>正常开机
    • 安装过程
      • 打开magisk-模块,从本地安装,选择救砖模块

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

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

    Xposed框架

    • Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以加载很多插件App(模块),这些插件App都有各自各种各样的功能。
    名称地址支持版本是否免rootxposedhttps://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
    • Release v4.6.2 · ElderDrivers/EdXposedManager (github.com)版本安装最新的即可
    还需要安装两个Magisk模块
    Riru
    • Riru 并不是单独一个Magisk模块,而是由国内独立开发者 开发的模块系列。Riru 神奇的地方在于,它部分地达成 那样的功能,能够自定义到一部分的应用。
      • Android 上所有正在运行的应用程序都是通过 Zygote 创造出来的,而 Riru 正是通过替换一个会被 zygote 进程加载的共享库,来达到劫持应用、让应用进程执行模块代码的目的。
    • 那为什么到最后会变成模块呢?
      • 是为了避免一群模块都去抢占那个要被替换的共享库,先派遣一个模块(也是 Riru Core 核心)去负责替换,再由那个核心模块提供 API 给其他模块,以让其他那些有需要模块都能正常工作、顺利生效。
      • 从这样的原理看,想要使用 Riru 系列模块, 是必须安装的,然后需要用户按照自己的需求安装 Riru 系列的其他模块。
    • 安装过程
      • 下载好后push到手机里面,选择本地安装,全部安装完之后再重启。
      • #坑/逆向/Android逆向/Magisk :Riru最新版本的不支持和,要安装 Release v25.4.4 · RikkaApps/Riru (github.com)

    EdXposed
    • Release v0.5.2.2 · ElderDrivers/EdXposed (github.com)版本安装最新的即可
    EdXposed重启到用户空间
    • EdXposedManager
    LSPosed
    • 和EdXposed类似
      • 是Edxposed的一个分支,相比于 EdXposed,它精简了许多, 也要比后者流畅的多、省电的多。
      • Edxposed 面临着停更的风险,且稳定性欠佳,Lsposed 则可以保证长期更新,并会持续加入新的功能。
      • 它并不是一个传统的Xposed管理器,它作为一个刷入设备运行,安装风险也比传统Xposed管理器小很多。
      • LSPosed继承了Xposed的模块仓库,仓库内模块都是开源模块,安全性有了保证。
      • LSPosed本身也与时俱进,使用了Material You设计语言,支持安卓12的Monet(莫奈)取色,更美观
      • 模块可以针对开启稳定性更高,传统Xposed激活后会对所有应用生效,而LSPosed 激活后只对选中应用生效
      • ,会拖累应用的运行速度,偶尔也会产生意想不到的
    安装LSPosed
    • 安装前,请确保你的手机满足以下条件
      • 系统: Android 8.1-12
      • 已安装以上版本的Magisk Manager
      • Riru 模块
    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,模块 – 从本地安装
    • 重启设备,桌面新增的APP。打开显示“已激活”则成功刷入。
    1. 安装LSpose模块,激活LSPosed模块,选择作用域

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

     
    
    • 打开 LSPosed,点击 模块
    • 找到需要激活的模块(这里以知了模块为例)
    • 选择这个模块的作用域,比如知了模块的作用域就只有知乎
    • 重启(可选,LSPosed 使用大部分模块不需要重启,有一部分可能需要)

    系统备份与救砖

    有话要说...