LINUX.ORG.RU

Хранятся ли где-то в бинарнике адреса функций?

 , ,


0

4

Собственно, глядя на выхлоп objdump с ключем --disassemble увидел что оно все функции выделяет в отдельные блоки и даже подписывает их имена (даже после того, как я перенес бинарник подальше от исходников). Собственно, это просто внутренняя магия самой программы или эта инфа (или хотя бы ее часть) где-то хранятся?

Пы.Сы. Собственно, нужно это мне для однозначной идентификации приложений, чтобы можно было распознать их, даже если их переименуют. Но это так. Мало ли, вдруг есть менее извращенный способ и кто-то подскажет.

Собственно, это просто внутренняя магия самой программы или эта инфа (или хотя бы ее часть) где-то хранятся?

да, в отладочной информации

но и без неё выделить функции тоже можно, они обычно начинаются стандартными последовательностями инструкций и на их начало ссылаются инструкции call или аналогичные

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

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

Mizantrop_LoL
() автор топика
Ответ на: комментарий от Harald

Надо чтобы было не просто можно, а чтобы при этом было поменьше костылей) Я так понимаю, отладочная информация в убирается компиляторами в релизной версии, да?

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

Бинарь, который не либа проще идентифицировать по данным в нём.

Если бинарь заданный и без пересборок всяких то ничего лучше md5sum особо не придумаешь. Если имееет место пересборки, то можно ориентироваться на какие нибудь данные из .rodata.

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

Я, конечно, не гуру, но вроде как считать хэш от 50 Мб (к примеру) бинарника во время системного вызова (sys_execve) - как-то не кошерно. Тем более что md5 довольно таки долго считается, если я не ошибаюсь. Или я не в курсе чего-то?

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

md5sum 50 метрового файла

~ $ time md5sum test.file
f703566b750bbddac600b224d0ea8ce9  test.file

real	0m0.059s
user	0m0.050s
sys	0m0.000s

не так уж и долго...

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

для начала избавься вот от этого

идентификацию нужно проводить внутри ядра во время системного вызова.

прежде чем о костылях кукарекать

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

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

Mizantrop_LoL
() автор топика

Используя ассемблер и скрипты линкера можно написать бинарник, имеющий адреса функций как у доверенного.

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

Ты тупо и упорно мутишь неработоспособную фигню.

anonymous
()

Собственно, нужно это мне для однозначной идентификации приложений, чтобы можно было распознать их, даже если их переименуют. Но это так. Мало ли, вдруг есть менее извращенный способ и кто-то подскажет.

Конечно есть. Цифровую подпись делай для доверенных приложений. http://opensource.samsung.com/reception/receptionSub.do?method=sub&sub=F&... Вот тут есть модуль ядра, который так поступает.

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

да, в отладочной информации

В таблице символов, вообще-то

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

Опять же, таблица символов никуда не убирается, если не делать strip

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

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

Очень интересно как ты собрался хэндлить JIT-компиляторы. Ну и интерпретаторы всякие. И вообще сложных случаев тут может быть очень много.

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

Выше ответили. Ещё например, целые iso файлы дистров так предлагают проверять ;)

Не хочешь в процессы, возьми соответсвующую либу и проделай манипуляции вручную.

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

Но хранить-то мне надо именно черный список. Само собой, было бы гораздо более проще сделать белый список и не парится. Однако задача есть задача)

Mizantrop_LoL
() автор топика
Ответ на: комментарий от Deleted

Само собой, даже если я возьму хэш от всего приложения, там можно заменить пару-тройку инструкций каким-нибудь hex-редактором и все, хэш уже другой. Однако я хочу охватить хотя бы то, что мне видится возможным в данном случае.

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

Эта глупая задача. Никому решение такой задачи полезным не будет. Можно бинарник запаковать каким-нибудь UPX-ом и вся защита накрывается медным тазом

SZT ★★★★★
()

В таблице символов.

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

тогда почему ты спрашиваешь здесь, а не у того кто поставил тебе такую глупую задачу?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.