如何找到本机c++;函数谁在android应用程序中调用了java方法?在哪个库中?
我对一个应用程序进行了反向工程(得到了开发人员的许可),对此我还是新手,但是有可能得到调用java方法的本机函数的名称吗?在哪个图书馆??我确信本机函数正在被调用。如果我尝试使用frida截取库,我会收到一个错误,说frida找不到库。我使用jd gui反编译了apk,在我尝试截取系统的libs文件夹中找不到库。loadLibrary()但是应用程序因地址错误无效而崩溃,但我确实发现应用程序正在加载库如果我使用frida枚举加载的模块,我找不到库名称,而且在libs文件夹中也找不到库名称有没有办法在java中指定本机库路径?应用程序如何加载库而frida却看不见它们呢?如果我理解得很好,你想找到Java调用的本机函数名吗如何找到本机c++;函数谁在android应用程序中调用了java方法?在哪个库中?,java,android,reverse-engineering,frida,java-native-library,Java,Android,Reverse Engineering,Frida,Java Native Library,我对一个应用程序进行了反向工程(得到了开发人员的许可),对此我还是新手,但是有可能得到调用java方法的本机函数的名称吗?在哪个图书馆??我确信本机函数正在被调用。如果我尝试使用frida截取库,我会收到一个错误,说frida找不到库。我使用jd gui反编译了apk,在我尝试截取系统的libs文件夹中找不到库。loadLibrary()但是应用程序因地址错误无效而崩溃,但我确实发现应用程序正在加载库如果我使用frida枚举加载的模块,我找不到库名称,而且在libs文件夹中也找不到库名称有没有办
Java_com_foobar_main_test(...);
Rap在packagename“com.foobar”和类文件“main”中表示方法“test()”。
重载方法的签名可以在方法名称之后,如:
Java_com_foobar_main_test__Ljava_lang_String_I(..., jstring text, jint integer);
但这一概念与以前一样
如果您想知道特定本机方法调用了哪个Java方法,那么必须找到“GetMethodID(..)”或“GetStaticMethodID(..)”从本机代码中选择字符串作为第三个参数:它是Java方法的名称。因此,您的应用程序显然不包含本机库,并且没有找到本机调用,但您仍然确定它至少使用了本机库-为什么?还要确保你有一个完整的应用程序APK,现代应用程序由谷歌以多个APK文件的形式分发,一个用于代码,一个用于本机库,一个用于特定语言的字符串,…我确实找到了本机调用,它们正在被调用,但playstore中的apk可以没有库,它可以使用另一个apk库吗?@从技术上讲,库可以下载然后加载。或者库包含在APK文件或OBB文件中,但经过模糊处理或位于不同的路径中,因此您无法将它们标识为库。您可以在c++/c文件中更改函数的名称,以便在挂接系统时无法跟踪该函数。loadlibrary()使我已经尝试过的应用程序崩溃,Java本机方法不必以这种方式命名(并导出)。有一种方法可以使用
RegisterNatives
方法动态注册它们。