diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleUtils.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleUtils.kt index d64f93f6..49e86deb 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleUtils.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleUtils.kt @@ -9,9 +9,6 @@ import java.nio.charset.StandardCharsets import java.util.zip.ZipInputStream import com.sukisu.ultra.R import android.util.Log -import com.sukisu.ultra.Natives -import java.io.File -import java.io.FileOutputStream import java.io.IOException object ModuleUtils { @@ -142,109 +139,4 @@ object ModuleUtils { null } } -} - -// 模块签名验证工具类 -object ModuleSignatureUtils { - private const val TAG = "ModuleSignatureUtils" - - fun verifyModuleSignature(context: Context, moduleUri: Uri): Boolean { - return try { - // 创建临时文件 - val tempFile = File(context.cacheDir, "temp_module_${System.currentTimeMillis()}.zip") - - // 复制URI内容到临时文件 - context.contentResolver.openInputStream(moduleUri)?.use { inputStream -> - FileOutputStream(tempFile).use { outputStream -> - inputStream.copyTo(outputStream) - } - } - - // 调用native方法验证签名 - val isVerified = Natives.verifyModuleSignature(tempFile.absolutePath) - - // 清理临时文件 - tempFile.delete() - - Log.d(TAG, "Module signature verification result: $isVerified") - isVerified - } catch (e: Exception) { - Log.e(TAG, "Error verifying module signature", e) - false - } - } - -} - -// 验证模块签名 -fun verifyModuleSignature(context: Context, moduleUri: Uri): Boolean { - return ModuleSignatureUtils.verifyModuleSignature(context, moduleUri) -} - -object ModuleOperationUtils { - private const val TAG = "ModuleOperationUtils" - - fun handleModuleInstallSuccess(context: Context, moduleUri: Uri, isSignatureVerified: Boolean) { - if (!isSignatureVerified) { - Log.d(TAG, "模块签名未验证,跳过创建验证标志") - return - } - - try { - // 从ZIP文件提取模块ID - val moduleId = ModuleUtils.extractModuleId(context, moduleUri) - if (moduleId == null) { - Log.e(TAG, "无法提取模块ID,无法创建验证标志") - return - } - - // 创建验证标志文件 - val success = ModuleVerificationManager.createVerificationFlag(moduleId) - if (success) { - Log.d(TAG, "模块 $moduleId 验证标志创建成功") - } else { - Log.e(TAG, "模块 $moduleId 验证标志创建失败") - } - } catch (e: Exception) { - Log.e(TAG, "处理模块安装成功时发生异常", e) - } - } - - fun handleModuleUninstall(moduleId: String) { - try { - val success = ModuleVerificationManager.removeVerificationFlag(moduleId) - if (success) { - Log.d(TAG, "模块 $moduleId 验证标志移除成功") - } else { - Log.d(TAG, "模块 $moduleId 验证标志移除失败或不存在") - } - } catch (e: Exception) { - Log.e(TAG, "处理模块卸载时发生异常: $moduleId", e) - } - } - fun handleModuleUpdate(context: Context, moduleUri: Uri, isSignatureVerified: Boolean) { - try { - val moduleId = ModuleUtils.extractModuleId(context, moduleUri) - if (moduleId == null) { - Log.e(TAG, "无法提取模块ID,无法处理验证标志") - return - } - - if (isSignatureVerified) { - // 签名验证通过,创建或更新验证标志 - val success = ModuleVerificationManager.createVerificationFlag(moduleId) - if (success) { - Log.d(TAG, "模块 $moduleId 更新后验证标志已更新") - } else { - Log.e(TAG, "模块 $moduleId 更新后验证标志更新失败") - } - } else { - // 签名验证失败,移除验证标志 - ModuleVerificationManager.removeVerificationFlag(moduleId) - Log.d(TAG, "模块 $moduleId 更新后签名未验证,验证标志已移除") - } - } catch (e: Exception) { - Log.e(TAG, "处理模块更新时发生异常", e) - } - } } \ No newline at end of file diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleVerificationManager.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleVerificationManager.kt index 4a8b35e9..9e70c40b 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleVerificationManager.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/ModuleVerificationManager.kt @@ -1,22 +1,127 @@ package com.sukisu.ultra.ui.util +import android.content.Context +import android.net.Uri import android.util.Log +import com.sukisu.ultra.Natives +import java.io.File +import java.io.FileOutputStream /** - * @author ShirkNeko * @date 2025/8/3 */ + +// 模块签名验证工具类 +object ModuleSignatureUtils { + private const val TAG = "ModuleSignatureUtils" + + fun verifyModuleSignature(context: Context, moduleUri: Uri): Boolean { + return try { + // 创建临时文件 + val tempFile = File(context.cacheDir, "temp_module_${System.currentTimeMillis()}.zip") + + // 复制URI内容到临时文件 + context.contentResolver.openInputStream(moduleUri)?.use { inputStream -> + FileOutputStream(tempFile).use { outputStream -> + inputStream.copyTo(outputStream) + } + } + + // 调用native方法验证签名 + val isVerified = Natives.verifyModuleSignature(tempFile.absolutePath) + + // 清理临时文件 + tempFile.delete() + + Log.d(TAG, "Module signature verification result: $isVerified") + isVerified + } catch (e: Exception) { + Log.e(TAG, "Error verifying module signature", e) + false + } + } + +} + +// 验证模块签名 +fun verifyModuleSignature(context: Context, moduleUri: Uri): Boolean { + return ModuleSignatureUtils.verifyModuleSignature(context, moduleUri) +} + +object ModuleOperationUtils { + private const val TAG = "ModuleOperationUtils" + + fun handleModuleInstallSuccess(context: Context, moduleUri: Uri, isSignatureVerified: Boolean) { + if (!isSignatureVerified) { + Log.d(TAG, "模块签名未验证,跳过创建验证标志") + return + } + + try { + // 从ZIP文件提取模块ID + val moduleId = ModuleUtils.extractModuleId(context, moduleUri) + if (moduleId == null) { + Log.e(TAG, "无法提取模块ID,无法创建验证标志") + return + } + + // 创建验证标志文件 + val success = ModuleVerificationManager.createVerificationFlag(moduleId) + if (success) { + Log.d(TAG, "模块 $moduleId 验证标志创建成功") + } else { + Log.e(TAG, "模块 $moduleId 验证标志创建失败") + } + } catch (e: Exception) { + Log.e(TAG, "处理模块安装成功时发生异常", e) + } + } + + fun handleModuleUninstall(moduleId: String) { + try { + val success = ModuleVerificationManager.removeVerificationFlag(moduleId) + if (success) { + Log.d(TAG, "模块 $moduleId 验证标志移除成功") + } else { + Log.d(TAG, "模块 $moduleId 验证标志移除失败或不存在") + } + } catch (e: Exception) { + Log.e(TAG, "处理模块卸载时发生异常: $moduleId", e) + } + } + fun handleModuleUpdate(context: Context, moduleUri: Uri, isSignatureVerified: Boolean) { + try { + val moduleId = ModuleUtils.extractModuleId(context, moduleUri) + if (moduleId == null) { + Log.e(TAG, "无法提取模块ID,无法处理验证标志") + return + } + + if (isSignatureVerified) { + // 签名验证通过,创建或更新验证标志 + val success = ModuleVerificationManager.createVerificationFlag(moduleId) + if (success) { + Log.d(TAG, "模块 $moduleId 更新后验证标志已更新") + } else { + Log.e(TAG, "模块 $moduleId 更新后验证标志更新失败") + } + } else { + // 签名验证失败,移除验证标志 + ModuleVerificationManager.removeVerificationFlag(moduleId) + Log.d(TAG, "模块 $moduleId 更新后签名未验证,验证标志已移除") + } + } catch (e: Exception) { + Log.e(TAG, "处理模块更新时发生异常", e) + } + } +} + object ModuleVerificationManager { private const val TAG = "ModuleVerificationManager" private const val VERIFICATION_FLAGS_DIR = "/data/adb/ksu/verified_modules" - /** - * 为指定模块创建验证标志文件 - * - * @param moduleId 模块文件夹名称 - * @return 是否成功创建标志文件 - */ + // 为指定模块创建验证标志文件 fun createVerificationFlag(moduleId: String): Boolean { return try { val shell = getRootShell()