Как отследить метод JNI с Java на C?

#c #java-native-interface #reverse-engineering

#c #java-native-interface #обратный инжиниринг

Вопрос:

Итак, я пытаюсь перепроектировать приложение.

Я отслеживаю метод JNI с именем Test_Method, который вызывает метод C из общего объекта,

В общем объекте я вижу, что имя метода Test_Method существует, но у него нет перекрестных ссылок.

Как мне найти метод из общего объекта, к которому вызывается метод JNI из Java?

Комментарии:

1. Терминология: C не имеет методов , у него есть функции .

Ответ №1:

Имя встроенной функции, которая соответствует определенному собственному методу Java, детерминированно связано с именем метода Java, полным именем класса, в котором он находится, и типами его аргументов, если он перегружен. Особенности описаны в главе 2 спецификации JNI, но вместо того, чтобы разбираться в этом, может быть проще просто использовать javac -h (JDK 8 или более позднюю версию) или javah инструмент (устаревший со времен JDK 8, но все еще присутствующий, по крайней мере, в JDK 9), чтобы сгенерировать его для вас в виде файла заголовка C или C .

Ответ №2:

Найдите список экспортированных функций вашей библиотеки DLL или файла so. Если у него нет ряда функций с Java_com… префиксом, но есть JNI_OnLoad вместо этого, ваша собственная библиотека использует registerNatives(), и вы должны найти соответствующую таблицу JNINativeMethod структур, которая отображает собственные методы в функции C.