YAHFA icon indicating copy to clipboard operation
YAHFA copied to clipboard

请教一下大佬,已有java方法怎么转为Native?

Open zhangxy123666 opened this issue 6 years ago • 7 comments

想实现一个java方法直接转换为native方法。 查阅了不少资料,都是介绍改entrypoint 1-access_flags_改为native 改为0x100 2-entry_point_from_jni_ 改为native函数地址 3-entry_point_from_quick_compiled_code_ 第三个怎么实现呢?

而大佬你的http://rk700.github.io/2017/03/30/YAHFA-introduction 这篇文章也提到了,”callee的eax替换成为hook方法的ArtMethod“ ,但是你这里是改为ArtMethod,而我想要实现改为一个native方法,而不是改为HookMethod

image image 怎么把上面的java方法改为下面的native方法,我总感觉在你的Hook中转的那一步做一下处理,但是你的entry_point_from_quick_compiled_code_是直接改为ArtMethod,那我要是转成Native方法的话是没有ArtMethod的,这一步改怎么操作,希望大佬指点一下

zhangxy123666 avatar Jan 04 '19 14:01 zhangxy123666

你的native方法是JNI么?如果是JNI的话应该有一个native的java方法对应。可以时下hook把目标替换成那个native java方法

rk700 avatar Jan 08 '19 09:01 rk700

不是jni方法,是直接的一个C函数

就是知道一个java方法,在C层直接把这个java方法hook了,替换成为一个C函数

javaMethod->C函数,

zhangxy123666 avatar Jan 17 '19 03:01 zhangxy123666

为art method加上kAccNative的access flag,将entry_point_from_quick_compiled_code_设置为jni入口,将data_设置为想要跳转到的C入口,对于jni入口的地址,可以通过查找libart的符号信息art_quick_generic_jni_trampoline获取,或者从其他已知的jni函数获取,所有jni函数的entry_point_from_quick_compiled_code_都是相同的

yearsyan avatar Nov 07 '21 06:11 yearsyan