Вместо перечисления экспортов конкретной библиотеки вы можете попробовать вызвать Module.findExportByName(null, "fopen")
, чтобы получить адрес fopen
(аргумент null указывает frida просмотреть экспорт всех загруженных библиотек) и использовать Interceptor
API так же, как вы сделали.
Это должно выглядеть примерно так:
Interceptor.attach(Module.findExportByName(null, "fopen"), {
onEnter: function(args) {
console.log("Interceptor attached onEnter...");
},
onLeave: function(args) {
console.log("Interceptor attached onLeave...");
}
}
Вы точно не указали, как происходит сбой кода, но чтобы убедиться, что библиотека, о которой вы говорите, действительно загружена в приложение, вы можете перечислить все загруженные модули:
Process.enumerateModules()
.forEach(function(m) {
// You can print just the name by using m.name or the entire system path with m.path
console.log(JSON.stringify(m));
});
Другим способом было бы использовать Process.enumerateModules()
для поиска правильного модуля и затем вызывать enumerateExports
для полученного вами объекта Module
.
Это гарантирует, что вы ищете fopen
в правильном модуле, если имя модуля не совсем libnative-lib.so
:
Process.enumerateModules()
.filter(function(m){ return m["path"].toLowerCase().indexOf("libnative") != -1 ; })
.forEach(function(mod) {
console.log(JSON.stringify(mod));
mod.enumerateExports().forEach(function (exp) {
if (exp.name.indexOf("fopen") != -1) {
console.log("fopen found!");
}
})
});
HTH, если это все еще не решит вашу проблему, опубликуйте дополнительную информацию в вашем вопросе.