Hacker-小胖锅 2024-12-22 15:37 采纳率: 25%
浏览 30

用ida分析APP的so文件的JNI_OnLoad方法,找不到RegisterNatives,怎么办?

本人刚开始学APP逆向,最近在逆向一个APP,这个APP有一个本地方法使用的是动态注册,我使用IDA查看so文件的代码,发现根本看不懂,看网上的方法,将jni.h文件导入,也不行,连RegisterNatives函数也看不到,但是使用fridahook时,却能hook到。求指点迷津。

img

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的信息和遇到的困难,您在使用IDA分析APP的so文件的JNI_OnLoad方法时找不到RegisterNatives函数,但使用FridaHook时能够成功hook到。这可能涉及到几个方面的问题,我将为您一一解答并提供解决方案。

    1. IDA反汇编结果可能由于汇编指令的错误导致输出信息不完整或不准确。在使用IDA进行反汇编时,如果遇到无法准确解析的汇编指令,可能会出现"bad sp value at call has been detected"的错误提示。这种情况下,可以尝试调整IDA的视图设置或尝试使用其他反汇编工具(如Ghidra)来获取更准确的反汇编结果。

    解决方案:您可以尝试使用Ghidra进行反汇编,并查看是否能够找到RegisterNatives函数的相关信息。另外,还可以尝试手动调整IDA的视图设置或参数设置,以获取更好的反汇编结果。

    1. 可能您在导入JNI.h头文件后未能正确关联相关符号和函数。有时导入头文件并不足以在IDA中解析出所有符号和函数,可能需要手动关联符号或函数。

    解决方案:在IDA中手动关联符号和函数的方法包括使用IDA的符号表功能或直接在汇编代码中搜索相关函数名或特征序列来定位函数位置。此外,还可以尝试使用IDA的插件或脚本来辅助解析和关联符号。

    1. 使用FridaHook能够成功hook到相关函数可能是因为使用了动态代码插桩技术,这种方式不需要反汇编整个so文件,而是通过动态追踪和拦截函数调用来实现hook功能。因此,即使IDA无法解析到RegisterNatives函数,FridaHook仍然能够成功hook到该函数。

    解决方案:由于逆向工程的限制,可能无法通过静态分析(如使用IDA)找到所有函数和符号信息。在这种情况下,可以尝试结合动态分析和静态分析的方法,使用FridaHook等动态分析工具来获取更多的函数信息和调用关系。通过动态分析和静态分析的组合使用,可能能够更好地理解和逆向工程应用程序的so文件。

    总结起来,针对您遇到的问题,可以尝试使用其他反汇编工具(如Ghidra)进行反汇编,手动关联符号和函数,并结合动态分析和静态分析的方法来解决逆向工程中的困难。希望这些解决方案能够帮助您找到RegisterNatives函数并更好地理解应用程序的so文件。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月22日