LINUX.ORG.RU

Изменить Имя Функции в ELF.

 , ,


0

1

Здравствуйте подскажите пожалуйста каким образом можно изменить имя Функции в ELF файле, буквально одну букву. Это SO библиотека одного Андроид приложения, хочу сделать что-то наподобие защиты, от подмены файлов.

Саму библиотеку в свое время подправил, немного модифицировав логику работы: Изменил одну функцию на свою, Точнее создал две своих функции вместо Одной, настроил адреса и вызовы, поверил с помощью ИДА все работает, и собственно работает на Андроид.

Теперь понадобилось Изменить имя импортируемой Функции, незнаю как правильно назвать, это JNI. Нужная мне Функция вызывается из Java code, т.е. из приложения АПК. Сама библиотека SO находится в отдельно Загружаемых файлах, так вот изменил имя вызываемой Функции в АПК, и в самой библиотеке, но такой метод не работает, АПК просто не может достучаться (не видит) эту функцию.

Правильно ли я понимаю что требуется Перекомпоновка ELF-a с помощью Linker?

Прошу помощи у знающих товарищей. Исходников естественно Нет.

Здравствуйте подскажите пожалуйста каким образом можно изменить имя Функции в ELF файле, буквально одну букву.

Почитай про --redefine-sym в man objcopy

хочу сделать что-то наподобие защиты, от подмены файлов.

Это не будет надежной защитой

SZT ★★★★★ ()
Ответ на: комментарий от SZT

Спасибо, Но выдаёт ошибку:

objcopy: Unable to recognise the format of the input file lib.so

Забыл написать - это библиотека для ARM, работает на Android Вот Header:

readelf -h diag.so

ELF Header:

Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00

Class: ELF32

Data: 2’s complement, little endian

Version: 1 (current)

OS/ABI: UNIX - System V

ABI Version: 0

Type: DYN (Shared object file)

Machine: ARM

Version: 0x1

Devill ()
Последнее исправление: Devill (всего исправлений: 5)
Ответ на: комментарий от SZT

Да спасибо, теперь Ошибок не выдаёт, но и Имя не меняет, Модифицирует четыре непонятных байта, почти в конце lib.so

Подскажите пожалуйста, что можно проверить еще ?

Devill ()
Последнее исправление: Devill (всего исправлений: 1)
Ответ на: комментарий от Devill

Да, видимо это так не работает, и этим objcopy надо символы в обычных объектных файлах менять, а для .so это не подходит. Если исходников нет, надо как-то хитро пересобирать .so файл

https://stackoverflow.com/a/20599760

SZT ★★★★★ ()

ЛОР и раздел Development это вообще не по теме реверсинга и патчинга, лучше куда-нибудь на https://forum.reverse4you.org/, https://wasm.in/, https://exelab.ru/ и прочие такие места идти, но есть тут несколько людей, которые в реверсинге шарят, может что подскажут. Я и кастану, может что-то умное посоветуют XVilka, ValdikSS

Я когда-то тоже что-то похожее спрашивал Добавить секцию в готовый elf бинарник

SZT ★★★★★ ()
Ответ на: комментарий от anonymous

Нет, надо еще контрольные суммы пересчитывать. И всякие хеш-таблицы тоже пересчитывать, которые для символов и прочее, посмотри что написано по ссылке на стековерфлоу что я выше скинул

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

Здесь не любят проприетаршиков

Скорее всего я пытаюсь защитить свои наработки и дополнения в стоковой библиотеке.

Один товарищ уже сделал, под свои нужды поправил и также изменил Имена функий, но не признаётся как сделал :)

Devill ()
Последнее исправление: Devill (всего исправлений: 1)
Ответ на: комментарий от Devill

Один товарищ уже сделал, под свои нужды поправил и также изменил Имена функий, но не признаётся как сделал :)

Не в чем там признаваться. Что надо делать - описано в https://sourceware.org/ml/binutils/2006-03/msg00266.html

Может есть какие-то готовые утилиты для этого, но я про них не слышал

SZT ★★★★★ ()
Последнее исправление: SZT (всего исправлений: 1)
Ответ на: комментарий от Devill

Скорее всего я пытаюсь защитить свои наработки и дополнения в стоковой библиотеке.

ты совсем не уверен? ну, да… исходники же твоих наработок потерялись… или удалил, чтобы не украли?

anonymous ()
Ответ на: комментарий от XVilka

Да спасибо, этот проект попадался на глаза во время поиска в сети, но я толком не понял как запускать. В Pyton не разбираюсь, в Си немного понимаю (писал несколько консольных программ), наверное и Pyton надо будет освоить.

Может поможете в проекте?

В долгу не останусь.

Devill ()
Последнее исправление: Devill (всего исправлений: 1)
Ответ на: комментарий от Devill

Я так понимаю если длина строки(имя Функции) остаётся неизменной, и меняется только один-два символа, то требуется только обновить ХЕШ таблицу символов, естественно после замены символа в имени Функции?

Devill ()
Ответ на: комментарий от Devill

Наткнулся на свой вопрос. В обще разобрался с Переименованием Функций. Дело в том что Разные записи(имена) дают одинаковый Хеш, так вот надо Просто подобрать такое имя, которое даёт такой же Хеш, и больше ничего не надо модифицировать, кроме названия Функции.

Devill ()