-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3131ece
commit 45f6809
Showing
8 changed files
with
410 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,23 @@ | ||
#这个脚本将会在 Android 系统启动完毕后以服务模式运行 | ||
# 这个脚本将在 Android 系统启动完毕后以服务模式运行 | ||
#!/bin/sh | ||
# boot-completed.sh | ||
# | ||
# 这个脚本会在 Android 系统完全启动并发送 ACTION_BOOT_COMPLETED 广播后执行。 | ||
# 它在 late_start 服务模式下运行,这意味着它与启动过程的其余部分并行操作。 | ||
# | ||
# 用法: | ||
# - 将此脚本放置在模块的目录中,以便在系统启动完成后自动执行。 | ||
# - 通过运行 `chmod +x boot-completed.sh` 确保脚本是可执行的。 | ||
# | ||
# 环境变量: | ||
# - MODDIR: 模块的基本目录路径。使用此变量引用模块的文件。 | ||
# - KSU: 表示脚本在 KernelSU 环境中运行。此值设置为 `true`。 | ||
# | ||
# 示例: | ||
# - 使用此脚本执行系统完全启动后需要执行的任务,例如启动服务或执行清理任务。 | ||
# | ||
# 注意: | ||
# - 避免使用可能阻塞或显著延迟启动过程的命令。 | ||
# - 确保此脚本启动的任何后台任务都得到妥善管理,以避免资源泄漏。 | ||
# | ||
# 有关更多信息,请参阅 KernelSU 文档中的启动脚本部分。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,48 @@ | ||
# customize.sh 脚本说明 | ||
# | ||
# 脚本功能: | ||
# 1. 打印自定义安装过程的开始信息。 | ||
# 2. 检查设备架构,并根据架构类型打印相应信息或终止安装。 | ||
# 3. 检查 Android API 版本,确保版本在支持范围内,否则终止安装。 | ||
# 4. 设置指定文件和目录的权限。 | ||
# 5. 打印自定义安装过程的完成信息。 | ||
# | ||
# 脚本详细说明: | ||
# - ui_print: 用于在安装过程中打印信息到控制台。 | ||
# - case "$ARCH" in ... esac: 检查设备架构,支持 "arm", "arm64", "x86", "x64" 四种架构。 | ||
# - abort: 用于终止安装过程并打印错误信息。 | ||
# - if [ "$API" -lt 23 ]; then ... fi: 检查 Android API 版本,要求版本不低于 23。 | ||
# - set_perm: 设置单个文件的权限。 | ||
# - set_perm_recursive: 递归设置目录及其内容的权限。 | ||
|
||
|
||
|
||
|
||
# 示例 customize.sh | ||
|
||
# 打印信息到控制台 | ||
ui_print "开始自定义安装过程..." | ||
|
||
# 检查设备架构 | ||
case "$ARCH" in | ||
"arm" | "arm64") | ||
ui_print "设备架构为 ARM" | ||
;; | ||
"x86" | "x64") | ||
ui_print "设备架构为 x86" | ||
;; | ||
*) | ||
abort "不支持的设备架构: $ARCH" | ||
;; | ||
esac | ||
|
||
# 检查 Android API 版本 | ||
if [ "$API" -lt 23 ]; then | ||
abort "不支持的 Android 版本: $API" | ||
fi | ||
|
||
# 设置文件权限 | ||
set_perm "$MODPATH/somefile" 0 0 0644 | ||
set_perm_recursive "$MODPATH/somedir" 0 0 0755 0644 | ||
|
||
ui_print "自定义安装过程完成" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,10 @@ | ||
#可选文件 | ||
#这个脚本将会在 post-fs-data 模式下运行 | ||
# | ||
# 可选文件 | ||
# 这个脚本将会在 post-fs-data 模式下运行 | ||
# | ||
# 说明: | ||
# post-fs-data.sh 是一个可选的启动脚本文件,它将在 post-fs-data 模式下运行。 | ||
# 在这个模式下,脚本会在任何模块被挂载之前执行,这使得模块开发者可以在模块被挂载之前动态地调整它们的模块。 | ||
# 这个阶段发生在 Zygote 启动之前,并且是阻塞的,在执行完成之前或者 10 秒钟之后,启动过程会暂停。 | ||
# 请注意,使用 setprop 会导致启动过程死锁,建议使用 resetprop -n <prop_name> <prop_value> 代替。 | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,30 @@ | ||
|
||
# 这个脚本将在 post-mount 模式下运行。 | ||
# | ||
# post-mount 模式说明: | ||
# - 这个阶段是阻塞的。在执行完成之前或者 10 秒钟之后,启动过程会暂停。 | ||
# - 脚本在任何模块被挂载之前运行。这使得模块开发者可以在模块被挂载之前动态地调整它们的模块。 | ||
# - 这个阶段发生在 Zygote 启动之前。 | ||
# - 使用 setprop 会导致启动过程死锁!请使用 `resetprop -n <prop_name> <prop_value>` 代替。 | ||
# - **只有在必要时才在此模式下运行脚本**。 | ||
# | ||
# 变量: | ||
# - `MODDIR=${0%/*}`:获取模块的基本目录路径。 | ||
# - `KSU` (bool):标记此脚本运行在 KernelSU 环境下,此变量的值将永远为 `true`。 | ||
# - `KSU_VER` (string):KernelSU 当前的版本名字 (如: `v0.4.0`)。 | ||
# - `KSU_VER_CODE` (int):KernelSU 用户空间当前的版本号 (如. `10672`)。 | ||
# - `KSU_KERNEL_VER_CODE` (int):KernelSU 内核空间当前的版本号 (如. `10672`)。 | ||
# - `BOOTMODE` (bool):此变量在 KernelSU 中永远为 `true`。 | ||
# - `MODPATH` (path):当前模块的安装目录。 | ||
# - `TMPDIR` (path):可以存放临时文件的目录。 | ||
# - `ZIPFILE` (path):当前模块的安装包文件。 | ||
# - `ARCH` (string):设备的 CPU 构架,有如下几种: `arm`, `arm64`, `x86`, or `x64`。 | ||
# - `IS64BIT` (bool):是否是 64 位设备。 | ||
# - `API` (int):当前设备的 Android API 版本 (如:Android 6.0 上为 `23`)。 | ||
# | ||
# 函数: | ||
# - `ui_print <msg>`:打印 <msg> 到控制台。避免使用 'echo',因为它不会显示在自定义恢复的控制台中。 | ||
# - `abort <msg>`:打印错误信息 <msg> 到控制台并终止安装。避免使用 'exit',因为它会跳过终止清理步骤。 | ||
# - `set_perm <target> <owner> <group> <permission> [context]`:设置目标文件的权限和所有者。 | ||
# - `set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission> [context]`:递归设置目录及其内容的权限和所有者。 | ||
#这个脚本将会在 post-mount 模式下运行 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,185 @@ | ||
#这个文件中的 SELinux 策略将会在系统启动时加载 | ||
# 这个文件中的 SELinux 策略将会在系统启动时加载 | ||
# 你可以在这里定义你的 SELinux 策略规则 | ||
|
||
# 示例: | ||
# allow <源类型> <目标类型> : <类> { <权限> }; | ||
# 例如: | ||
# allow my_app my_data_file: file { read write }; | ||
|
||
# 详细说明: | ||
# 1. 源类型(source type):这是发起操作的主体类型,例如一个应用程序的类型。 | ||
# 2. 目标类型(target type):这是操作的目标类型,例如一个文件的类型。 | ||
# 3. 类(class):这是操作的对象类别,例如文件、目录、进程等。 | ||
# 4. 权限(permissions):这是允许的具体操作,例如读取、写入、执行等。 | ||
|
||
# 你可以使用以下命令来查看系统中已有的类型、类和权限: | ||
# sesearch -A -s <源类型> -t <目标类型> -c <类> -p <权限> | ||
|
||
# 注意事项: | ||
# 1. 确保你的策略规则不会破坏系统的安全性。 | ||
# 2. 在测试环境中验证你的策略规则,确保它们按预期工作。 | ||
# 3. 避免使用过于宽泛的权限,尽量使用最小权限原则。 | ||
|
||
# 例如,允许 my_app 类型的进程读取和写入 my_data_file 类型的文件: | ||
allow my_app my_data_file: file { read write }; | ||
|
||
# 例如,允许 web_server 类型的进程读取和执行 web_content 类型的文件: | ||
allow web_server web_content: file { read execute }; | ||
|
||
# 例如,允许 database_server 类型的进程读取、写入和创建 database_data 类型的文件: | ||
allow database_server database_data: file { read write create }; | ||
|
||
# 例如,允许 backup_service 类型的进程读取和写入 backup_storage 类型的目录: | ||
allow backup_service backup_storage: dir { read write }; | ||
|
||
# 例如,允许 admin_tool 类型的进程管理 system_log 类型的文件: | ||
allow admin_tool system_log: file { read write append }; | ||
|
||
# 例如,允许 network_service 类型的进程绑定到 network_port 类型的端口: | ||
allow network_service network_port: tcp_socket { name_bind }; | ||
|
||
# 例如,允许 user_app 类型的进程读取和写入 user_data 类型的文件: | ||
allow user_app user_data: file { read write }; | ||
|
||
# 例如,允许 security_daemon 类型的进程读取和写入 security_config 类型的文件: | ||
allow security_daemon security_config: file { read write }; | ||
|
||
# 例如,允许 media_player 类型的进程读取 media_content 类型的文件: | ||
allow media_player media_content: file { read }; | ||
|
||
# 例如,允许 printer_service 类型的进程读取和写入 print_jobs 类型的文件: | ||
allow printer_service print_jobs: file { read write }; | ||
|
||
# 例如,允许 update_service 类型的进程读取和写入 update_package 类型的文件: | ||
allow update_service update_package: file { read write }; | ||
|
||
# 例如,允许 audit_service 类型的进程读取和写入 audit_logs 类型的文件: | ||
allow audit_service audit_logs: file { read write }; | ||
|
||
# 例如,允许 vpn_service 类型的进程绑定到 vpn_port 类型的端口: | ||
allow vpn_service vpn_port: tcp_socket { name_bind }; | ||
|
||
# 例如,允许 email_client 类型的进程读取和写入 email_data 类型的文件: | ||
allow email_client email_data: file { read write }; | ||
|
||
# 例如,允许 chat_app 类型的进程读取和写入 chat_history 类型的文件: | ||
allow chat_app chat_history: file { read write }; | ||
|
||
# 例如,允许 game_engine 类型的进程读取和写入 game_assets 类型的文件: | ||
allow game_engine game_assets: file { read write }; | ||
|
||
# 例如,允许 cloud_sync 类型的进程读取和写入 cloud_storage 类型的文件: | ||
allow cloud_sync cloud_storage: file { read write }; | ||
|
||
# 例如,允许 analytics_service 类型的进程读取和写入 analytics_data 类型的文件: | ||
allow analytics_service analytics_data: file { read write }; | ||
|
||
# 例如,允许 voice_assistant 类型的进程读取和写入 voice_commands 类型的文件: | ||
allow voice_assistant voice_commands: file { read write }; | ||
|
||
# 例如,允许 sensor_service 类型的进程读取和写入 sensor_data 类型的文件: | ||
allow sensor_service sensor_data: file { read write }; | ||
|
||
# 例如,允许 payment_service 类型的进程读取和写入 transaction_records 类型的文件: | ||
allow payment_service transaction_records: file { read write }; | ||
|
||
# 例如,不允许 my_app 类型的进程读取和写入 system_config 类型的文件: | ||
dontaudit my_app system_config: file { read write }; | ||
|
||
# 例如,不允许 guest_user 类型的进程执行 admin_tool 类型的文件: | ||
dontaudit guest_user admin_tool: file { execute }; | ||
|
||
# 例如,不允许 untrusted_app 类型的进程访问 sensitive_data 类型的文件: | ||
dontaudit untrusted_app sensitive_data: file { read write }; | ||
|
||
# 例如,不允许 external_service 类型的进程绑定到 internal_port 类型的端口: | ||
dontaudit external_service internal_port: tcp_socket { name_bind }; | ||
|
||
# 例如,不允许 test_app 类型的进程读取和写入 production_data 类型的文件: | ||
dontaudit test_app production_data: file { read write }; | ||
|
||
# 例如,允许 maintenance_service 类型的进程读取和写入 maintenance_logs 类型的文件: | ||
allow maintenance_service maintenance_logs: file { read write }; | ||
|
||
# 例如,允许 monitoring_service 类型的进程读取和写入 monitoring_data 类型的文件: | ||
allow monitoring_service monitoring_data: file { read write }; | ||
|
||
# 例如,允许 scheduler_service 类型的进程读取和写入 schedule_data 类型的文件: | ||
allow scheduler_service schedule_data: file { read write }; | ||
|
||
# 例如,允许 notification_service 类型的进程读取和写入 notification_data 类型的文件: | ||
allow notification_service notification_data: file { read write }; | ||
|
||
# 例如,允许 sync_service 类型的进程读取和写入 sync_data 类型的文件: | ||
allow sync_service sync_data: file { read write }; | ||
|
||
# 例如,允许 logging_service 类型的进程读取和写入 log_files 类型的文件: | ||
allow logging_service log_files: file { read write }; | ||
|
||
# 例如,允许 cache_service 类型的进程读取和写入 cache_data 类型的文件: | ||
allow cache_service cache_data: file { read write }; | ||
|
||
# 例如,允许 indexing_service 类型的进程读取和写入 index_data 类型的文件: | ||
allow indexing_service index_data: file { read write }; | ||
|
||
# 例如,允许 search_service 类型的进程读取和写入 search_index 类型的文件: | ||
allow search_service search_index: file { read write }; | ||
|
||
# 例如,允许 backup_service 类型的进程读取和写入 backup_data 类型的文件: | ||
allow backup_service backup_data: file { read write }; | ||
|
||
# 例如,允许 sync_service 类型的进程读取和写入 sync_logs 类型的文件: | ||
allow sync_service sync_logs: file { read write }; | ||
|
||
# 例如,允许 telemetry_service 类型的进程读取和写入 telemetry_data 类型的文件: | ||
allow telemetry_service telemetry_data: file { read write }; | ||
|
||
# 例如,允许 update_service 类型的进程读取和写入 update_logs 类型的文件: | ||
allow update_service update_logs: file { read write }; | ||
|
||
# 例如,允许 diagnostic_service 类型的进程读取和写入 diagnostic_data 类型的文件: | ||
allow diagnostic_service diagnostic_data: file { read write }; | ||
|
||
# 例如,允许 alert_service 类型的进程读取和写入 alert_logs 类型的文件: | ||
allow alert_service alert_logs: file { read write }; | ||
|
||
# 例如,允许 api_service 类型的进程读取和写入 api_logs 类型的文件: | ||
allow api_service api_logs: file { read write }; | ||
|
||
# 例如,允许 auth_service 类型的进程读取和写入 auth_logs 类型的文件: | ||
allow auth_service auth_logs: file { read write }; | ||
|
||
# 例如,允许 config_service 类型的进程读取和写入 config_files 类型的文件: | ||
allow config_service config_files: file { read write }; | ||
|
||
# 例如,允许 data_service 类型的进程读取和写入 data_files 类型的文件: | ||
allow data_service data_files: file { read write }; | ||
|
||
# 例如,允许 event_service 类型的进程读取和写入 event_logs 类型的文件: | ||
allow event_service event_logs: file { read write }; | ||
|
||
# 例如,允许 file_service 类型的进程读取和写入 file_data 类型的文件: | ||
allow file_service file_data: file { read write }; | ||
|
||
# 例如,允许 image_service 类型的进程读取和写入 image_files 类型的文件: | ||
allow image_service image_files: file { read write }; | ||
|
||
# 例如,允许 video_service 类型的进程读取和写入 video_files 类型的文件: | ||
allow video_service video_files: file { read write }; | ||
|
||
# 例如,允许 audio_service 类型的进程读取和写入 audio_files 类型的文件: | ||
allow audio_service audio_files: file { read write }; | ||
|
||
# 例如,允许 report_service 类型的进程读取和写入 report_files 类型的文件: | ||
allow report_service report_files: file { read write }; | ||
|
||
# 例如,允许 log_service 类型的进程读取和写入 log_data 类型的文件: | ||
allow log_service log_data: file { read write }; | ||
|
||
|
||
|
||
# 你可以参考以下网站以获取更多关于 SELinux 策略规则的信息: | ||
# https://selinuxproject.org/page/Main_Page | ||
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/index | ||
# https://wiki.archlinux.org/title/SELinux |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,60 @@ | ||
#这个脚本将会在 late_start 服务模式下运行 | ||
# 获取模块的基本目录路径 | ||
MODDIR=${0%/*} | ||
|
||
# 在此处编写您的服务脚本逻辑 | ||
# 例如,您可以在此处添加需要在 late_start 服务模式下运行的命令 | ||
|
||
# 示例:打印一条消息到日志 | ||
echo "服务脚本已启动" >> /data/local/tmp/service.log | ||
|
||
# 示例:设置系统属性 | ||
resetprop ro.example.property "example_value" | ||
|
||
# 示例:启动一个后台服务 | ||
nohup some_background_service & | ||
|
||
# 示例:执行一个耗时的任务 sleep 10等待10秒 | ||
sleep 10 | ||
|
||
# 示例:打印一条消息到日志 | ||
echo "服务脚本已完成" >> /data/local/tmp/service.log | ||
|
||
# 请注意: | ||
# - 避免使用可能阻塞或显著延迟启动过程的命令。 | ||
# - 确保此脚本启动的任何后台任务都得到妥善管理,以避免资源泄漏。 | ||
|
||
# 有关更多信息,请参阅 KernelSU 文档中的启动脚本部分。 | ||
|
||
# 示例:检查设备的架构并执行相应的操作 | ||
if [ "$(uname -m)" = "aarch64" ]; then | ||
echo "设备架构为 arm64" >> /data/local/tmp/service.log | ||
# 在此处添加针对 arm64 架构的命令 | ||
else | ||
echo "设备架构为其他" >> /data/local/tmp/service.log | ||
# 在此处添加针对其他架构的命令 | ||
fi | ||
|
||
# 示例:检查某个文件是否存在 | ||
if [ -f /data/local/tmp/some_file ]; then | ||
echo "文件存在" >> /data/local/tmp/service.log | ||
# 在此处添加文件存在时的处理逻辑 | ||
else | ||
echo "文件不存在" >> /data/local/tmp/service.log | ||
# 在此处添加文件不存在时的处理逻辑 | ||
fi | ||
|
||
# 示例:设置权限 | ||
chmod 644 /data/local/tmp/service.log | ||
|
||
# 示例:创建一个目录 | ||
mkdir -p /data/local/tmp/my_service_dir | ||
|
||
# 示例:写入环境变量到文件 | ||
echo "MY_ENV_VAR=my_value" > /data/local/tmp/my_service_dir/env_vars | ||
|
||
# 示例:启动另一个脚本 | ||
sh /data/local/tmp/my_service_dir/another_script.sh & Compare this snippet from MyModule/service.sh: # 这个脚本将在服务模式下运行 | ||
|
||
|
||
|
Oops, something went wrong.