如何找到在android应用程序中调用java方法的本机c++函数以及在哪个库中?

1cosmwyk  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(382)

我反向工程一个应用程序(在开发人员的许可下),我仍然是新手,但有可能得到调用java方法的本机函数的名称吗?在哪个图书馆??我确信本机函数正在被调用,如果我试图用frida截取库,我会得到一个错误,说frida找不到我用jd gui反编译apk的库,我在libs文件夹中找不到库,我试图截取system.loadlibrary(),但应用程序崩溃,地址错误无效,我确实找到了应用程序正在加载的库如果我枚举使用frida加载的模块,我找不到该库的名称,而且在libs文件夹中也找不到该库的名称,有没有办法在java中指定本机库路径?应用程序怎么能加载库而弗里达却看不到它们??

huus2vyu

huus2vyu1#

如果我理解的很好,您想找到java调用的本机函数名吗?
列出对system.loadlibrary()的所有调用以检测所有库
使用ida pro(或其替代品之一:https://reverseengineering.stackexchange.com/questions/1817/is-there-any-disassembler-to-rival-ida-pro)检查所有以“java\…”开头的方法
这背后的理论是,所有本机方法都应该以“java”开头,然后以包名的其余部分继续。
例如:

Java_com_foobar_main_test(...);

rap在packagename“com.foobar”和classfile“main”中表示方法“test()”。重载方法的签名可以在方法名称之后,例如:

Java_com_foobar_main_test__Ljava_lang_String_I(..., jstring text, jint integer);

但这个概念和以前一样。
如果您想知道特定本机方法调用了哪个java方法,那么必须从本机代码中找到“getmethodid(…)”或“getstaticmethodid(…)”,并检查字符串作为第三个参数:它是java方法的名称。

相关问题