Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到本机c++;函数谁在android应用程序中调用了java方法?在哪个库中?_Java_Android_Reverse Engineering_Frida_Java Native Library - Fatal编程技术网

如何找到本机c++;函数谁在android应用程序中调用了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方法的本机函数的名称吗?在哪个图书馆??我确信本机函数正在被调用。如果我尝试使用frida截取库,我会收到一个错误,说frida找不到库。我使用jd gui反编译了apk,在我尝试截取系统的libs文件夹中找不到库。loadLibrary()但是应用程序因地址错误无效而崩溃,但我确实发现应用程序正在加载库如果我使用frida枚举加载的模块,我找不到库名称,而且在libs文件夹中也找不到库名称有没有办法在java中指定本机库路径?应用程序如何加载库而frida却看不见它们呢?

如果我理解得很好,你想找到Java调用的本机函数名吗

  • 列出对System.loadLibrary()的所有调用以检测所有库
  • 使用IDA Pro(或它的一个备选方案:)检查所有以“Java_……”开头的方法
  • 这背后的理论是,所有本机方法都应该以“Java_”开头,并以包名的其余部分继续

    例如:

    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
    方法动态注册它们。