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