From 82e530a510304ee1c01d0709b3ee809733363a6a Mon Sep 17 00:00:00 2001 From: naijun0403 Date: Sun, 4 May 2025 01:25:10 +0900 Subject: [PATCH] feat(kakaotalk): Add patch to remove 99 unread limit in chat logs --- patches/api/patches.api | 4 +++ .../kakaotalk/chatlog/Remove99ClampPatch.kt | 31 +++++++++++++++++++ .../fingerprints/Remove99ClampFingerprint.kt | 11 +++++++ 3 files changed, 46 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/Remove99ClampFingerprint.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index 871da0fd5..5d785ffd1 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -248,6 +248,10 @@ public final class app/revanced/patches/kakaotalk/changemodel/ChangeModelPatchKt public static final fun getChangeModelPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatchKt { + public static final fun getRemove99ClampPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/kakaotalk/chatroom/Remove300PlusLimitPatchKt { public static final fun getRemove300PlusLimitBaseChatRoomPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getRemove300PlusLimitOpenChatRoomPatch ()Lapp/revanced/patcher/patch/BytecodePatch; diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatch.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatch.kt new file mode 100644 index 000000000..49ddde073 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatch.kt @@ -0,0 +1,31 @@ +package app.revanced.patches.kakaotalk.chatlog + +import app.revanced.patcher.extensions.InstructionExtensions.instructions +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.patch.Package +import app.revanced.patches.kakaotalk.chatlog.fingerprints.remove99ClampFingerprint +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10t +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22t + +@Suppress("unused") +val remove99ClampPatch = bytecodePatch( + name = "Disable 99 unread limit", + description = "Skip the 99-cap so unread count shows full value" +) { + compatibleWith(Package("com.kakao.talk", setOf("25.3.5"))) + + execute { + val method = remove99ClampFingerprint.method + + method.instructions + .filterIsInstance() + .filter { it.opcode == Opcode.IF_LE } + .forEach { ifle -> + val idx = method.instructions.indexOf(ifle) + val goto = BuilderInstruction10t(Opcode.GOTO, ifle.target) + method.replaceInstruction(idx, goto) + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/Remove99ClampFingerprint.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/Remove99ClampFingerprint.kt new file mode 100644 index 000000000..26708c068 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/Remove99ClampFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.kakaotalk.chatlog.fingerprints + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal val remove99ClampFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("Ljava/lang/Object;") + parameters() + strings("notiRead", "openlinkSettingShowUnreadCount") +} \ No newline at end of file