function hook_jni_func(){
Java.perform(function(){
var symbols
=
Process.getModuleByName(
"libart.so"
).enumerateSymbols();
var NewStringUTF_addr
=
NULL;
var GetStringUTFChars_addr
=
NULL;
for
(var index
=
0
; index < symbols.length; index
+
+
) {
const symbol
=
symbols[index];
if
(symbol.name.indexOf(
"CheckJNI"
)
=
=
-
1
&& symbol.name.indexOf(
"NewStringUTF"
) >
=
0
){
NewStringUTF_addr
=
symbol.address;
}
if
(symbol.name.indexOf(
"CheckJNI"
)
=
=
-
1
&& symbol.name.indexOf(
"GetStringUTFChars"
) >
=
0
){
GetStringUTFChars_addr
=
symbol.address;
}
}
console.log(
"NewStringUTF_addr :"
,NewStringUTF_addr,
"GetStringUTFChars_addr :"
,GetStringUTFChars_addr);
var NewStringUTF
=
new NativeFunction(NewStringUTF_addr,
'pointer'
,[
'pointer'
,
'pointer'
])
var GetStringUTFChars
=
new NativeFunction(GetStringUTFChars_addr,
'pointer'
,[
'pointer'
,
'pointer'
,
'pointer'
]);
var env
=
Java.vm.tryGetEnv().handle;
console.log(
"Java.vm.tryGetEnv() "
,JSON.stringify(Java.vm.tryGetEnv()));
var string_eg_addr
=
Memory.allocUtf8String(
"xibei"
);
console.log(
"string_ex_addr :"
,string_eg_addr);
var jString
=
NewStringUTF(env,string_eg_addr);
console.log(
"jString :"
,jString);
var cStr
=
GetStringUTFChars(env,jString,ptr(
0
));
console.log(
"cStr :"
,cStr.readCString());
});
}
打印值:
NewStringUTF_addr :
0xeff56c71
GetStringUTFChars_addr :
0xeff573e1
Java.vm.tryGetEnv() {
"handle"
:
"0xea01bb00"
,
"vm"
:{}}
string_ex_addr :
0xd38e4a80
jString :
0x1
cStr : xibei