这个sign依然是32位的字符串
都9020年了,这种规模用户的App应该是不会裸奔在java层了,我们就直接一点,在so里面搜索 sign=
可惜没有结果……
藏起来的东西一定是重要的东西
so层导出函数给java层调用,有两种方法,一种是静态注册,直接会体现在so的导出表里。 一种是RegisterNatives来动态注册,这种就比较隐晦了,从导出表里看不到痕迹。
所以我们Hook下RegisterNatives,看看它藏了什么?
// hook register 打印动态注册的函数地址
function hook_register(){
// libart.so 所有导出函数表
var symbols = Module.enumerateSymbolsSync(“libart.so”);
var addr_register = null;
for(var i = 0; i < symbols.length; i++){
var symbol = symbols[i];
var method_name = symbol.name;
if(method_name.indexOf(“art”) >= 0){
if(method_name.indexOf(“_ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi”) >= 0){
addr_register = symbol.address;
}
}
}
// 开始hook
if(addr_register){
Interceptor.attach(addr_register, {
onEnter: function(args){
var methods = ptr(args[2]);
var method_count = args[3];
console.log(“[RegisterNatives] method_count:”, method_count);
for(var i = 0; i < method_count; i++){
var fn_ptr = methods.add(i *