Как использовать Angr для анализа функций JNI в разделяемых библиотеках?

Я новичок в области бинарного анализа. Я хочу проанализировать собственные функции интерфейса JNI (например,RegisterNativesили другие функции, перечисленные здесь, используя SimProcedures предоставленного AnGR. Общие библиотеки (файлы *.so) должны быть частью приложений Android. Однако я заметил, что эти собственные функции интерфейса JNI не отображаются в виде символов в разделяемых библиотеках. Итак, мои вопросы:

  1. Почему у этих функций собственного интерфейса JNI нет соответствующих символов в разделяемых библиотеках? Я что-то сделал не так или они так думали?
  2. В AnGR, SimProcedures может связываться только с символами, если я не пропустить что - нибудь. Итак, если таких символов нет, что мне делать, чтобы они работали?

1 ответ

Решение

JVM предоставляет различные функции в виде таблицы указателей на функции. См здесь, например.

Звонок в env->FindClass будет представлен в сборке как-то вроде (псевдокод C):

fp = env + 6 * sizeof(void *);
fp(env, ...)

Может быть, вы сможете научить этой гневной вещи об этой таблице указателей функций?

Другие вопросы по тегам