#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.