![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=1739297990-c445frzim9OhAGDkW7mcCcMhjfZgCY3Z-0-fa1d0451bd80264bdf6ab1331f399cae)
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-36.jpg?sign=1739297990-iDnQ7vnCVuns19n8xtY6mLPWDEVucavl-0-b8dcd45f9f7062a4c7bdf9d83201d41a)
之后我们依靠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=1739297990-tgIqgkCHuw5dGXQlKGM6xrrbdwbnvi5d-0-5ebaee73853502993741b248d305870e)
![](https://epubservercos.yuewen.com/DA59E4/30664290007344406/epubprivate/OEBPS/Images/978-7-111-74182-4-Part01-38.jpg?sign=1739297990-N5Ru9T0fJm020d8brdx7Axq0H4E82UCQ-0-29e2826c28e8dbdfa4e408086d4a0e8f)
这是根据Java代码的流程使用JNI接口仿写了一遍。JNI接口代码的编写流程与Java的反射类似,通过FindClass()方法找到类,通过GetStaticMethodID()等方法获得方法的jmethodID,然后通过CallStaticObjectMethod()等系列方法来执行方法得到结果。