From 57f3a92189a5b7a7fa9cd4ac596300b480af8fd3 Mon Sep 17 00:00:00 2001 From: naijun0403 Date: Mon, 19 May 2025 20:49:23 +0900 Subject: [PATCH] feat(kakaotalk): add patch and fingerprint to remove OpenLink chat room list ad --- patches/api/patches.api | 4 +++ .../ads/RemoveOlkChatRoomListAdPatch.kt | 31 +++++++++++++++++++ .../RemoveOlkChatRoomListAdFingerprint.kt | 25 +++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/RemoveOlkChatRoomListAdPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/fingerprints/RemoveOlkChatRoomListAdFingerprint.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index 8771e8071..bf1e3e72e 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -248,6 +248,10 @@ public final class app/revanced/patches/kakaotalk/ads/RemoveBizBoardPatchKt { public static final fun getRemoveBizBoardPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/kakaotalk/ads/RemoveOlkChatRoomListAdPatchKt { + public static final fun getRemoveOlkChatRoomListAdPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/kakaotalk/changemodel/ChangeModelPatchKt { public static final fun getChangeModelPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/RemoveOlkChatRoomListAdPatch.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/RemoveOlkChatRoomListAdPatch.kt new file mode 100644 index 000000000..fa2df6351 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/RemoveOlkChatRoomListAdPatch.kt @@ -0,0 +1,31 @@ +package app.revanced.patches.kakaotalk.ads + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.kakaotalk.ads.fingerprints.removeOlkChatRoomListAdFingerprint +import app.revanced.patches.kakaotalk.common.fingerprints.kotlinUnitInstanceFingerprint + +@Suppress("unused") +val removeOlkChatRoomListAdPatch = bytecodePatch( + name = "Remove OpenLink chat room list ad", + description = "Removes the OpenLink chat room list ad.", +) { + compatibleWith("com.kakao.talk"("25.4.2")) + + execute { + val findUnit = kotlinUnitInstanceFingerprint.method + val unitClass = findUnit.definingClass + + val method = removeOlkChatRoomListAdFingerprint.method + + // I tried to find the field name, but it's pretty obvious to me, so I hardcode it. + // If it changes, we need to fix it + method.addInstructions( + 0, + """ + sget-object v0, $unitClass->a:$unitClass + return-object v0 + """.trimIndent() + ) + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/fingerprints/RemoveOlkChatRoomListAdFingerprint.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/fingerprints/RemoveOlkChatRoomListAdFingerprint.kt new file mode 100644 index 000000000..f424d383f --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/ads/fingerprints/RemoveOlkChatRoomListAdFingerprint.kt @@ -0,0 +1,25 @@ +package app.revanced.patches.kakaotalk.ads.fingerprints + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +internal val removeOlkChatRoomListAdFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + parameters("Ljava/lang/Object;") + returns("Ljava/lang/Object;") + strings("list", "key_ad_info", "") + opcodes( + Opcode.MOVE_OBJECT_FROM16, + Opcode.SGET_OBJECT, + Opcode.INVOKE_STATIC_RANGE, + Opcode.SGET_BOOLEAN, + Opcode.IGET_OBJECT, + Opcode.IGET, + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT, + Opcode.CONST_STRING, + Opcode.IGET_OBJECT, + Opcode.IF_EQZ, + ) +} \ No newline at end of file