前言:

很多小伙伴在逆向的时候定位到了Java层的Native函数,如果要进一步进行分析,就需要找到so中注册的Native函数。

第一种情况,函数静态注册,可以直接在so的导出符号表中找到静态注册的函数地址(这里使用的方法是dlsym)。

第二种情况,函数动态注册,在JNI_ONLOAD中使用RegisterNatives这个函数进行注册。

但是出现了一些特殊的情况,hook了这两个函数,却没有找到目标函数的注册方法。

文章结构:

本文章将分多个部分讲解:

1、从AOSP源码的角度讲解RegisterNatives函数具体的流程

2、从AOSP源码出发,探究Java的类加载时,如何注册自己的函数地址

3、讲解函数绑定的地址究竟在哪里,如何从根本上拿到绑定函数的地址

4、如何使用工具拿到属于自己唯一的偏移地址

5、小试牛刀,用学到的知识初步测试

6、利用两个群友遇到问题的例子,一个简单的,一个复杂的,来实战应用技术

参考资料

脚本部分来源:Fart脱壳王课件

寒冰老师提出的这个方法,我并不是原创,我只是实现了一个小工具以及提供了两个具体案例来实现。

欢迎大家购买看雪2W、3W班,以及FART脱壳王课程来支持寒冰老师,并获得更加充分的售后指导。

RegisterNatives函数具体的流程