Skip to content

Commit

Permalink
verify module.prop
Browse files Browse the repository at this point in the history
  • Loading branch information
5ec1cff committed Jul 29, 2024
1 parent 6f82e40 commit ddcaf85
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 3 deletions.
16 changes: 16 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import com.android.build.gradle.AppExtension
import com.android.build.gradle.LibraryExtension
import org.jetbrains.kotlin.daemon.common.toHexString
import java.io.ByteArrayOutputStream
import java.security.MessageDigest

plugins {
alias(libs.plugins.agp.app) apply false
Expand All @@ -24,11 +26,25 @@ val gitCommitHash = "git rev-parse --verify --short HEAD".execute()
// also the soname
val moduleId by extra("tricky_store")
val moduleName by extra("Tricky Store")
val author by extra("5ec1cff")
val description by extra("A trick of keystore")
val verName by extra("v1.0.3")
val verCode by extra(gitCommitCount)
val commitHash by extra(gitCommitHash)
val abiList by extra(listOf("arm64-v8a", "x86_64"))

fun calculateChecksum(): String {
return MessageDigest.getInstance("SHA-256").run {
update(moduleId.toByteArray(Charsets.UTF_8))
update(moduleName.toByteArray(Charsets.UTF_8))
update(verName.toByteArray(Charsets.UTF_8))
update(verCode.toString().toByteArray(Charsets.UTF_8))
update(author.toByteArray(Charsets.UTF_8))
update(description.toByteArray(Charsets.UTF_8))
digest().toHexString()
}
}

val androidMinSdkVersion by extra(31)
val androidTargetSdkVersion by extra(34)
val androidCompileSdkVersion by extra(34)
Expand Down
7 changes: 6 additions & 1 deletion module/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ val verName: String by rootProject.extra
val commitHash: String by rootProject.extra
val abiList: List<String> by rootProject.extra
val androidMinSdkVersion: Int by rootProject.extra
val author: String by rootProject.extra
val description: String by rootProject.extra
val moduleDescription = description

android {
defaultConfig {
Expand Down Expand Up @@ -91,7 +94,9 @@ androidComponents.onVariants { variant ->
"moduleId" to moduleId,
"moduleName" to moduleName,
"versionName" to "$verName ($verCode-$commitHash-$variantLowered)",
"versionCode" to verCode
"versionCode" to verCode,
"author" to author,
"description" to moduleDescription,
)
}
from(layout.projectDirectory.file("template")) {
Expand Down
4 changes: 2 additions & 2 deletions module/template/module.prop
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ id=${moduleId}
name=${moduleName}
version=${versionName}
versionCode=${versionCode}
author=5ec1cff
description=A trick of keystore
author=${author}
description=${description}
#updateJson=
32 changes: 32 additions & 0 deletions service/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,33 @@
import android.databinding.tool.ext.capitalizeUS
import org.jetbrains.kotlin.daemon.common.toHexString
import java.security.MessageDigest

plugins {
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.agp.app)
}

val moduleId: String by rootProject.extra
val moduleName: String by rootProject.extra
val verCode: Int by rootProject.extra
val verName: String by rootProject.extra
val commitHash: String by rootProject.extra
val author: String by rootProject.extra
val description: String by rootProject.extra
val moduleDescription = description

fun calculateChecksum(variantLowered: String): String {
return MessageDigest.getInstance("SHA-256").run {
update(moduleId.toByteArray(Charsets.UTF_8))
update(moduleName.toByteArray(Charsets.UTF_8))
update("$verName ($verCode-$commitHash-$variantLowered)".toByteArray(Charsets.UTF_8))
update(verCode.toString().toByteArray(Charsets.UTF_8))
update(author.toByteArray(Charsets.UTF_8))
update(description.toByteArray(Charsets.UTF_8))
digest().toHexString()
}
}

android {
namespace = "io.github.a13e300.tricky_store"
compileSdk = 34
Expand All @@ -22,6 +45,10 @@ android {
"proguard-rules.pro"
)
}
forEach {
val checksum = calculateChecksum(it.name)
it.buildConfigField("String", "CHECKSUM", "\"$checksum\"")
}
}

kotlinOptions {
Expand All @@ -44,6 +71,11 @@ android {
checkReleaseBuilds = false
abortOnError = true
}

buildFeatures {
buildConfig = true
}

}

dependencies {
Expand Down
41 changes: 41 additions & 0 deletions service/src/main/java/io/github/a13e300/tricky_store/Main.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package io.github.a13e300.tricky_store

import java.io.File
import java.security.MessageDigest
import kotlin.system.exitProcess

fun main(args: Array<String>) {
verifySelf()
Logger.i("Welcome to TrickyStore!")
while (true) {
if (!KeystoreInterceptor.tryRunKeystoreInterceptor()) {
Expand All @@ -13,3 +18,39 @@ fun main(args: Array<String>) {
}
}
}

@OptIn(ExperimentalStdlibApi::class)
fun verifySelf() {
val kv = mutableMapOf<String, String>()
val prop = File("/data/adb/modules/tricky_store/module.prop")
prop.forEachLine(Charsets.UTF_8) {
val a = it.split("=", limit = 2)
if (a.size != 2) return@forEachLine
kv[a[0]] = a[1]
}
MessageDigest.getInstance("SHA-256").runCatching {
update(kv["id"]!!.toByteArray(Charsets.UTF_8))
update(kv["name"]!!.toByteArray(Charsets.UTF_8))
update(kv["version"]!!.toByteArray(Charsets.UTF_8))
update(kv["versionCode"]!!.toByteArray(Charsets.UTF_8))
update(kv["author"]!!.toByteArray(Charsets.UTF_8))
update(kv["description"]!!.toByteArray(Charsets.UTF_8))
val checksum = digest().toHexString()
if (checksum != BuildConfig.CHECKSUM) {
Logger.e("unverified module files! ($checksum != ${BuildConfig.CHECKSUM})")
prop.writeText(kv.entries.joinToString("\n") { (k, v) ->
when (k) {
"description" -> "description=×Module files corrupted, please re-download it from github.com/5ec1cff/TrickyStore"
"author" -> "author=5ec1cff"
else -> "$k=$v"
}
})
File("/data/adb/modules/tricky_store/remove").createNewFile()
exitProcess(1)
}
Logger.d("verify success!")
}.onFailure {
Logger.e("error while verifying self", it)
exitProcess(1)
}
}

0 comments on commit ddcaf85

Please sign in to comment.