Как использовать Angr для анализа функций JNI в разделяемых библиотеках?
Я новичок в области бинарного анализа. Я хочу проанализировать собственные функции интерфейса JNI (например,RegisterNatives
или другие функции, перечисленные здесь, используя SimProcedures предоставленного AnGR. Общие библиотеки (файлы *.so) должны быть частью приложений Android. Однако я заметил, что эти собственные функции интерфейса JNI не отображаются в виде символов в разделяемых библиотеках. Итак, мои вопросы:
- Почему у этих функций собственного интерфейса JNI нет соответствующих символов в разделяемых библиотеках? Я что-то сделал не так или они так думали?
- В AnGR, SimProcedures может связываться только с символами, если я не пропустить что - нибудь. Итак, если таких символов нет, что мне делать, чтобы они работали?
1 ответ
Решение
JVM предоставляет различные функции в виде таблицы указателей на функции. См здесь, например.
Звонок в env->FindClass
будет представлен в сборке как-то вроде (псевдокод C):
fp = env + 6 * sizeof(void *);
fp(env, ...)
Может быть, вы сможете научить этой гневной вещи об этой таблице указателей функций?