本文档使用rust开发android程序,只涉及到底层开发,不涉及任何ui相关,开发前推荐安装好magisk框架,方便后面获取手机root权限,或者有别的方案可以使adb获取到root权限也行
把android看成是一个裁剪了很多模块的linux操作系统,后面的操作与概念就好理解很多了
linux权限说明
root权限,超级权限,可以随心所欲,为所欲为普通权限
Android权限说明
安全体系结构设计的核心是:默认情况下,任何应用程序都无权执行任何会对其他应用程序、操作系统或用户产生负面影响的操作
为了保护
Android用户的隐私,避免上述负面影响,Android对权限进行管理:Android应用在需要使用某些功能时必须进行权限的申请,而根据权限的保护级别,系统可能会自动授予权限,或者提示用户批准请求Android包装了一套自己的权限体系rootplatformmediashared...
root权限是超级权限,该权限可以对系统进行任意操作,这一点与linux相同提供了访问
system目录的权限,即system权限,对应Android的权限体系为platform
实验设备信息
Xiaomi Redmi note 7 Pro
rust项目创建
$ cargo new android-agent$ cargo new android-agent修改Cargo.toml的依赖信息如下
[dependencies]
tokio = { version = "1", features = ["full"]}
tracing = "0.1"
tracing-subscriber = "0.3"[dependencies]
tokio = { version = "1", features = ["full"]}
tracing = "0.1"
tracing-subscriber = "0.3"修改main.rs
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
loop {
tracing::info!("Hello world!");
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
}#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
loop {
tracing::info!("Hello world!");
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
}由于本人是在Ubuntu22环境下开发,底层C库与android的库可能有较大差异,所以编译需要依赖一个rust的交叉编译项目cross,工具安装与操作自行查看该项目文档
https://github.com/cross-rs/crosshttps://github.com/cross-rs/cross查看rust支持编译的android类型
$ rustc --print target-list |grep android
aarch64-linux-android
arm-linux-androideabi
armv7-linux-androideabi
i686-linux-android
thumbv7neon-linux-androideabi
x86_64-linux-android$ rustc --print target-list |grep android
aarch64-linux-android
arm-linux-androideabi
armv7-linux-androideabi
i686-linux-android
thumbv7neon-linux-androideabi
x86_64-linux-android由于目前测试机是真实的Android手机,Android手机基本都是arm架构的,所以编译target选择aarch64-linux-android,如果是电脑上面的虚拟手机,这些年的非苹果电脑基本都是x86_64架构的,可以选择x86_64-linux-android
使用的包可能比较新,cross工具发行release和当前时间可能存在较大时间差到时某些GLibc版本可能差异较大导致编译报错,所以还需要新建一个文件Cross.toml,配置使用最新的cross编译镜像
[target.aarch64-linux-android]
image = "ghcr.io/cross-rs/aarch64-linux-android:edge"[target.aarch64-linux-android]
image = "ghcr.io/cross-rs/aarch64-linux-android:edge"开始执行编译
$ cross build --target aarch64-linux-android -r$ cross build --target aarch64-linux-android -r使用adb把编译生成的文件推送到android手机上,注意,需要推送到/sdcard下面,/sdcard的属主/归属组是root/root
$ adb push target/aarch64-linux-android/release/android-agent /sdcard/
target/aarch64-linux-android/release/android-agent: 1 file pushed. 30.8 MB/s (2677824 bytes in 0.083s)$ adb push target/aarch64-linux-android/release/android-agent /sdcard/
target/aarch64-linux-android/release/android-agent: 1 file pushed. 30.8 MB/s (2677824 bytes in 0.083s)进入android手机shell环境
$ adb shell$ adb shelladb获取root权限,该操作是安装了Magisk之后才可以这样获取
violet:/ $ su
violet:/ #violet:/ $ su
violet:/ #执行chmod赋予执行权限,之后筛选查看权限发现并没有成功赋予权限
violet:/ # chmod a+x /sdcard/android-agent
violet:/ # ls -l /sdcard/ |grep android
-rw-rw---- 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agentviolet:/ # chmod a+x /sdcard/android-agent
violet:/ # ls -l /sdcard/ |grep android
-rw-rw---- 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agent这个时候需要把文件复制到/data下面,再赋予执行权限,如果一开始就使用adb push执行文件到/data下面会报错Permission denied,/data的属主/归属组是system/system,该文件夹可能不能直接推送文件进入
violet:/ # mv /sdcard/android-agent /data/
violet:/ # chmod a+x /data/android-agent
violet:/ # ls -l /data/ |grep android
-rwxrwx--x 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agentviolet:/ # mv /sdcard/android-agent /data/
violet:/ # chmod a+x /data/android-agent
violet:/ # ls -l /data/ |grep android
-rwxrwx--x 1 root sdcard_rw 2677824 2023-04-14 16:55 android-agent之后验证执行
violet:/ # ./data/android-agent
2023-04-14T09:15:53.752045Z INFO android_agent: Hello world!
2023-04-14T09:15:54.753759Z INFO android_agent: Hello world!
2023-04-14T09:15:55.756782Z INFO android_agent: Hello world!
2023-04-14T09:15:56.759287Z INFO android_agent: Hello world!
2023-04-14T09:15:57.762281Z INFO android_agent: Hello world!violet:/ # ./data/android-agent
2023-04-14T09:15:53.752045Z INFO android_agent: Hello world!
2023-04-14T09:15:54.753759Z INFO android_agent: Hello world!
2023-04-14T09:15:55.756782Z INFO android_agent: Hello world!
2023-04-14T09:15:56.759287Z INFO android_agent: Hello world!
2023-04-14T09:15:57.762281Z INFO android_agent: Hello world!Android shell扩展了解
android还是包含了很多工具的,比如ping
violet:/ # ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66: icmp_seq=1 ttl=64 time=0.430 msviolet:/ # ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66: icmp_seq=1 ttl=64 time=0.430 ms比如curl
violet:/ # curl https://baidu.com
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>violet:/ # curl https://baidu.com
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>查看内核信息
violet:/ # cat /proc/version
Linux version 4.14.117-perf-g288905b (builder@c4-miui-ota-bd188.bj) (clang version 8.0.11 for Android NDK) #1 SMP PREEMPT Mon Nov 8 19:38:11 CST 2021violet:/ # cat /proc/version
Linux version 4.14.117-perf-g288905b (builder@c4-miui-ota-bd188.bj) (clang version 8.0.11 for Android NDK) #1 SMP PREEMPT Mon Nov 8 19:38:11 CST 2021非root的shell权限可以读写的地址
该地址可以使用adb连接上去之后,直接cd到该路径,并可以在该路径下创建文件,可以赋予可执行权限并执行
/data/local/tmp/data/local/tmp