feat(kakaotalk): update compatibility to version 25.5.1 for multiple patches

This commit is contained in:
2025-06-18 23:11:22 +09:00
parent 8891e2594d
commit cd995636f9
24 changed files with 42 additions and 34 deletions

View File

@ -9,7 +9,7 @@ val removeBizBoardPatch = bytecodePatch(
name = "Remove BizBoard ads", name = "Remove BizBoard ads",
description = "Removes the BizBoard ad by forcing its dimensions to 0x0 and visibility to GONE in onMeasure.", description = "Removes the BizBoard ad by forcing its dimensions to 0x0 and visibility to GONE in onMeasure.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = measuringBizBoardFingerprint.method val method = measuringBizBoardFingerprint.method

View File

@ -8,7 +8,7 @@ val removeFocusAdPatch = bytecodePatch(
name = "Remove focus ad", name = "Remove focus ad",
description = "Removes the focus ad from the app.", description = "Removes the focus ad from the app.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
loadFocusAdFingerprint.method.addInstructions( loadFocusAdFingerprint.method.addInstructions(

View File

@ -14,7 +14,7 @@ val removeMoreTabAdPatch = bytecodePatch(
name = "Remove More tab ad", name = "Remove More tab ad",
description = "Removes the ad from the More tab.", description = "Removes the ad from the More tab.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val addSectionToMoreTabUIMethod = addSectionToMoreTabUIFingerprint.method val addSectionToMoreTabUIMethod = addSectionToMoreTabUIFingerprint.method

View File

@ -8,7 +8,7 @@ val removeNativeAdPatch = bytecodePatch(
name = "Remove native ad", name = "Remove native ad",
description = "Removes the native ad from the app.", description = "Removes the native ad from the app.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = loadNativeAdFingerprint.method val method = loadNativeAdFingerprint.method

View File

@ -10,7 +10,7 @@ val removeOlkChatRoomListAdPatch = bytecodePatch(
name = "Remove OpenLink chat room list ad", name = "Remove OpenLink chat room list ad",
description = "Removes the OpenLink chat room list ad.", description = "Removes the OpenLink chat room list ad.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val findUnit = kotlinUnitInstanceFingerprint.method val findUnit = kotlinUnitInstanceFingerprint.method

View File

@ -14,7 +14,7 @@ val changeModelPatch = bytecodePatch(
"model", "SM-X926N" "model", "SM-X926N"
) )
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
changeModelFingerprint.method.addInstructions( changeModelFingerprint.method.addInstructions(

View File

@ -13,7 +13,7 @@ val remove99ClampPatch = bytecodePatch(
name = "Disable 99 unread limit", name = "Disable 99 unread limit",
description = "Skip the 99-cap so unread count shows full value" description = "Skip the 99-cap so unread count shows full value"
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = processWatermarkCountFingerprint.method val method = processWatermarkCountFingerprint.method

View File

@ -13,7 +13,7 @@ val showDeletedMessagePatch = bytecodePatch(
name = "Show deleted messages", name = "Show deleted messages",
description = "Allows you to see deleted messages in chat logs.", description = "Allows you to see deleted messages in chat logs.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = replaceToFeedFingerprint.method val method = replaceToFeedFingerprint.method

View File

@ -14,7 +14,7 @@ val remove300PlusLimitBaseChatRoomPatch = bytecodePatch(
name = "Disable 300+ unread limit (BaseChatRoom)", name = "Disable 300+ unread limit (BaseChatRoom)",
description = "Always show the real unread count instead of '300+' in base chatroom list" description = "Always show the real unread count instead of '300+' in base chatroom list"
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = limit300PlusBaseChatRoomFingerprint.method val method = limit300PlusBaseChatRoomFingerprint.method
@ -40,7 +40,7 @@ val remove300PlusLimitOpenChatRoomPatch = bytecodePatch(
name = "Disable 300+ unread limit (OpenChatRoom)", name = "Disable 300+ unread limit (OpenChatRoom)",
description = "Always show the real unread count instead of '300+' in open chatroom list" description = "Always show the real unread count instead of '300+' in open chatroom list"
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = limit300PlusOpenChatRoomFingerprint.method val method = limit300PlusOpenChatRoomFingerprint.method

View File

@ -9,7 +9,7 @@ val forceEnableEmoticonPlusPatch = bytecodePatch(
name = "Force enable emoticon plus feature", name = "Force enable emoticon plus feature",
description = "Force enable emoticon plus feature (Unpurchased emoticon can be sent once per day)", description = "Force enable emoticon plus feature (Unpurchased emoticon can be sent once per day)",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
isEnableEmoticonPlusFingerprint.method.addInstructions( isEnableEmoticonPlusFingerprint.method.addInstructions(

View File

@ -5,11 +5,13 @@ import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
internal val isEnableEmoticonPlusFingerprint = fingerprint { internal val isEnableEmoticonPlusFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("Z") returns("Z")
parameters() parameters()
strings("emoticonPlusMe") strings("emoticonPlusMe")
opcodes( opcodes(
Opcode.SGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
Opcode.IF_EQZ, Opcode.IF_EQZ,
Opcode.IGET_BOOLEAN, Opcode.IGET_BOOLEAN,

View File

@ -10,7 +10,7 @@ val ghostMode = bytecodePatch(
name = "Ghost Mode", name = "Ghost Mode",
description = "Don't expose your typing status to the other party.", description = "Don't expose your typing status to the other party.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val findUnit = kotlinUnitInstanceFingerprint.method val findUnit = kotlinUnitInstanceFingerprint.method

View File

@ -21,8 +21,6 @@ internal val sendCurrentActionFingerprint = fingerprint {
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT, Opcode.MOVE_RESULT,
Opcode.IF_EQZ, Opcode.IF_EQZ,
Opcode.IGET_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT, Opcode.MOVE_RESULT_OBJECT,
Opcode.NEW_INSTANCE, Opcode.NEW_INSTANCE,

View File

@ -21,7 +21,7 @@ val bypassMoatCheckPatch = bytecodePatch(
name = "Bypass Moat check", name = "Bypass Moat check",
description = "Bypass Moat check that prevents the app from running.", description = "Bypass Moat check that prevents the app from running.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val patch: (Fingerprint) -> Unit = { val patch: (Fingerprint) -> Unit = {

View File

@ -10,7 +10,7 @@ val bypassRequestChecksumPatch = bytecodePatch(
name = "Bypass requestChecksums", name = "Bypass requestChecksums",
description = "Prevents the execution of checksum verification logic by making it return early." description = "Prevents the execution of checksum verification logic by making it return early."
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val findUnit = kotlinUnitInstanceFingerprint.method val findUnit = kotlinUnitInstanceFingerprint.method

View File

@ -9,7 +9,7 @@ val verifyingSignaturePatch = bytecodePatch(
name = "Disable verifying signature", name = "Disable verifying signature",
description = "Disables the signature verification check that prevents the app from running.", description = "Disables the signature verification check that prevents the app from running.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
verifyingSignatureFingerprint.method.addInstructions( verifyingSignatureFingerprint.method.addInstructions(

View File

@ -8,7 +8,7 @@ internal val moatCheckResultFingerprintOne = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
parameters("Ljava/lang/Object;", "Ljava/lang/Object;", "Ljava/lang/Object;") parameters("Ljava/lang/Object;", "Ljava/lang/Object;", "Ljava/lang/Object;")
returns("Ljava/lang/Object;") returns("Ljava/lang/Object;")
strings("detectResult", "<anonymous parameter 1>", "<anonymous parameter 2>") strings("detectResult", "<unused var>")
opcodes( opcodes(
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
@ -17,7 +17,6 @@ internal val moatCheckResultFingerprintOne = fingerprint {
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.CONST_STRING, Opcode.CONST_STRING,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.CONST_STRING,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
@ -29,13 +28,14 @@ internal val moatCheckResultFingerprintOne = fingerprint {
Opcode.INVOKE_INTERFACE, Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT, Opcode.MOVE_RESULT,
) )
custom { method, classDef -> classDef.sourceFile == "PaySecurityWorker.kt" }
} }
internal val moatCheckResultFingerprintTwo = fingerprint { internal val moatCheckResultFingerprintTwo = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
parameters("Ljava/lang/Object;", "Ljava/lang/Object;", "Ljava/lang/Object;") parameters("Ljava/lang/Object;", "Ljava/lang/Object;", "Ljava/lang/Object;")
returns("Ljava/lang/Object;") returns("Ljava/lang/Object;")
strings("detectResult", "<anonymous parameter 1>", "<anonymous parameter 2>") strings("detectResult", "<unused var>")
opcodes( opcodes(
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
@ -44,7 +44,6 @@ internal val moatCheckResultFingerprintTwo = fingerprint {
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.CONST_STRING, Opcode.CONST_STRING,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.CONST_STRING,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,
Opcode.CHECK_CAST, Opcode.CHECK_CAST,
Opcode.NEW_INSTANCE, Opcode.NEW_INSTANCE,
@ -56,6 +55,7 @@ internal val moatCheckResultFingerprintTwo = fingerprint {
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
Opcode.IF_EQZ, Opcode.IF_EQZ,
) )
custom { method, classDef -> classDef.sourceFile == "PaySecurityWorker.kt" }
} }
internal val postprocessMoatCheckFailedFingerprint = fingerprint { internal val postprocessMoatCheckFailedFingerprint = fingerprint {

View File

@ -11,7 +11,6 @@ internal val requestChecksumsFingerprint = fingerprint {
"context" "context"
) )
opcodes( opcodes(
Opcode.CONST_4,
Opcode.INSTANCE_OF, Opcode.INSTANCE_OF,
Opcode.IF_EQZ, Opcode.IF_EQZ,
Opcode.MOVE_OBJECT, Opcode.MOVE_OBJECT,
@ -28,6 +27,7 @@ internal val requestChecksumsFingerprint = fingerprint {
Opcode.IGET_OBJECT, Opcode.IGET_OBJECT,
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
Opcode.IGET, Opcode.IGET,
Opcode.CONST_4,
Opcode.IF_EQZ, Opcode.IF_EQZ,
Opcode.IF_NE, Opcode.IF_NE,
Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC,

View File

@ -11,7 +11,7 @@ val forceEnableDebugModePatch = bytecodePatch(
name = "Force enable debug mode", name = "Force enable debug mode",
description = "Enables debug mode in the app.", description = "Enables debug mode in the app.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = configConstructorFingerprint.method val method = configConstructorFingerprint.method

View File

@ -15,7 +15,7 @@ val removeShopTabPatch = bytecodePatch(
name = "Remove shop tab", name = "Remove shop tab",
description = "Removes the shop tab from the bottom navigation bar.", description = "Removes the shop tab from the bottom navigation bar.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val method = addNavigationTabFingerprint.method val method = addNavigationTabFingerprint.method

View File

@ -8,7 +8,7 @@ internal val configConstructorFingerprint = fingerprint {
accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR) accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
returns("V") returns("V")
parameters() parameters()
strings("google", "one", "getBytes(...)") strings("getBytes(...)")
opcodes( opcodes(
Opcode.SGET_OBJECT, Opcode.SGET_OBJECT,
Opcode.INVOKE_VIRTUAL, Opcode.INVOKE_VIRTUAL,
@ -21,4 +21,5 @@ internal val configConstructorFingerprint = fingerprint {
Opcode.MOVE, Opcode.MOVE,
Opcode.GOTO, Opcode.GOTO,
) )
custom { method, classDef -> classDef.sourceFile == "Config.kt" }
} }

View File

@ -15,7 +15,7 @@ val allowReplyToFeedPatch = app.revanced.patcher.patch.bytecodePatch(
name = "Allow reply to feed", name = "Allow reply to feed",
description = "Allows replying to feed messages", description = "Allows replying to feed messages",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val patch: (Fingerprint) -> Unit = { fp -> val patch: (Fingerprint) -> Unit = { fp ->

View File

@ -17,7 +17,7 @@ val versionInfoPatch = bytecodePatch(
name = "Version info patch", name = "Version info patch",
description = "Patches the version info to include '(ReVanced)' in the version string.", description = "Patches the version info to include '(ReVanced)' in the version string.",
) { ) {
compatibleWith("com.kakao.talk"("25.4.3")) compatibleWith("com.kakao.talk"("25.5.1"))
execute { execute {
val runPatch: (Fingerprint, Boolean) -> Unit = { fp, inDetail -> val runPatch: (Fingerprint, Boolean) -> Unit = { fp, inDetail ->

View File

@ -5,16 +5,23 @@ import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
internal val versionInfoFingerprint = fingerprint { internal val versionInfoFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
returns("V") returns("V")
opcodes( opcodes(
Opcode.INVOKE_DIRECT, Opcode.CONST,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.AND_INT_LIT8,
Opcode.CONST_STRING, Opcode.CONST_STRING,
Opcode.IPUT_OBJECT, Opcode.CONST_4,
Opcode.IPUT_BOOLEAN, Opcode.IF_NEZ,
Opcode.IPUT_OBJECT, Opcode.INVOKE_VIRTUAL,
Opcode.RETURN_VOID, Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.CONST_4,
Opcode.GOTO
) )
custom { method, classDef -> classDef.sourceFile == "VersionSettingItem.kt" }
} }
internal val versionInfoPreviewFingerprint = fingerprint { internal val versionInfoPreviewFingerprint = fingerprint {