Сейчас на форуме: johnniewalker, NIKOLA (+7 невидимых)

 eXeL@B —› Крэки, обсуждения —› Внесение функций в .so библиотеки Android
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 марта 2017 17:11
· Личное сообщение · #1

Доброго времени суток. Прошерстил форум и гугл, но ответа на вопрос не нашел. Итак, в чем суть моей проблемы:
Имеется библиотека libaudioflinger.so, которая содержит в себе некоторые функции для запуска звукового эффекта (в моем случае портирую DTS headphone:X), и точно такой же файл без этих функций в прошивке моего телефона.
Смотрю функции с помощью ida pro, помечаю их начало и конец в файле донора, открываю файл взятый с моего телефона через hex workshop, вношу строки, скопированные из флингера донора.

Проблема заключается в том, что не могу сделать relocate библиотеки - так как после сохранения теряется структура файлаю Насколько я понимаю мне нужен patchelf, чтобы линкер воспринимал пропатченный файл, но patchelf опять же насколько я понял работает для никс/линукс и не воспринимает библиотеки ведра. Возможно я в корне неправильно понимаю процесс, или есть аналог patchelf который поможет решить мне эту проблему?




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 марта 2017 21:44
· Личное сообщение · #2

Дело в том, что в случае с бинарными файлами нет понятия "строк", как в случае с обычным текстом, поэтому нельзя просто так взять и скопипастить бинарный код, как текст.
При это дело не только в релокации, но и в перекрёстных ссылках на функции.

В данном случае вижу несколько возможных вариантов:

1. Декомпилировать до исходников на Си, чтобы можно было отсутствующие функции отдельно пересобрать в отдельную библиотеку, которую подключить отдельно. Как подключить: в Hiew добавить вызов библиотеки при инициализации (чтобы подгрузить), после чего добавить в функции, в которые добавляется новый функционал, добавить jmp или call на функции подгруженной библиотеки. Этот вариант хорош тем, что позволяет вносить минимальные изменения в виде патчей, а всю работу вынести в отдельную библиотеку.
2. Дизассемблировать в .asm, после чего либо последовать по пути п.1.
3. Дизассемблировать в .asm, после чего открыть изменяемый и оригинальный файлы в Hiew (открытие другого файла по F9, переключение между файлами по Tab) и, поглядывая в исходники, копировать блоки функций (выделение двойным кликом по начальному и конечному байту блока) в hex режиме, после чего в режиме кода (переключение по F4) править ссылки.

Только после этого решать проблему с релоками.
Ну и попробуй скомпилить patchelf из исходников: https://github.com/NixOS/patchelf.
Если не получится, поставь на виртуалку или воспользуйся онлайн сервисами с установленным линем.

Ну и напоследок простой вопрос:
А нельзя полную версию библиотеки заменить целиком, без препарирования?

-----
EnJoy!



 eXeL@B —› Крэки, обсуждения —› Внесение функций в .so библиотеки Android
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати