fix(tasker/unlock-license): resolve fingerprint correctly

This commit is contained in:
oSumAtrIX 2022-12-30 05:13:28 +01:00
parent 4993302210
commit 92d78576f0
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
2 changed files with 9 additions and 30 deletions

View File

@ -1,14 +1,7 @@
package app.revanced.patches.tasker.license.unlock.fingerprints package app.revanced.patches.tasker.license.unlock.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object CheckLicenseFingerprint : MethodFingerprint( object CheckLicenseFingerprint : MethodFingerprint(
strings = listOf("just(IsLicensedResult(true))"), strings = listOf("Can't check license")
opcodes = listOf(
Opcode.GOTO,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL
)
) )

View File

@ -5,16 +5,12 @@ import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.instruction import app.revanced.patcher.extensions.addInstruction
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.tasker.license.unlock.annotations.UnlockLicenseCompatibility import app.revanced.patches.tasker.license.unlock.annotations.UnlockLicenseCompatibility
import app.revanced.patches.tasker.license.unlock.fingerprints.CheckLicenseFingerprint import app.revanced.patches.tasker.license.unlock.fingerprints.CheckLicenseFingerprint
import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
import org.jf.dexlib2.iface.reference.MethodReference
import org.jf.dexlib2.immutable.instruction.ImmutableInstruction35c
@Patch @Patch
@Name("unlock-license") @Name("unlock-license")
@ -26,21 +22,11 @@ class UnlockLicensePatch : BytecodePatch(
CheckLicenseFingerprint CheckLicenseFingerprint
) )
) { ) {
override fun execute(context: BytecodeContext) = CheckLicenseFingerprint.result?.let { result -> override fun execute(context: BytecodeContext) = CheckLicenseFingerprint
val patchIndex = result.scanResult.patternScanResult!!.endIndex .result
?.mutableMethod
with(result.mutableMethod.instruction(patchIndex) as FiveRegisterInstruction) { // Return the method early, which prompts the user with a non dismissible dialog, when the trial period is over.
ImmutableInstruction35c( ?.addInstruction(0, "return-void")
opcode, ?.let { PatchResultSuccess() }
registerCount, ?: CheckLicenseFingerprint.toErrorResult()
registerC,
0, // registerE is 1, registerD is now 0 instead of 1 bypassing the license verification
registerE,
registerF,
registerG,
(this as ReferenceInstruction).reference as MethodReference
)
}
PatchResultSuccess()
} ?: CheckLicenseFingerprint.toErrorResult()
} }