zhangguanzhang's Blog

[持续更新] - 安卓折腾笔记

字数统计: 2.1k阅读时长: 9 min
2024/07/21

长期记录和更新关于安卓和 Linux 的一些折腾笔记

由来

长期记录和更新关于安卓和 Linux 的一些折腾笔记,没有 Linux 和刷机基础的不要看了。

adb

下载

platform-tools

知识点

adb-pic

小米系列手机开 adb 需要登录账号和插入 sim 卡,然后 Linux 和软路由上也可以安装 adb(打通网络后可以做很多事情),不要局限在看到的物体思维上。开了 usb adb 后插入电脑上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看设备
adb devices

# 让设备 adb server 以 5555 方式运行,而非使用 usb
adb tcpip 5555

# tcp 连接
adb connect <ip>:5555

# 不带设备名就是关闭所有连接
adb disconnect [xxx]

# adb 执行任何命令的时候,如果 server 服务没有启动就会启动
# 此命令是杀掉 server 进程,Linux 和 win 都有 server 服务
# daemon 是运行在手机上的,server 管理 client 和 daemon 之间的通信
adb kill-server

# 访问本机 8888 端口转发到设备的 8080 端口
adb forward tcp:8888 tcp:8080

更多见文档 tools/adb

adb shell

一些 adb shell 命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ adb shell dumpsys battery
Current Battery Service state:
AC powered: true <-- 接入充电器
USB powered: false
Wireless powered: false
Max charging current: 0
Max charging voltage: 0
Charge counter: 2946000
status: 5
health: 2
present: true
level: 100 <--- 当前电量百分比
scale: 100
voltage: 4262 <-- 电压
temperature: 426 <-- 温度 42.6 ℃
technology: Li-poly
# 开启屏幕分析指针
adb shell settings put system pointer_location 1
# 坐标是坐上0,0 左到右是 X 上到下是 Y,下面是横屏点屏幕上一个按钮的坐标
adb shell input tap 1580 930
# 获取事件,sendevent 模拟比较麻烦
adb shell getevent -l

更多查看 https://adbinstaller.com/commands,另外 git bash 里拉取推送文件路径拼接符号不一样,可以 env 下面这样:

1
MSYS_NO_PATHCONV=1 adb -s xxx pull /storage/emulated/0/Android/data/xxx .

一些问题

打算把 adb 启动在 Linux 上,发现它 daemon 监听端口不是 bind 0.0.0.0:

1
2
3
4
$ ss -nlpt | grep adb
LISTEN 0 4 127.0.0.1:5037 0.0.0.0:* users:(("adb",pid=25471,fd=6))
# https://stackoverflow.com/questions/56130335/adb-port-forwarding-to-listen-on-all-interfaces
$ adb -a nodaemon server start

然后搜了下没有好的解决办法,有人去 hack 源码的,上面这个命令是大佬发的,只能前台运行,可以配合 screen 或者 systemd 啥的常驻。

安卓虚拟化

x86_64 机器上折腾的一些安卓虚拟化笔记,如果要在 x86_64 的安卓和安卓虚拟机或者容器内安装运行 arm64 的 apk ,需要带有 Native Bridge

Bliss OS

一个 x86_64 安卓系统,相对于 android-x86 似乎更新频繁,可以 pve 之类虚拟化导入安装,但是有些版本没带还是把 Native Bridge 删了。

Waydroid

anbox 后继 Waydroid 还没试过,是容器起的模拟器。

budtmo/docker-android

https://github.com/budtmo/docker-android 感觉太重了,而且没 arm64 架构镜像。

remote-android/redroid-doc

https://github.com/remote-android/redroid-doc 尝试运行 arm64 的 apk 成功了,chrome 的浏览器不行,需要有些依赖才可以运行,uc 浏览器也不行,最后用的 arm64 firefox 浏览器。另外发现有些 apk 安装后打开黑屏,最后从 proxmox 虚拟机切到宿主机上 docker 起才解决,也看到有人 arm64 M1 mac 上起安卓容器。

一些软件

一些软件相关

备份恢复

谷歌身份验证器

/data/data/com.google.android.apps.authenticator2/databases/databases 备份导入到新手机上覆盖

scrcpy

https://github.com/Genymobile/scrcpy 牛逼的项目,不用多说,配合 adb 使用:

1
2
3
scrcpy
-S, --turn-screen-off # 远程时候,关闭设备的屏幕
# --max-size 1024 --video-bit-rate=2M --max-fps=15 低画质

关闭屏幕这个,lcd 的触发后,如果关闭 scrcpy 后面屏幕还会亮,而 oled 的则不会,单独想 adb 实现它的关闭屏幕显示而不休眠,可以参考

还有其他很多 scrcpy 项目,以及可以很多编程语言有 scrcpy 的库,可以做到写代码控制手机和上面的应用。

adb 协议

golang

逆向

教程

常见逆向

frida

spwan

1
2
# -U usb, -f 是Attach模式,不带-f是Spawn 模式,前者会启动app注入,后者是自己选择啥时候注入
frida -U -f <app_name> -l hook.js

js 的话,hook 内容如下类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
setImmediate(function () {
Java.perform(function () {
var MainActivity = Java.use('com.example.MainActivity');

// Hook Java 方法
MainActivity.foo.implementation = function (str) {
// 调用方法
var ret = this.foo(str);
console.log('Return value:', ret);
// 返回
return ret;
};
})
})

过检测 frida Ylarod/Florida

抓包:

unit 游戏逆向

libs/{libil2cpp,libmain,libunity,libxlua}.so

1
2
3
4
5
6
# https://bbs.kanxue.com/thread-280500.htm
npm install frida-compile
npm install --save-dev frida-il2cpp-bridge
npm run watch

frida -f xxx -l hook.js

辅助逆向

刷机和 ROOT

一加13T

参考一加 13 解锁并获得 root 权限,使用 kernel SU 举例,从 Android 开发者(国内) 下载 USB 驱动 android_winusb.inf,但很搞笑的是,Android 开发者(国内)的下载链接 404,应该是谷歌哪边没传上去。

解锁

  1. 手机在 设置 - 关于本机 - 版本信息 中狂点 版本号 7 次,直到进入开发者模式,同时记下 内核版本,保存到手机以外的地方。
  2. 手机在 设置 - 系统与更新 - 开发者选项 中开启 OEM 解锁USB 调试,使用优质线连电脑,否则后面步骤不成功啥的
  3. adb reboot bootloader,手机授权电脑,重启进 bootloader
  4. fastboot flashing unlock,若一直卡在 waiting for device 可尝试手动指定设备驱动,指定上面下载的 android_winusb.inf
  5. 根据提示按下音量减选择 UNLOCK THE BOOTLOADER,再按电源键确认解锁,此刻会重启并类似恢复出厂设置一样清掉数据。

kernel SU

kernel SU 分为 LKM 和 GKI 模式,由于一加13T 内核开源且一加手机安卓版本号高,以及酷安有人编译内核,所以可以使用 GKI 模式。kernel SU 和面具 root 优点类似,使用 kernel SU 的管机器 app 修补 boot/init_boot 后安装,再刷入 GKI 内核。

kernel SU 的管理器 APP 我使用的是 SukiSU-Ultra,下载安装到手机上。

修补和刷入 init_boot

安卓 13+ 后是修补 init_boot 不再是 boot 了,从之前记录的内核版本下载手机系统对应的 ROM,我这里是微信公众号 one+更新 获取,下载后使用 FastbootEnhancePayload.bin 解包从 ROM 提取 init_boot.img。提取后传到手机的 Download 内,打开 SukiSU-Ultra 上面内核版本上面可以点击,进去后 LKM 修补/安装 修补 Download 内的 init_boot.img,会在 Download 内生成 kernelsu_patched_20250901_155148.img 类似文件。该文件传到电脑上,手机连电脑:

手机开机同时按爪 电源键+音量减键进入 fastboot 模式后刷入

1
fastboot flash init_boot kernelsu_patched_20250901_155148.img

刷入手机后如果重启不了一般是下错 ROM 了,或者像我一样使用老的 fastboot flash boot 方式刷入了 init_boot 造成(后面 flash boot 和 flash init_boot 俩都刷才好)。

ak3

上面修补 init_boot 刷入后是 LKM 模式,要刷入 GKI 的 anykernel3 才是 GKI 模式,我是使用酷安的古晨,可以 他 github 下载,下载后打开 SukiSU-Ultra刷写 AnyKernel3 选择下载的,刷入完成后重启。打开 SukiSU-Ultra 上面的菜单 - 基本设置 - 下拉 开启 开机自启动。

模块相关

https://github.com/Dr-TSNG/ZygiskNext
https://github.com/JingMatrix/LSPosed 安装后重启,点击它下面的启动后 momo 检测里显示的 bootloader 未锁定无了
TEE 损坏 https://github.com/5ec1cff/TrickyStore,其他几个开源的貌似不稳定,如果不打游戏可以尝试下 https://github.com/KOWX712/Tricky-Addon-Update-Target-List/releases https://github.com/beakthoven/TrickyStoreOSS

TEE key 查看 *#899# - 手动测试 - 工程模式 - 其他 key

广告关闭和禁用内置 app

很多界面进去关闭,参照视频 https://www.bilibili.com/video/BV1fw7tziE1M/

1
2
3
4
5
6
7
8
9
10
11
#儿童模式
pm uninstall --user 0 com.coloros.childrenspace

pm uninstall --user 0 com.coloros.familyguard
# 数字健康与家人守护
pm uninstall --user 0 com.coloros.digitalwellbeing
# 音乐
pm uninstall --user 0 com.heytap.music

adb shell pm disable-user com.oplus.sau
adb shell pm disable-user com.oplus.ota
CATALOG
  1. 1. 由来
  2. 2. adb
    1. 2.1. 下载
    2. 2.2. 知识点
    3. 2.3. adb shell
    4. 2.4. 一些问题
  3. 3. 安卓虚拟化
    1. 3.1. Bliss OS
    2. 3.2. Waydroid
    3. 3.3. budtmo/docker-android
    4. 3.4. remote-android/redroid-doc
  4. 4. 一些软件
    1. 4.1. 备份恢复
      1. 4.1.1. 谷歌身份验证器
    2. 4.2. scrcpy
  5. 5. adb 协议
    1. 5.1. golang
  6. 6. 逆向
    1. 6.1. 教程
    2. 6.2. 常见逆向
    3. 6.3. frida
    4. 6.4. unit 游戏逆向
    5. 6.5. 辅助逆向
  7. 7. 刷机和 ROOT
    1. 7.1. 一加13T
      1. 7.1.1. 解锁
      2. 7.1.2. kernel SU
      3. 7.1.3. 修补和刷入 init_boot
      4. 7.1.4. ak3
      5. 7.1.5. 模块相关
      6. 7.1.6. 广告关闭和禁用内置 app