Я анализирую приложение для Android, которое использует собственные методы с помощью общей библиотеки Libnative-Lib.so. Вот соответствующий код Java: < /p>
static {
System.loadLibrary("native-lib");
}
public final native byte[] f(Context context, String m5);
public final native String m(Context context, int p02, int p12);
< /code>
После декомпиляции libnative-lib.so с использованием ghidra я обнаружил только один экспортированный символ: jni_onload (). Никаких символов для f () или m () не присутствовало, что заставило меня подозревать, что собственные методы динамически зарегистрированы через регистрации.
undefined4 JNI_OnLoad(long *param_1) {
...
iVar2 = (**(code **)(*local_40 + 0x6b8))(local_40, lVar3, &DAT_001cc108, 5);
...
}
< /code>
Я скопировал сценарий FRIDA, чтобы занять регистрации и извлечь имена и адреса зарегистрированных нативных методов: < /p>
let addrRegisterNatives = null;
Process.enumerateModules().forEach(function (m) {
Module.enumerateSymbolsSync(m.name).forEach(function (s) {
if (s.name.includes("RegisterNatives") && (!s.name.includes("CheckJNI"))) {
console.log(m.name, s.name);
addrRegisterNatives = s.address;
}
});
});
setTimeout(() => {
Interceptor.attach(addrRegisterNatives, {
onEnter: function (args) {
var nMethods = parseInt(args[3]);
console.log("\n[+] env->RegisterNatives()");
console.log("\tNumber of methods:", nMethods);
var class_name = Java.vm.tryGetEnv().getClassName(args[1]);
console.log("\tClass name:", class_name);
var methods_ptr = ptr(args[2]);
for (var i = 0; i < nMethods; i++) {
var base = methods_ptr.add(i * Process.pointerSize * 3);
var methodName = Memory.readCString(Memory.readPointer(base));
var sig = Memory.readCString(Memory.readPointer(base.add(Process.pointerSize)));
var fnPtr = Memory.readPointer(base.add(Process.pointerSize * 2));
console.log(`\t\tMethod: ${methodName}, Signature: ${sig}, Address: ${fnPtr}`);
}
}
});
}, 2000);
< /code>
Это успешно регистрирует имена методов f () и m (), их подписи и указатели функций.
setTimeout(() => {
Java.perform(function () {
const NATIVE_OFFSET = 0x14610c; // offset from base
const libName = "libnative-lib.so";
const libBase = Module.findBaseAddress(libName);
if (libBase) {
const nativeFuncPtr = libBase.add(NATIVE_OFFSET);
Interceptor.attach(nativeFuncPtr, {
onEnter: function (args) {
console.log("[+] Native m() called!");
console.log(`arg1 (this): ${args[0]}`);
console.log(`arg2 (context): ${args[1]}`);
},
onLeave: function (retval) {
console.log(`[+] Native m() returned: ${retval}`);
}
});
} else {
console.error(`[-] Could not find ${libName}`);
}
});
}, 5000);
< /code>
Но нет вывода вообще не напечатано - даже не начальный оператор журнала. Я уверен, что метод вызывается во время выполнения.
Подробнее здесь: https://stackoverflow.com/questions/796 ... rnatives-l
Frida Interceptor не запускает метод JNI, зарегистрированный через регистрации (Libnative-lib.so) ⇐ Javascript
Форум по Javascript
1749303759
Anonymous
Я анализирую приложение для Android, которое использует собственные методы с помощью общей библиотеки Libnative-Lib.so. Вот соответствующий код Java: < /p>
static {
System.loadLibrary("native-lib");
}
public final native byte[] f(Context context, String m5);
public final native String m(Context context, int p02, int p12);
< /code>
После декомпиляции libnative-lib.so с использованием ghidra я обнаружил только один экспортированный символ: jni_onload (). Никаких символов для f () или m () не присутствовало, что заставило меня подозревать, что собственные методы динамически зарегистрированы через регистрации.
undefined4 JNI_OnLoad(long *param_1) {
...
iVar2 = (**(code **)(*local_40 + 0x6b8))(local_40, lVar3, &DAT_001cc108, 5);
...
}
< /code>
Я скопировал сценарий FRIDA, чтобы занять регистрации и извлечь имена и адреса зарегистрированных нативных методов: < /p>
let addrRegisterNatives = null;
Process.enumerateModules().forEach(function (m) {
Module.enumerateSymbolsSync(m.name).forEach(function (s) {
if (s.name.includes("RegisterNatives") && (!s.name.includes("CheckJNI"))) {
console.log(m.name, s.name);
addrRegisterNatives = s.address;
}
});
});
setTimeout(() => {
Interceptor.attach(addrRegisterNatives, {
onEnter: function (args) {
var nMethods = parseInt(args[3]);
console.log("\n[+] env->RegisterNatives()");
console.log("\tNumber of methods:", nMethods);
var class_name = Java.vm.tryGetEnv().getClassName(args[1]);
console.log("\tClass name:", class_name);
var methods_ptr = ptr(args[2]);
for (var i = 0; i < nMethods; i++) {
var base = methods_ptr.add(i * Process.pointerSize * 3);
var methodName = Memory.readCString(Memory.readPointer(base));
var sig = Memory.readCString(Memory.readPointer(base.add(Process.pointerSize)));
var fnPtr = Memory.readPointer(base.add(Process.pointerSize * 2));
console.log(`\t\tMethod: ${methodName}, Signature: ${sig}, Address: ${fnPtr}`);
}
}
});
}, 2000);
< /code>
Это успешно регистрирует имена методов f () и m (), их подписи и указатели функций.
setTimeout(() => {
Java.perform(function () {
const NATIVE_OFFSET = 0x14610c; // offset from base
const libName = "libnative-lib.so";
const libBase = Module.findBaseAddress(libName);
if (libBase) {
const nativeFuncPtr = libBase.add(NATIVE_OFFSET);
Interceptor.attach(nativeFuncPtr, {
onEnter: function (args) {
console.log("[+] Native m() called!");
console.log(`arg1 (this): ${args[0]}`);
console.log(`arg2 (context): ${args[1]}`);
},
onLeave: function (retval) {
console.log(`[+] Native m() returned: ${retval}`);
}
});
} else {
console.error(`[-] Could not find ${libName}`);
}
});
}, 5000);
< /code>
Но нет вывода вообще не напечатано - даже не начальный оператор журнала. Я уверен, что метод вызывается во время выполнения.
Подробнее здесь: [url]https://stackoverflow.com/questions/79657001/frida-interceptor-not-triggering-on-jni-method-registered-via-registernatives-l[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия