Skip to content

Commit 9e546db

Browse files
committed
调整复制系统原本配置文件的时机至 App 启动时
优化权限设置,防止文件对外暴露,消除安全隐患
1 parent c6199a6 commit 9e546db

File tree

5 files changed

+50
-61
lines changed

5 files changed

+50
-61
lines changed

app/src/main/assets/mod.zip

3.13 KB
Binary file not shown.

app/src/main/java/com/itosfish/colorfeatureenhance/MainActivity.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.itosfish.colorfeatureenhance
22

33
import android.annotation.SuppressLint
44
import android.os.Bundle
5-
import android.widget.Toast
65
import androidx.activity.ComponentActivity
76
import androidx.activity.compose.setContent
87
import androidx.activity.enableEdgeToEdge
@@ -12,6 +11,7 @@ import androidx.compose.runtime.mutableStateOf
1211
import androidx.compose.runtime.remember
1312
import androidx.compose.runtime.setValue
1413
import androidx.compose.ui.tooling.preview.Preview
14+
import androidx.lifecycle.lifecycleScope
1515
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1616
import com.itosfish.colorfeatureenhance.config.ConfigMergeManager
1717
import com.itosfish.colorfeatureenhance.data.remote.RemoteConfigManager
@@ -26,7 +26,6 @@ import com.itosfish.colorfeatureenhance.utils.CSU
2626
import com.itosfish.colorfeatureenhance.utils.ConfigUtils
2727
import com.itosfish.colorfeatureenhance.utils.DisclaimerManager
2828
import com.itosfish.colorfeatureenhance.utils.ModuleAutoUpdater
29-
import androidx.lifecycle.lifecycleScope
3029
import kotlinx.coroutines.CoroutineScope
3130
import kotlinx.coroutines.Dispatchers
3231
import kotlinx.coroutines.launch
@@ -135,15 +134,18 @@ class MainActivity : ComponentActivity() {
135134
// 异步执行配置合并和云端配置更新
136135
CoroutineScope(Dispatchers.Main).launch {
137136
try {
138-
// 1. 先执行配置合并
137+
// 1. 复制系统原本配置
138+
ConfigUtils.copySystemConfig()
139+
140+
// 2. 执行配置合并
139141
val mergeSuccess = ConfigMergeManager.performConfigMerge()
140142
if (mergeSuccess) {
141143
CLog.i("MainActivity", "配置合并完成")
142144
} else {
143145
CLog.w("MainActivity", "配置合并失败")
144146
}
145147

146-
// 2. 异步检查云端配置更新(不阻塞主流程)
148+
// 3. 异步检查云端配置更新(不阻塞主流程)
147149
launch(Dispatchers.IO) {
148150
try {
149151
val remoteConfigManager =

app/src/main/java/com/itosfish/colorfeatureenhance/utils/ConfigUtils.kt

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.itosfish.colorfeatureenhance.utils
22

3+
import android.system.Os
34
import android.util.Log
45
import com.itosfish.colorfeatureenhance.MainActivity.Companion.app
56
import java.io.File
@@ -10,7 +11,7 @@ import java.io.FileOutputStream
1011
* 负责配置目录初始化、模块安装等基础功能
1112
*/
1213
object ConfigUtils {
13-
const val LATEST_MODULE_VERSION = 19
14+
const val LATEST_MODULE_VERSION = 20
1415

1516
private const val TAG = "ConfigUtils"
1617

@@ -136,7 +137,7 @@ object ConfigUtils {
136137
}
137138

138139
/**
139-
* 确保配置目录有正确的权限(简化版:统一使用777权限
140+
* 确保配置目录有正确的权限(简化版:统一使用660权限
140141
*/
141142
private fun ensureProperPermissions(): Boolean {
142143
return try {
@@ -148,7 +149,7 @@ object ConfigUtils {
148149

149150
// 检查是否可写
150151
if (!configDir.canWrite()) {
151-
CLog.w(TAG, "配置目录无写权限,使用简化权限修复(777权限")
152+
CLog.w(TAG, "配置目录无写权限,使用简化权限修复(660权限")
152153

153154
val fixCmd = """
154155
CONFIG_DIR="$configsDir"
@@ -159,12 +160,12 @@ object ConfigUtils {
159160
exit 1
160161
fi
161162
162-
echo "设置配置目录及所有子目录和文件为777权限..."
163+
echo "设置配置目录及所有子目录和文件为660权限..."
163164
164-
# 统一设置777权限
165-
chmod 777 "${'$'}CONFIG_DIR" 2>/dev/null
166-
find "${'$'}CONFIG_DIR" -type d -exec chmod 777 {} \; 2>/dev/null
167-
find "${'$'}CONFIG_DIR" -type f -exec chmod 777 {} \; 2>/dev/null
165+
# 统一设置660权限
166+
chmod 660 "${'$'}CONFIG_DIR" 2>/dev/null
167+
find "${'$'}CONFIG_DIR" -type d -exec chmod 660 {} \; 2>/dev/null
168+
find "${'$'}CONFIG_DIR" -type f -exec chmod 660 {} \; 2>/dev/null
168169
169170
# 验证结果
170171
FINAL_PERM=${'$'}(stat -c %a "${'$'}CONFIG_DIR" 2>/dev/null)
@@ -474,4 +475,17 @@ object ConfigUtils {
474475
CLog.e(TAG, "设置模块目录权限时发生异常", e)
475476
}
476477
}
478+
479+
fun copySystemConfig() {
480+
CLog.i(TAG, "开始复制系统原本配置")
481+
try {
482+
CSU.runWithSu("""
483+
busybox ash /data/adb/modules/ColorOSFeaturesEnhance/copy.sh ${Os.getuid()}
484+
""".trimIndent()).apply {
485+
CLog.d(TAG, "复制系统原本配置结果: $exitCode")
486+
}
487+
} catch (e: Exception) {
488+
CLog.e(TAG, "复制系统原本配置时发生异常", e)
489+
}
490+
}
477491
}
Lines changed: 21 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/system/bin/sh
2-
# ColorOS Features Enhance - Service脚本(简化版)
2+
# ColorOS Features Enhance - Copy脚本(简化版)
33
# 等待用户解锁后,将临时配置复制到app内部存储
44
MODDIR=${0%/*}
55

@@ -16,50 +16,20 @@ OPLUS_FEATURES_FILE="com.oplus.oplus-feature.xml"
1616

1717
# 日志函数
1818
log_info() {
19-
echo "[ColorFeatureEnhance-Service] $(date '+%Y-%m-%d %H:%M:%S') $1" >> /cache/colorfeature_enhance.log
20-
echo "[ColorFeatureEnhance-Service] $1"
19+
echo "[ColorFeatureEnhance-Copy] $(date '+%Y-%m-%d %H:%M:%S') $1" >> /cache/colorfeature_enhance.log
20+
echo "[ColorFeatureEnhance-Copy] $1"
2121
}
2222

2323
log_debug() {
24-
echo "[ColorFeatureEnhance-Service-DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $1" >> /cache/colorfeature_enhance.log
24+
echo "[ColorFeatureEnhance-Copy-DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $1" >> /cache/colorfeature_enhance.log
2525
}
2626

27-
log_info "=== Service脚本启动 ==="
27+
log_info "=== Copy脚本启动 ==="
2828
log_debug "MODDIR: $MODDIR"
2929
log_debug "APP_DATA_DIR: $APP_DATA_DIR"
3030
log_debug "SYSTEM_BASELINE_DIR: $SYSTEM_BASELINE_DIR"
3131
log_debug "MODULE_TEMP_DIR: $MODULE_TEMP_DIR"
3232

33-
# 等待系统完全启动
34-
wait_for_boot_complete() {
35-
log_info "等待系统启动完成..."
36-
while [ "$(getprop sys.boot_completed)" != "1" ]; do
37-
sleep 3
38-
done
39-
log_info "系统启动完成"
40-
}
41-
42-
# 创建应用目录(如果不存在)
43-
create_app_directories() {
44-
log_info "检查并创建应用目录..."
45-
46-
# 创建基础目录
47-
mkdir -p "$APP_DATA_DIR" 2>/dev/null
48-
mkdir -p "$SYSTEM_BASELINE_DIR" 2>/dev/null
49-
50-
# 设置权限(简单粗暴)
51-
chmod -R 777 "$APP_DATA_DIR" 2>/dev/null
52-
53-
if [ -d "$SYSTEM_BASELINE_DIR" ]; then
54-
log_info "应用目录创建成功: $SYSTEM_BASELINE_DIR"
55-
log_debug "目录权限: $(ls -ld "$SYSTEM_BASELINE_DIR" 2>/dev/null || echo "无法获取")"
56-
return 0
57-
else
58-
log_info "应用目录创建失败,但继续执行: $SYSTEM_BASELINE_DIR"
59-
return 1
60-
fi
61-
}
62-
6333
# 复制临时配置到app内部存储
6434
copy_temp_to_app() {
6535
log_info "开始复制临时配置到app存储"
@@ -89,7 +59,8 @@ copy_temp_to_app() {
8959
cp "$MODULE_TEMP_DIR/$APP_FEATURES_FILE" "$SYSTEM_BASELINE_DIR/" 2>/dev/null
9060
if [ -f "$SYSTEM_BASELINE_DIR/$APP_FEATURES_FILE" ]; then
9161
log_info "成功复制: $APP_FEATURES_FILE"
92-
chmod 777 "$SYSTEM_BASELINE_DIR/$APP_FEATURES_FILE" 2>/dev/null
62+
chmod 660 "$SYSTEM_BASELINE_DIR/$APP_FEATURES_FILE" 2>/dev/null
63+
chown "${1}:ext_data_rw" "$SYSTEM_BASELINE_DIR/$APP_FEATURES_FILE" 2>/dev/null
9364
copied_count=$((copied_count + 1))
9465
else
9566
log_info "复制失败: $APP_FEATURES_FILE"
@@ -104,7 +75,8 @@ copy_temp_to_app() {
10475
cp "$MODULE_TEMP_DIR/$OPLUS_FEATURES_FILE" "$SYSTEM_BASELINE_DIR/" 2>/dev/null
10576
if [ -f "$SYSTEM_BASELINE_DIR/$OPLUS_FEATURES_FILE" ]; then
10677
log_info "成功复制: $OPLUS_FEATURES_FILE"
107-
chmod 777 "$SYSTEM_BASELINE_DIR/$OPLUS_FEATURES_FILE" 2>/dev/null
78+
chmod 660 "$SYSTEM_BASELINE_DIR/$OPLUS_FEATURES_FILE" 2>/dev/null
79+
chown "${1}:ext_data_rw" "$SYSTEM_BASELINE_DIR/$OPLUS_FEATURES_FILE" 2>/dev/null
10880
copied_count=$((copied_count + 1))
10981
else
11082
log_info "复制失败: $OPLUS_FEATURES_FILE"
@@ -116,7 +88,8 @@ copy_temp_to_app() {
11688
# 复制时间戳文件
11789
# if [ -f "$MODULE_TEMP_DIR/last_copy.txt" ]; then
11890
# cp "$MODULE_TEMP_DIR/last_copy.txt" "$SYSTEM_BASELINE_DIR/" 2>/dev/null
119-
# chmod 777 "$SYSTEM_BASELINE_DIR/last_copy.txt" 2>/dev/null
91+
# chmod 660 "$SYSTEM_BASELINE_DIR/last_copy.txt" 2>/dev/null
92+
# chown "${1}:ext_data_rw" "$SYSTEM_BASELINE_DIR/last_copy.txt" 2>/dev/null
12093
# log_debug "时间戳文件复制完成"
12194
# fi
12295

@@ -135,6 +108,12 @@ copy_temp_to_app() {
135108
main() {
136109
log_debug "主流程开始执行"
137110

111+
# 检查是否传入应用 UID 参数
112+
if [ -z "$1" ]; then
113+
log_info "未传入应用 UID 参数,跳过操作"
114+
return 0
115+
fi
116+
138117
# 检查临时目录是否有配置文件
139118
if [ ! -d "$MODULE_TEMP_DIR" ]; then
140119
log_info "临时目录不存在,跳过操作: $MODULE_TEMP_DIR"
@@ -146,17 +125,11 @@ main() {
146125
return 0
147126
fi
148127

149-
# 等待系统启动完成
150-
wait_for_boot_complete
151-
152-
# 创建应用目录
153-
create_app_directories
154-
155128
# 复制配置文件
156-
copy_temp_to_app
129+
copy_temp_to_app $1
157130

158-
log_info "=== Service脚本执行完成 ==="
131+
log_info "=== Copy脚本执行完成 ==="
159132
}
160133

161-
# 在后台执行主流程
162-
main &
134+
# 执行主流程
135+
main "$@"

exampleConfig/mod/module.prop

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
id=ColorOSFeaturesEnhance
22
name=ColorOS特性补全 [程序自动创建]
33
version=0.3
4-
versionCode=19
4+
versionCode=20
55
author=酷安@ItosEO @yangFenTuoZi @盼干长安月夜
66
description=程序自动创建,挂载ColorOS特性补全配置
77
minMagisk=28100

0 commit comments

Comments
 (0)