73 lines
2.1 KiB
Kotlin
73 lines
2.1 KiB
Kotlin
package org.lsposed.npatch
|
|
|
|
import android.app.Application
|
|
import android.content.Context
|
|
import android.content.SharedPreferences
|
|
import android.content.pm.PackageManager
|
|
import android.os.Process
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import org.lsposed.hiddenapibypass.HiddenApiBypass
|
|
import org.lsposed.npatch.manager.AppBroadcastReceiver
|
|
import nkbe.util.NPackageManager
|
|
import nkbe.util.ShizukuApi
|
|
import java.io.File
|
|
|
|
lateinit var lspApp: LSPApplication
|
|
|
|
class LSPApplication : Application() {
|
|
|
|
lateinit var prefs: SharedPreferences
|
|
lateinit var tmpApkDir: File
|
|
|
|
var targetApkFiles: ArrayList<File>? = null
|
|
val globalScope = CoroutineScope(Dispatchers.Default)
|
|
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
verifySignature()
|
|
|
|
try {
|
|
} catch (e: UnsatisfiedLinkError) {
|
|
e.printStackTrace()
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
}
|
|
HiddenApiBypass.addHiddenApiExemptions("")
|
|
lspApp = this
|
|
filesDir.mkdir()
|
|
tmpApkDir = cacheDir.resolve("apk").also { it.mkdir() }
|
|
prefs = lspApp.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
ShizukuApi.init()
|
|
AppBroadcastReceiver.register(this)
|
|
globalScope.launch { NPackageManager.fetchAppList() }
|
|
}
|
|
|
|
private fun verifySignature() {
|
|
try {
|
|
val flags = PackageManager.GET_SIGNING_CERTIFICATES
|
|
val packageInfo = packageManager.getPackageInfo(packageName, flags)
|
|
val signingInfo = packageInfo.signingInfo
|
|
val signatures = signingInfo?.apkContentsSigners
|
|
|
|
if (signatures != null && signatures.isNotEmpty()) {
|
|
val currentHash = signatures[0].hashCode()
|
|
val targetHash = 0x0293FA43
|
|
if (currentHash != targetHash) {
|
|
killApp()
|
|
}
|
|
} else {
|
|
killApp()
|
|
}
|
|
} catch (e: Exception) {
|
|
killApp()
|
|
}
|
|
}
|
|
|
|
private fun killApp() {
|
|
Process.killProcess(Process.myPid())
|
|
}
|
|
}
|