manager: Cleaning up the code
This commit is contained in:
@@ -9,9 +9,6 @@ import java.nio.charset.StandardCharsets
|
|||||||
import java.util.zip.ZipInputStream
|
import java.util.zip.ZipInputStream
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.sukisu.ultra.Natives
|
|
||||||
import java.io.File
|
|
||||||
import java.io.FileOutputStream
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
object ModuleUtils {
|
object ModuleUtils {
|
||||||
@@ -143,108 +140,3 @@ object ModuleUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 模块签名验证工具类
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +1,127 @@
|
|||||||
package com.sukisu.ultra.ui.util
|
package com.sukisu.ultra.ui.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.Uri
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import com.sukisu.ultra.Natives
|
||||||
|
import java.io.File
|
||||||
|
import java.io.FileOutputStream
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
* @author ShirkNeko
|
* @author ShirkNeko
|
||||||
* @date 2025/8/3
|
* @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 {
|
object ModuleVerificationManager {
|
||||||
private const val TAG = "ModuleVerificationManager"
|
private const val TAG = "ModuleVerificationManager"
|
||||||
private const val VERIFICATION_FLAGS_DIR = "/data/adb/ksu/verified_modules"
|
private const val VERIFICATION_FLAGS_DIR = "/data/adb/ksu/verified_modules"
|
||||||
|
|
||||||
/**
|
// 为指定模块创建验证标志文件
|
||||||
* 为指定模块创建验证标志文件
|
|
||||||
*
|
|
||||||
* @param moduleId 模块文件夹名称
|
|
||||||
* @return 是否成功创建标志文件
|
|
||||||
*/
|
|
||||||
fun createVerificationFlag(moduleId: String): Boolean {
|
fun createVerificationFlag(moduleId: String): Boolean {
|
||||||
return try {
|
return try {
|
||||||
val shell = getRootShell()
|
val shell = getRootShell()
|
||||||
|
|||||||
Reference in New Issue
Block a user