LuckyPray / DexKit

An easy-to-use, high-performance dex deobfuscation library.
https://luckypray.org/DexKit/
GNU Lesser General Public License v3.0
476 stars 60 forks source link

opNames匹配不上 #26

Closed javaeryang closed 6 months ago

javaeryang commented 6 months ago
fun testSearch(){
    val test = bridge.findMethod {
        matcher {
            declaredClass = "com.xv.uyL"
            paramCount = 1
            paramTypes = listOf("java.lang.String")
            returnType = "void"
            opNames = listOf("invoke-virtual", "move-result-object", "invoke-virtual", "return-void")
        }
    }
    test.firstOrNull().apply {
        println("find method===>" + this?.name)
    }
}

output

find method===>null

smali

.method public final d(Ljava/lang/String;)V
    .locals 1

    invoke-virtual {p0}, Lcom/wP;->ge()Lcom/va/sk;

    move-result-object v0

    invoke-virtual {v0, p1}, Lcom/va/sk;->m(Ljava/lang/String;)V

    return-void
.end method

是我使用上有啥问题不?

teble commented 6 months ago

25 , 2.0.1已经修了

javaeryang commented 6 months ago

25

我拉取的最新的代码啊

teble commented 6 months ago

25

我拉取的最新的代码啊

clean了重新编译了dll吗?

javaeryang commented 6 months ago

25

我拉取的最新的代码啊

clean了重新编译了dll吗?

是的,clean后重新编译,还是一样,null

teble commented 6 months ago

apk文件

teble commented 6 months ago

至少给我个apk让我验证一下吧?

javaeryang commented 6 months ago

传不上来,抖音290701版本。

javaeryang commented 6 months ago

https://www.wandoujia.com/apps/7461948

javaeryang commented 6 months ago

最开始说的smali代码也是我脱敏后的。

javaeryang commented 6 months ago
.method public final markConversationRead(Ljava/lang/String;)V
    .locals 1

    .prologue
    .line 16842752
    invoke-virtual {p0}, LX/0uwP;->getIMHandlerCenter()Lcom/bytedance/im/core/internal/link/handler/IMHandlerCenter;

    .line 16842753
    .line 16842754
    .line 16842755
    move-result-object v0

    .line 16842756
    invoke-virtual {v0, p1}, Lcom/bytedance/im/core/internal/link/handler/IMHandlerCenter;->markConversationRead(Ljava/lang/String;)V

    .line 16842757
    .line 16842758
    .line 16842759
    return-void
.end method
teble commented 6 months ago

无法复现

fun search(bridge: DexKitBridge) {
    bridge.findMethod {
        matcher {
            name = "markConversationRead"
            opNames = listOf("invoke-virtual", "move-result-object", "invoke-virtual", "return-void")
        }
    }.forEach {
        println(it)
    }
}

输出:

public final void X.0ryh.markConversationRead(java.lang.String)
public final void X.0ryh.markConversationRead(java.lang.String, long)
javaeryang commented 6 months ago

无法复现

fun search(bridge: DexKitBridge) {
    bridge.findMethod {
        matcher {
            name = "markConversationRead"
            opNames = listOf("invoke-virtual", "move-result-object", "invoke-virtual", "return-void")
        }
    }.forEach {
        println(it)
    }
}

输出:

public final void X.0ryh.markConversationRead(java.lang.String)
public final void X.0ryh.markConversationRead(java.lang.String, long)

大佬,你把这个name去掉,declaredClass设置它所在的类名试试看。因为我本身就是需要查这个方法名啊,你这直接写上了方法名,那就没有查询的必要了啊

teble commented 6 months ago

设置name只是因为结果太多了,这里只是为了证明查询是能搜到结果的。 但是你的问题是一个结果都没,这个bug在2.0.1已经修了,你那边肯定是动态库没重新编译才会有这个问题。

teble commented 6 months ago

再不行,另外clone一次项目,完全排除缓存因素导致的问题

javaeryang commented 6 months ago

设置name只是因为结果太多了,这里只是为了证明查询是能搜到结果的。 但是你的问题是一个结果都没,这个bug在2.0.1已经修了,你那边肯定是动态库没重新编译才会有这个问题。

那个类,真没特别多结果。我是执行了./gradlew clean :main:run

javaeryang commented 6 months ago

我再重新clone一下试试吧

teble commented 6 months ago

因为我最开始并不知道是哪个类(你没有给出信息,根据你的smali我只能拿到methodName),所以搜出来了一堆结果,然后为了确定能否搜到这个函数我才额外加的name作为过滤条件。另外,填name还是填declaredClass都不会影响某个结果是否能被找到。

javaeryang commented 6 months ago

因为我最开始并不知道是哪个类(你没有给出信息,根据你的smali我只能拿到methodName),所以搜出来了一堆结果,然后为了确定能否搜到这个函数我才额外加的name作为过滤条件。另外,填name还是填declaredClass都不会影响某个结果是否能被找到。

明白,刚刚又clean一下,再编译,又匹配到方法了...(应该是我本地有啥问题)

大佬可以发个赞赏码啥的放readme里面,请大佬喝杯咖啡啥的。

javaeryang commented 6 months ago

这个issue可以关闭了