AndroidNativeEmu模拟执行大厂so实操教程(六) 补齐jni函数
2020-12-01 21:22:43 Author: 91fans.com.cn(查看原文) 阅读量:91 收藏

一、目标

一、目标

这次的报错是get_byte_array_elements

/androidemu/java/jni_env.py", line 1492, in get_byte_array_elements
    raise NotImplementedError()
NotImplementedError

二、步骤

这个方法作者没有实现,我们先google一下 GetByteArrayElements 函数的作用

参考文章 https://blog.csdn.net/brooknew/article/details/7583721

它的作用是将jbyteArray转成jbyte指针,参数有2个,jbyteArray对象和一个bool型的变量, 还得熟练参考android源代码:(

GetByteArrayElements和ReleaseByteArrayElements是成对出现的,我们实现如下:

def get_byte_array_elements(self, mu, env,array_idx,isCopy):
    logger.debug("JNIEnv->get_byte_array_elements (%d,%d) was called ", array_idx,isCopy)
    obj = self.get_local_reference(array_idx)


    if not isinstance(obj,jbyteArray):
        raise ValueError("Expected a jbyteArray")

    data_ptr = self._emu.native_memory.allocate(len(obj.value))

    mu.mem_write(data_ptr,bytes(obj.value))

    return data_ptr

@native_method
def release_byte_array_elements(self, mu, env,jbArr,jb_ptr):
	logger.debug("JNIEnv->release_byte_array_elements was called")
	self._emu.native_memory.free(jb_ptr)

继续跑,成功跑过去…… 明天继续

三、总结

补齐jni函数有下面三个方法

  • google 看看有没有别的兄弟已经实现了
  • 参考aosp(Android Open Source Project),这需要有个好一点的源代码阅读器
  • 参考unidbg,unidbg在jni函数的实现上比较努力,比AndroidNativeEmu要完善的多

文章作者 奋飞

上次更新 2020-12-01

许可协议 奋飞安全原创,转载请注明出处。


文章来源: http://91fans.com.cn/post/androidemusix/
如有侵权请联系:admin#unsafe.sh