fix(tasker/unlock-license): resolve fingerprint correctly
This commit is contained in:
parent
4993302210
commit
92d78576f0
|
@ -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
|
|
||||||
)
|
|
||||||
)
|
)
|
|
@ -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()
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue