From bc6d19205940e3b4b228a9b5de627a2260abd00e Mon Sep 17 00:00:00 2001 From: d4rkk3y <43563783+d4rkk3y@users.noreply.github.com> Date: Fri, 2 Sep 2022 00:12:16 +0700 Subject: [PATCH] fix: partial ad blockage in `tiktok-ads` patch (#420) --- .../ConvertHelpFeedItemListFingerprint.kt | 21 +++++++++ .../patches/tiktok/ad/patch/TiktokAdsPatch.kt | 43 +++++++++++-------- 2 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/tiktok/ad/fingerprints/ConvertHelpFeedItemListFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/tiktok/ad/fingerprints/ConvertHelpFeedItemListFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/ad/fingerprints/ConvertHelpFeedItemListFingerprint.kt new file mode 100644 index 000000000..dce123f60 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/tiktok/ad/fingerprints/ConvertHelpFeedItemListFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.tiktok.ad.fingerprints + +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.tiktok.ad.annotations.TiktokAdsCompatibility + +@Name("convert-help-v2-feeditemlist-fingerprint") +@MatchingMethod( + "Lbeancopy/ConvertHelp;", + "com${'$'}ss${'$'}ugc${'$'}aweme${'$'}proto${'$'}aweme_v2_feed_response${'$'}${'$'}com${'$'}ss${'$'}android${'$'}ugc${'$'}aweme${'$'}feed${'$'}model${'$'}FeedItemList", +) +@TiktokAdsCompatibility +@Version("0.0.1") +object ConvertHelpFeedItemListFingerprint : MethodFingerprint( + customFingerprint = { methodDef -> + methodDef.definingClass.endsWith("/ConvertHelp;") && + methodDef.name.endsWith("${'$'}FeedItemList") + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/TiktokAdsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/TiktokAdsPatch.kt index 19852f8a4..2c910143d 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/TiktokAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/TiktokAdsPatch.kt @@ -11,6 +11,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.impl.BytecodePatch import app.revanced.patches.tiktok.ad.annotations.TiktokAdsCompatibility +import app.revanced.patches.tiktok.ad.fingerprints.ConvertHelpFeedItemListFingerprint import app.revanced.patches.tiktok.ad.fingerprints.FeedItemListCloneFingerprint import org.jf.dexlib2.Opcode import org.jf.dexlib2.iface.instruction.ReferenceInstruction @@ -23,26 +24,34 @@ import org.jf.dexlib2.iface.reference.FieldReference @TiktokAdsCompatibility @Version("0.0.1") class TiktokAdsPatch : BytecodePatch( - listOf(FeedItemListCloneFingerprint) + listOf( + FeedItemListCloneFingerprint, + ConvertHelpFeedItemListFingerprint + ) ) { override fun execute(data: BytecodeData): PatchResult { - val method = FeedItemListCloneFingerprint.result!!.mutableMethod - // iterate all instructions in the clone method - for ((index, instruction) in method.implementation!!.instructions.withIndex()) { - // conditions for the instruction we need - if (instruction.opcode.ordinal != Opcode.IPUT_OBJECT.ordinal) continue - val clonePreloadAdsFieldInstruction = (instruction as? ReferenceInstruction) - if ((clonePreloadAdsFieldInstruction?.reference as? FieldReference)?.name != "preloadAds") continue + listOf( + FeedItemListCloneFingerprint, + ConvertHelpFeedItemListFingerprint + ).forEach { fingerprint -> + val method = fingerprint.result!!.mutableMethod + // iterate all instructions in the clone method + for ((index, instruction) in method.implementation!!.instructions.withIndex()) { + // conditions for the instruction we need + if (instruction.opcode.ordinal != Opcode.IPUT_OBJECT.ordinal) continue + val preloadAdsFieldInstruction = (instruction as? ReferenceInstruction) + if ((preloadAdsFieldInstruction?.reference as? FieldReference)?.name != "preloadAds") continue - // set null instead of the field "preloadAds" - val overrideRegister = (clonePreloadAdsFieldInstruction as TwoRegisterInstruction).registerA - method.addInstruction( - index, - "const/4 v$overrideRegister, 0x0" - ) - return PatchResultSuccess() + // set null instead of the field "preloadAds" + val overrideRegister = (preloadAdsFieldInstruction as TwoRegisterInstruction).registerA + method.addInstruction( + index, + "const/4 v$overrideRegister, 0x0" + ) + return@forEach + } + return PatchResultError("Can not find required instruction.") } - - return PatchResultError("Could not find required instruction.") + return PatchResultSuccess() } }