![unidbg逆向工程:原理与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/74/51906074/b_51906074.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1 为so添加交互:使用JNI接口编写md5方法
在编写调用JNI接口实现md5方法之前,我们先用Java实现md5方法,以便作为示例来指导编写。相关代码如下所示。编译好后运行,运行结果无误。
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-35.jpg?sign=1739297291-XVGjtli3uuXHmVETrp7dSoT4Vvoe2teI-0-4c6ea01dc9f9992d520406b74fb58f65)
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-36.jpg?sign=1739297291-Wqiini56xN0LIRhsBsiAIrga526bnRvw-0-db9bf07a09a98f59b9f020a46c299d56)
之后我们依靠Java版示例,定义本地方法md52(),并使用<Alt+Enter>快捷键让Android Studio帮我们创建相应函数的空实现。
依照Java相关代码,使用JNI接口调用Java层的MessageDigest等类的方法完成相关方法的调用,最后代码如下所示。
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-37.jpg?sign=1739297291-UAtn6xGH0uysLfFsELZjpVr0hBppemSd-0-90c5b84613d66baa0b82ed01d6133a4e)
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-38.jpg?sign=1739297291-NMSwbPIqErTb5Qx7RpSCSDDPPC1zJFzT-0-06af95ac2bd1266b5cf8944e35c7e991)
这是根据Java代码的流程使用JNI接口仿写了一遍。JNI接口代码的编写流程与Java的反射类似,通过FindClass()方法找到类,通过GetStaticMethodID()等方法获得方法的jmethodID,然后通过CallStaticObjectMethod()等系列方法来执行方法得到结果。