能力值:
( LV1,RANK:0 )
|
-
-
2 楼
调用过来的那个class或者实例。在Java调用native。jvm会自动帮你传前两个参数
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
KomiMoe
调用过来的那个class或者实例。在Java调用native。jvm会自动帮你传前两个参数
用frida nativefunction调用也是吗。。我找了很久,能看懂的我都看了,就是找不到,就差去github 问了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
需要调试这个JNI库函数吗,这个AndroidnativeEMU模拟器可能有用,https://bbs.pediy.com/thread-254799.htm,可以把so库提出来单独调用,这是我测试的一个demo # Initialize emulator
emulator = Emulator(
vfp_inst_set=True,
vfs_root=posixpath.join(posixpath.dirname(__file__), "vfs")
)
# Create java class.
class LocalApplication(metaclass=JavaClassDef, jvm_name='com/example/demo/LocalApplication'):
def __init__(self):
pass
@java_method_def(name='encodeString', signature='(Ljava/lang/String;)Ljava/lang/String;', native=True)
def encode_string(self, mu):
pass
@java_method_def(name='decodeString', signature='(Ljava/lang/String;)Ljava/lang/String;', native=True)
def decode_string(self, mu):
pass
# Register Java class.
emulator.java_classloader.add_class(LocalApplication)
emulator.load_library("lib/libc.so", do_init=False)
emulator.load_library("lib/libdl.so")
emulator.load_library("lib/liblog.so")
emulator.load_library("lib/libz.so")
emulator.load_library("lib/libstdc++.so")
emulator.load_library("lib/libm.so")
lib_module = emulator.load_library("lib/libnative_lib.so")
# Show loaded modules.
logger.info("Loaded modules:")
for module in emulator.modules:
logger.info("[0x%x] %s" % (module.base, module.filename))
try:
# 运行jni onload
emulator.call_symbol(lib_module, 'JNI_OnLoad', emulator.java_vm.address_ptr, 0x00)
# 直接调用库函数
# 申请一块内存,用于传入参数
emulator.call_symbol(lib_module, 'malloc', 0x100)
input_address = emulator.mu.reg_read(UC_ARM_REG_R0)
# 申请一块内存,用于接收结果
emulator.call_symbol(lib_module, 'malloc', 0x100)
output_address = emulator.mu.reg_read(UC_ARM_REG_R0)
# 向申请的内存写入参数字符串
memory_helpers.write_utf8(emulator.mu, input_address, 'a=1&b=2&c=3')
input_str = memory_helpers.read_utf8(emulator.mu, input_address)
print('Input str: %s' % input_str)
# 调用库函数
emulator.call_symbol(lib_module, 'U_Cast_ENcode_Buf', input_address, output_address, 0x100, 0x100)
# 读取结果
result_str = memory_helpers.read_utf8(emulator.mu, output_address)
print('Response form so function: %s' % result_str)
# 调用JNI方法
Application = LocalApplication()
data = 'a=1&b=2&c=3'
result = Application.encode_string(emulator, data)
print('Response form native function: %s' % result)
except UcError as e:
print('Exit at %x' % emulator.mu.reg_read(UC_ARM_REG_PC))
raise
最后于 2019-10-14 11:02
被guoqiangck编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
guoqiangck
需要调试这个JNI库函数吗,这个AndroidnativeEMU模拟器可能有用,https://bbs.pediy.com/thread-254799.htm,可以把so库提出来单独调用,这是我测试的 ...
谢谢你,不过我就是想知道怎么在frida里获取到jobject和jclass。。。我再尝试吧
|
能力值:
( LV12,RANK:404 )
|
-
-
6 楼
试试 var env=Java.vm.getEnv(); var obj=env.allocObject(clazz)创建一个新对象
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你调用本地对象就要构造对象引用啊。第一个是虚拟机指针。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
堂前燕
试试 var env=Java.vm.getEnv(); var obj=env.allocObject(clazz)创建一个新对象
emmm,用env.findClass只能在Interceptor.attach中使用
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
zylyy
你调用本地对象就要构造对象引用啊。第一个是虚拟机指针。
env这个我知道怎么获取,困惑着我的是jobject和jclss怎么造出来
|
能力值:
( LV6,RANK:81 )
|
-
-
10 楼
guoqiangck
需要调试这个JNI库函数吗,这个AndroidnativeEMU模拟器可能有用,https://bbs.pediy.com/thread-254799.htm,可以把so库提出来单独调用,这是我测试的 ...
牛啤
|
能力值:
( LV6,RANK:96 )
|
-
-
11 楼
https://github.com/lasting-yang/frida_hook_libart/blob/master/hook_RegisterNatives.js
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
Imyang
https://github.com/lasting-yang/frida_hook_libart/blob/master/hook_RegisterNatives.js
首先感谢大佬回复,我以为没人再会回复了就没研究了,刚刚看到你的回复后打开链接一看,你写的这个代码我几天前看过了,我完全模拟你的代码写了一下,其中47行的导出方法_ZN3art3JNI11AllocObjectEP7_JNIEnvP7_jclass 我获取不到,我也把我手机里的32位和64位的libart.so扔进ida搜索了,找是能找到很多包含AllocObjec的方法,但是没有类似AllocObjectEP7_JNIEnvP7_jclass的方法,请问问题出在哪,谢谢
|
能力值:
( LV6,RANK:96 )
|
-
-
13 楼
nu11
首先感谢大佬回复,我以为没人再会回复了就没研究了,刚刚看到你的回复后打开链接一看,你写的这个代码我几天前看过了,我完全模拟你的代码写了一下,其中47行的导出方法_ZN3art3JNI11AllocOb ...
系统版本不一样,可能函数的签名也不一样,你需要找到art::JNI::AllocObject函数
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
https://bbs.pediy.com/thread-261018.htm 楼主是这样吗?
|
|
|